diff --git a/docs/openstack.md b/docs/openstack.md
index ee1047ae9e0d65ffd42a53d8eb4f02e17430e6eb..c74ecbec47c907bc7fe1d9a72725452be1da8052 100644
--- a/docs/openstack.md
+++ b/docs/openstack.md
@@ -108,5 +108,11 @@ The new cloud provider is configured to have Octavia by default in Kubespray.
   - ""
   ```
 
+- You can override the default OpenStack metadata configuration (see [#6338](https://github.com/kubernetes-sigs/kubespray/issues/6338) for explanation):
+  
+  ```yaml
+  external_openstack_metadata_search_order: "configDrive,metadataService"
+  ```
+
 - Run `source path/to/your/openstack-rc` to read your OpenStack credentials like `OS_AUTH_URL`, `OS_USERNAME`, `OS_PASSWORD`, etc. Those variables are used for accessing OpenStack from the external cloud provider.
 - Run the `cluster.yml` playbook
diff --git a/inventory/sample/group_vars/all/openstack.yml b/inventory/sample/group_vars/all/openstack.yml
index ca76bb0928a1ad4e42825d896e359eddca35ccd0..71c392414eddfff64ca26aad038c29039c5d7374 100644
--- a/inventory/sample/group_vars/all/openstack.yml
+++ b/inventory/sample/group_vars/all/openstack.yml
@@ -33,6 +33,7 @@
 #   - ""
 # external_openstack_network_public_networks:
 #   - ""
+# external_openstack_metadata_search_order: "configDrive,metadataService"
 
 ## The tag of the external OpenStack Cloud Controller image
 # external_openstack_cloud_controller_image_tag: "latest"
diff --git a/roles/kubernetes-apps/external_cloud_controller/openstack/templates/external-openstack-cloud-config.j2 b/roles/kubernetes-apps/external_cloud_controller/openstack/templates/external-openstack-cloud-config.j2
index d807426a01a397d312b8d33ff3754623e91b74ed..25a3ab08931ba59db5496c7f7539ff01131d5075 100644
--- a/roles/kubernetes-apps/external_cloud_controller/openstack/templates/external-openstack-cloud-config.j2
+++ b/roles/kubernetes-apps/external_cloud_controller/openstack/templates/external-openstack-cloud-config.j2
@@ -57,3 +57,8 @@ internal-network-name="{{ network_name }}"
 {% for network_name in external_openstack_network_public_networks %}
 public-network-name="{{ network_name }}"
 {% endfor %}
+
+[Metadata]
+{% if external_openstack_metadata_search_order is defined %}
+search-order="{{ external_openstack_metadata_search_order }}"
+{% endif %}
\ No newline at end of file