E1220 17:33:48.452774 1 controller.go:257] controller-runtime/controller "msg"="Reconciler error" "error"="unexpected error while probing vcenter for infrastructure.cluster.x-k8s.io/v1alpha3, Kind=VSphereCluster uploader-prod/uploader-autoscale: Post \"https://VCENTER-FQDN/sdk\": host \"VCENTER-FQDN:443\" thumbprint does not match \"<THUMBPRINT>\"" "controller"="vspherecluster" "name"="uploader-autoscale" "namespace"="uploader-prod"2025-04-02 22:29:09.930 [WARNING][85] felix/ipip_mgr.go 111: Failed to add IPIP tunnel device error=exit status 12025-04-02 22:29:09.930 [WARNING][85] felix/ipip_mgr.go 88: Failed configure IPIP tunnel device, retrying... error=exit statusThis error occurs when the vCenter certificate thumbprint changes but is not updated in the TKG management cluster objects and/or in the workload cluster object's metadata.
Confirm if there is a mismatch.
kubectl get secret -A | grep cpi-addon
kubectl get secret WC-vsphere-cpi-addon | grep label kubectl -n kube-system get cm vsphere-cloud-config -o yamlUse the "tanzu mc credentials update" command to update the thumbprint in the Management Cluster and its Workload Clusters. See the steps in Update Cluster Credentials for more info.
Note: Please update the exported yaml file with the new value of thumbprint before replacing the secret. As a best practice, verify that the secret has been updated with the new thumbprint after the replacement.
In each of the commands, make sure to replace the string "WC" with your Workload Cluster name.
kubectl get secret -A | grep cpi-addon
kubectl get secret WC-vsphere-cpi-addon -o jsonpath={.data.values\\.yaml} | base64 -d > WC-vsphere-cpi-addon.yml
kubectl create secret generic WC-vsphere-cpi-addon --type=tkg.tanzu.vmware.com/addon --from-file=values.yaml=WC-vsphere-cpi-addon.yml --dry-run=client -o yaml | kubectl replace -f -kubectl label secret WC-vsphere-cpi-addon tkg.tanzu.vmware.com/cluster-name=WC.kubectl label secret WC-vsphere-cpi-addon tkg.tanzu.vmware.com/addon-name=vsphere-cpikubectl -n tkg-system get secret vsphere-cpi-data-values -o jsonpath={.data.values\\.yaml} | base64 -d | grep -i thumbprint.kubectl -n kube-system get cm vsphere-cloud-config -o yaml.Note that the procedures above should be performed in each Workload Cluster.
In each of the following commands, make sure to replace the string "MC" with your Management Cluster name.
kubectl -n tkg-system get secret | grep vsphere-cpikubectl -n tkg-system get secret MC-vsphere-cpi-data-values -o jsonpath={.data.values\\.yaml} | base64 -d > MC-vsphere-cpi-data-values.yml.kubectl create secret generic MC-vsphere-cpi-data-values -n tkg-system --type=tkg.tanzu.vmware.com/addon --from-file=values.yaml=MC-vsphere-cpi-data-values.yml --dry-run=client -o yaml | kubectl replace -f -kubectl label secret MC-vsphere-cpi-data-values -n tkg-system tkg.tanzu.vmware.com/cluster-name=MC.kubectl label secret MC-vsphere-cpi-data-values -n tkg-system tkg.tanzu.vmware.com/addon-name=vsphere-cpikubectl get vsphereclusters -Akubectl get clusters -Akubectl edit vspherecluster WCkubectl edit cluster WCkubectl get cluster WC -o yamlkubectl scale deploy -n capv-system capv-controller-manager --replicas=0kubectl patch validatingwebhookconfiguration capv-validating-webhook-configuration --patch '{"webhooks": [{"name": "validation.vspherevm.infrastructure.x-k8s.io", "failurePolicy": "Ignore"}]}'kubectl patch mutatingwebhookconfiguration capv-mutating-webhook-configuration --patch '{"webhooks": [{"name": "default.vspherevm.infrastructure.x-k8s.io", "failurePolicy": "Ignore"}]}'kubectl get vspherevm -l cluster.x-k8s.io/cluster-name=<name-of-cluster> -n <ns-of-cluster> --no-headers=true | awk '{print $1}' | xargs kubectl patch vspherevm -n <ns-of-cluster> --type='merge' --patch '{"spec":{"thumbprint":"<new-thumbprint-value>"}}' kubectl get vspherevm -l cluster.x-k8s.io/cluster-name=<name-of-cluster> -n <ns-of-cluster> -oyaml | grep thumbprint
kubectl patch validatingwebhookconfiguration capv-validating-webhook-configuration --patch '{"webhooks": [{"name": "validation.vspherevm.infrastructure.x-k8s.io", "failurePolicy": "Fail"}]}'kubectl patch mutatingwebhookconfiguration capv-mutating-webhook-configuration --patch '{"webhooks": [{"name": "default.vspherevm.infrastructure.x-k8s.io", "failurePolicy": "Fail"}]}'kubectl scale deploy -n capv-system capv-controller-manager --replicas=1
.
Note: Please update the exported yaml file with the new value of thumbprint before replacing the secret. As a best practice, verify that the secret has been updated with the new thumbprint after the replacement.
In each of the commands, make sure to replace the string "WC" with your Workload Cluster name.
kubectl get secret -A | grep cpi-addon
kubectl get secret WC-vsphere-cpi-addon -o jsonpath={.data.values\\.yaml} | base64 -d > WC-vsphere-cpi-addon.yml
kubectl create secret generic WC-vsphere-cpi-addon --type=tkg.tanzu.vmware.com/addon --from-file=values.yaml=WC-vsphere-cpi-addon.yml --dry-run=client -o yaml | kubectl replace -f
kubectl label secret WC-vsphere-cpi-addon tkg.tanzu.vmware.com/cluster-name=WCkubectl label secret WC-vsphere-cpi-addon tkg.tanzu.vmware.com/addon-name=vsphere-cpikubectl -n tkg-system get secret vsphere-cpi-data-values -o jsonpath={.data.values\\.yaml} | base64 -d | grep -i thumbprintkubectl -n kube-system get cm vsphere-cloud-config -o yamlNote that the procedures above should be performed in each Workload Cluster.
In each of the following commands, make sure to replace the string "MC" with your Management Cluster name.
kubectl -n tkg-system get secret | grep vsphere-cpi kubectl -n tkg-system get secret MC-vsphere-cpi-addon -o jsonpath={.data.values\\.yaml} | base64 -d > MC-vsphere-cpi-addon.ymlkubectl create secret generic MC-vsphere-cpi-addon -n tkg-system --type=tkg.tanzu.vmware.com/addon --from-file=values.yaml=MC-vsphere-cpi-addon.yml --dry-run=client -o yaml | kubectl replace -f -kubectl label secret MC-vsphere-cpi-addon -n tkg-system tkg.tanzu.vmware.com/cluster-name=MCkubectl label secret MC-vsphere-cpi-addon -n tkg-system tkg.tanzu.vmware.com/addon-name=vsphere-cpikubectl -n kube-system get cm vsphere-cloud-config -o yaml
kubectl get vsphereclusters -Akubectl edit vspherecluster WCkubectl get vspherecluster WC -o yamlkubectl scale deploy -n capv-system capv-controller-manager --replicas=0kubectl patch validatingwebhookconfiguration capv-validating-webhook-configuration --patch '{"webhooks": [{"name": "validation.vspherevm.infrastructure.x-k8s.io", "failurePolicy": "Ignore"}]}'kubectl get vspherevm -l cluster.x-k8s.io/cluster-name=<name-of-cluster> -n <ns-of-cluster> --no-headers=true | awk '{print $1}' | xargs kubectl patch vspherevm -n <ns-of-cluster> --type='merge' --patch '{"spec":{"thumbprint":"<new-thumbprint-value>"}}'kubectl get vspherevm -l cluster.x-k8s.io/cluster-name=<name-of-cluster> -n <ns-of-cluster> -oyaml | grep thumbprint
kubectl patch validatingwebhookconfiguration capv-validating-webhook-configuration --patch '{"webhooks": [{"name": "validation.vspherevm.infrastructure.x-k8s.io", "failurePolicy": "Fail"}]}'kubectl scale deploy -n capv-system capv-controller-manager --replicas=1