diff --git a/upgrade-cluster.yml b/upgrade-cluster.yml
index 04b6614617f84d00bc9c7c38725b32c3f484bd01..ff2fd4e3ae7e8dedce84660d38e639117e46fbb2 100644
--- a/upgrade-cluster.yml
+++ b/upgrade-cluster.yml
@@ -95,12 +95,13 @@
     - { role: upgrade/post-upgrade, tags: post-upgrade }
   environment: "{{ proxy_env }}"
 
-- name: Upgrade calico on all masters and nodes
+- name: Upgrade calico and external cloud provider on all masters and nodes
   hosts: kube-master:kube-node
   any_errors_fatal: "{{ any_errors_fatal | default(true) }}"
   serial: "{{ serial | default('20%') }}"
   roles:
     - { role: kubespray-defaults}
+    - { role: kubernetes-apps/external_cloud_controller, tags: external-cloud-controller }
     - { role: network_plugin, tags: network }
     - { role: kubernetes-apps/network_plugin, tags: network }
     - { role: kubernetes-apps/policy_controller, tags: policy-controller }