build 7bbbddf7 | content blog-content@c8490fa · 338 posts | profiles 20 · corpus 267 | 0 skipped | | format
apiVersion: soultec.ch/v1kind: Postmetadata: name: vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found locale: de labels: author: matthias-grasmueck series: lessons-learned capability/network: 2.16 capability/security: 2.16 capability/containers: 2.39 vendor/vmware: 0.88 annotations: source: blog-content/posts/de/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found.md route: /de/insights/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found/ schema: /nerd/schema/posts.json markdown: /de/insights/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found.mdspec: title: vSphere with Tanzu und NSX Advanced Load Balancer – avi-secret not found date: 2024-02-09 author: matthias-grasmueck locale: de summary: >- Ich bin kürzlich über ein interessantes Verhalten bei einem Funktionstest einer VMware vSphere with Tanzu Container Runtime Plattform in Kombination mit dem VMware NSX Advanced Load Balancer capabilities: [network, security, containers] vendors: [vmware] series: lessons-learned hero: >- /blog-assets/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found/hero.webp legacySlug: vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found migrated: 2026-08-24 draft: false sections: - body: | Ich bin kürzlich über ein interessantes Verhalten bei einem Funktionstest einer VMware vSphere with Tanzu Container Runtime Plattform in Kombination mit dem VMware NSX Advanced Load Balancer gestolpert. Ich persönlich finde Funktionstests immer spannend, da man aus erster Hand erfahren kann, wie die eigenen Systeme unter erschwerten Bedingungen funktioniere bzw. ab wann sie den Dienst quittieren. Die Plattform basierte dabei auf [vSphere with Tanzu](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-with-tanzu-concepts-planning/GUID-28B0AEA2-2947-4FDD-AA71-51E46E24BF53.html) (vSphere 8.0 Update 2), [NSX Data Center](https://docs.vmware.com/en/VMware-NSX/index.html) (4.1.2.1) und [NSX (Avi) Advanced Load Balancer](https://docs.vmware.com/en/VMware-NSX-Advanced-Load-Balancer/index.html) (22.1.5). Sämtliche Komponenten wurden in einem integrierten Setup bereitgestellt. Das heisst, dass sämtliche Schnittstellen automatisiert angesteuert werden, was eine echte Cloud-like Experience für Developer und Plattform-Administratoren bietet. Dabei dient NSX Data Center in erster Linie der Netzwerk- und Security-Automatisierung (bspw. [Antrea CNI Integration in NSX](https://docs.vmware.com/en/VMware-NSX/4.1/administration/GUID-9197EF8A-7998-4D1B-B968-067007C56B5C.html)) und NSX Advanced Load Balancer der automatisierten Bereitstellung von L4 Load Balancer Services (kann um L7 Ingress Integration erweitert werden). Diesen Grad der Automatisierung erreicht man sprichwörtlich mit der Initialen «Out-of-the-Box» Bereitstellung der vSphere with Tanzu Container Plattform. - heading:

Das Problem

body: | Als ich [alle drei NSX ALB Controller](https://avinetworks.com/docs/latest/architectural-overview/#controller) ausgeschaltet (power-off) habe, um ein Desaster-Szenario zu simulieren, hat sich alles so verhalten, wie erwartet. Die Überraschung kam erst nach der erfolgreichen Wiederherstellung des NSX ALB Control Planes zum Vorschein. Als ich ein Deployment mit einem Service vom Typen LoadBalancer bereitstellen wollte, stellte ich fest, dass ich keine externe IP-Adresse vom NSX ALB Controller erhalte: ```bash kubectl get svc -n ft-nsx-alb NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ft-nsx-alb service/kubernetes LoadBalancer 10.96.0.10 <pending> 443/TCP 1d ft-nsx-alb service/supervisor LoadBalancer 10.96.0.134 <pending> 80/TCP 1d ``` Im NSX ALB Control Plane konnte ich keine Indizien zu diesem Verhalten finden, da einfach nichts protokolliert wurde und dieser Umstand liefert mir wiederum einen Verdacht, woraufhin ich den zuständigen Service auf dem Supervisor Cluster überprüfte. Der [Avi Kubernetes Operator](https://github.com/vmware/load-balancer-and-ingress-services-for-kubernetes) (AKO) Service ist dabei für die Kommunikation des Supervisor Cluster mit dem NSX ALB Controller Cluster zuständig und genau dieser Service befand sich nicht im ordnungsgemässen **Running** Zustand: ```bash kubectl get pods -A | grep -v Running NAMESPACE NAME READY STATUS RESTARTS AGE vmware-system-ako vmware-system-ako-ako-controller-manager-65d78d698d-c944k 1/2 CrashLoopBackOff 1465 (2m24s ago) 49d ``` Daraufhin habe ich sämtliche Ressourcen im **vmware-system-ako** Namespace überprüft: ```bash kubectl -n vmware-system-ako get all NAME READY STATUS RESTARTS AGE pod/vmware-system-ako-ako-controller-manager-65d78d698d-c944k 1/2 CrashLoopBackOff 1465 (4m17s ago) 49d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/vmware-system-ako-ako-controller-manager 0/1 1 0 49d NAME DESIRED CURRENT READY AGE replicaset.apps/vmware-system-ako-ako-controller-manager-65d78d698d 1 1 0 49d ``` Ein `kubectl describe` auf den fehlerhaften Pod lieferte folgendes Indiz: ```bash kubectl -n vmware-system-ako describe pod vmware-system-ako-ako-controller-manager-65d78d698d-c944k [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning BackOff 3m14s (x33529 over 5d10h) kubelet Back-off restarting failed container manager in pod vmware-system-ako-ako-controller-manager-65d78d698d-c944k_vmware-system-ako(e629cb54-f4fe-409f-8ac4-f2b0ac58b506) ``` In den entsprechenden Logs konnte man dann das effektive Problem ausmachen: ```bash kubectl -n vmware-system-ako logs vmware-system-ako-ako-controller-manager-65d78d698d-c944k infra | more 2024-02-02T09:16:01.591Z INFO infra-main/main.go:49 AKO-Infra is running with version: ob-21883866-460f000-7e6ff10 2024-02-02T09:16:01.591Z INFO infra-main/main.go:55 We are running inside kubernetes cluster. Won't use kubeconfig files. 2024-02-02T09:16:01.594Z INFO infra-main/main.go:76 Successfully created kube client for ako-infra 2024-02-02T09:16:01.594Z INFO utils/utils.go:173 Initializing configmap informer in vmware-system-ako 2024-02-02T09:16:01.675Z INFO lib/dynamic_client.go:134 Skipped initializing dynamic informers for cniPlugin 2024-02-02T09:16:01.682Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap {"advancedL4":"true","cloudName":"/infra/sites/default/enforcement-points/default/transport-zones/overlay-tz","clusterID":"domain-c[...]","controllerIP":"[...]","credentialsSecretName":"avi-secret","credentialsSecretNamespace":"vmware-system-ako","logLevel":"WARN","serverURL":"https://[...]"} 2024-02-02T09:16:01.682Z INFO ingestion/vcf_k8s_controller.go:427 TransportZone to use for AKO is set to /infra/sites/default/enforcement-points/default/transport-zones/overlay-tz E0202 09:16:20.192221 1 avisession.go:668] Client error for URI: login. Error: Post "https://[...]/login": dial tcp [...]:443: connect: no route to host E0202 09:16:20.193030 1 avisession.go:714] CheckControllerStatus is disabled for this session, not going to retry. E0202 09:16:20.193046 1 avisession.go:716] Failed to invoke API. Error: Post "https://[...]/login": dial tcp [...]:443: connect: no route to host E0202 09:16:20.193123 1 avisession.go:383] response error: Rest request error, returning to caller: Post " https://[...]/login": dial tcp [...]:443: connect: no route to host 2024-02-02T09:16:20.193Z ERROR ingestion/vcf_k8s_controller.go:381 Failed to connect to AVI controller using secret provided by NCP, the secret would be deleted, err: Rest request error, returning to caller: Post "https://[...]/login": dial tcp [...]:443: connect: no route to host 2024-02-02T09:16:20.201Z INFO ingestion/vcf_k8s_controller.go:210 ConfigMap Add 2024-02-02T09:16:20.204Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap {"advancedL4":"true","cloudName":"/infra/sites/default/enforcement-points/default/transport-zones/overlay-tz","clusterID":"domain-c[...]","controllerIP":"[...]","credentialsSecretName":"avi-secret","credentialsSecretNamespace":"vmware-system-ako","logLevel":"WARN","serverURL":"https://[...]"} 2024-02-02T09:16:20.206Z WARN ingestion/vcf_k8s_controller.go:361 Failed to get Secret, got err: secrets "avi-secret" not found 2024-02-02T09:16:20.206Z INFO ingestion/vcf_k8s_controller.go:210 ConfigMap Add 2024-02-02T09:16:20.208Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap [...] ``` Die Zeile ***\[…\]Failed to connect to AVI controller using secret provided by NCP, the secret would be deleted\[…\]*** lieferte dabei den ausschlaggebenden Punkt. - heading:

Die Lösung

body: | Somit schien für die Generierung des fehlenden Secrets der NSX Container Plugin (NCP)-Service zuständig zu sein, woraufhin ich diesen neustartete, um den Secret-Regenerierungsprozess anzustossen: ```bash kubectl -n vmware-system-nsx get pods NAME                       READY   STATUS    RESTARTS   AGE nsx-ncp-5f4f7d6597-7rstp   2/2     Running   0          49d nsx-ncp-5f4f7d6597-ppl7w   2/2     Running   0          49d kubectl -n vmware-system-nsx delete pod nsx-ncp-5f4f7d6597-7rstp kubectl -n vmware-system-nsx delete pod nsx-ncp-5f4f7d6597-ppl7w ``` Nachdem die NCP Pods neu generiert wurden, erschien ein **avi-init-secret**, welches wiederum einen Reboot des AKO Services auslöste. Kurz danach erschien dann auch das erhoffte **avi-secret** Objekt: ```bash kubectl -n vmware-system-ako get secrets NAME TYPE DATA AGE avi-init-secret Opaque 3 26h avi-secret Opaque 3 26h ``` Eine kurze Verifizierung meines Deployments zeigte, dass nun wieder LoadBalancer VIP IP-Adressen vom NSX ALB Controller zugewiesen wurden: ```bash kubectl get svc -n ft-nsx-alb NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ft-nsx-alb service/kubernetes LoadBalancer 10.96.0.10 172.16.22.31 443/TCP 1d ft-nsx-alb service/supervisor LoadBalancer 10.96.0.134 172.16.22.32 80/TCP 1d ``` TL;DR Nach einem Totalausfall des NSX ALB Controller Cluster kann ggf. ein Neustart der NCP Pods wahre Wunder bewirken.status: corpus: 267 alsoLike: - {ref: posts/antrea-nsx-integration, score: 1.00} - {ref: posts/lessons-learned-vsphere-with-tanzu-und-nsx-advanced-load-balancer-integration-mit-private-ca, score: 1.00} - {ref: solutions/vmware/vmware-cloud-foundation/addon/advanced-security, score: 0.75}
{ "apiVersion": "soultec.ch/v1", "kind": "Post", "metadata": { "name": "vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found", "locale": "de", "labels": { "author": "matthias-grasmueck", "series": "lessons-learned", "capability/network": "2.16", "capability/security": "2.16", "capability/containers": "2.39", "vendor/vmware": "0.88" }, "annotations": { "source": "blog-content/posts/de/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found.md", "route": "/de/insights/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found/", "schema": "/nerd/schema/posts.json", "markdown": "/de/insights/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found.md" } }, "spec": { "title": "vSphere with Tanzu und NSX Advanced Load Balancer – avi-secret not found", "date": "2024-02-09", "author": "matthias-grasmueck", "locale": "de", "summary": "Ich bin kürzlich über ein interessantes Verhalten bei einem Funktionstest einer VMware vSphere with Tanzu Container Runtime Plattform in Kombination mit dem VMware NSX Advanced Load Balancer", "capabilities": [ "network", "security", "containers" ], "vendors": [ "vmware" ], "series": "lessons-learned", "hero": "/blog-assets/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found/hero.webp", "legacySlug": "vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found", "migrated": "2026-08-24", "draft": false }, "sections": [ { "body": "Ich bin kürzlich über ein interessantes Verhalten bei einem Funktionstest einer VMware vSphere with Tanzu Container Runtime Plattform in Kombination mit dem VMware NSX Advanced Load Balancer gestolpert. Ich persönlich finde Funktionstests immer spannend, da man aus erster Hand erfahren kann, wie die eigenen Systeme unter erschwerten Bedingungen funktioniere bzw. ab wann sie den Dienst quittieren.\n\nDie Plattform basierte dabei auf [vSphere with Tanzu](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-with-tanzu-concepts-planning/GUID-28B0AEA2-2947-4FDD-AA71-51E46E24BF53.html) (vSphere 8.0 Update 2), [NSX Data Center](https://docs.vmware.com/en/VMware-NSX/index.html) (4.1.2.1) und [NSX (Avi) Advanced Load Balancer](https://docs.vmware.com/en/VMware-NSX-Advanced-Load-Balancer/index.html) (22.1.5). Sämtliche Komponenten wurden in einem integrierten Setup bereitgestellt. Das heisst, dass sämtliche Schnittstellen automatisiert angesteuert werden, was eine echte Cloud-like Experience für Developer und Plattform-Administratoren bietet.\n\nDabei dient NSX Data Center in erster Linie der Netzwerk- und Security-Automatisierung (bspw. [Antrea CNI Integration in NSX](https://docs.vmware.com/en/VMware-NSX/4.1/administration/GUID-9197EF8A-7998-4D1B-B968-067007C56B5C.html)) und NSX Advanced Load Balancer der automatisierten Bereitstellung von L4 Load Balancer Services (kann um L7 Ingress Integration erweitert werden). Diesen Grad der Automatisierung erreicht man sprichwörtlich mit der Initialen «Out-of-the-Box» Bereitstellung der vSphere with Tanzu Container Plattform." }, { "heading": "

Das Problem

",
"body": "Als ich [alle drei NSX ALB Controller](https://avinetworks.com/docs/latest/architectural-overview/#controller) ausgeschaltet (power-off) habe, um ein Desaster-Szenario zu simulieren, hat sich alles so verhalten, wie erwartet. Die Überraschung kam erst nach der erfolgreichen Wiederherstellung des NSX ALB Control Planes zum Vorschein.\n\nAls ich ein Deployment mit einem Service vom Typen LoadBalancer bereitstellen wollte, stellte ich fest, dass ich keine externe IP-Adresse vom NSX ALB Controller erhalte:\n\n```bash\nkubectl get svc -n ft-nsx-alb\n\nNAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nft-nsx-alb service/kubernetes LoadBalancer 10.96.0.10 <pending> 443/TCP 1d\nft-nsx-alb service/supervisor LoadBalancer 10.96.0.134 <pending> 80/TCP 1d\n```\n\nIm NSX ALB Control Plane konnte ich keine Indizien zu diesem Verhalten finden, da einfach nichts protokolliert wurde und dieser Umstand liefert mir wiederum einen Verdacht, woraufhin ich den zuständigen Service auf dem Supervisor Cluster überprüfte.\n\nDer [Avi Kubernetes Operator](https://github.com/vmware/load-balancer-and-ingress-services-for-kubernetes) (AKO) Service ist dabei für die Kommunikation des Supervisor Cluster mit dem NSX ALB Controller Cluster zuständig und genau dieser Service befand sich nicht im ordnungsgemässen **Running** Zustand:\n\n```bash\nkubectl get pods -A | grep -v Running\n\nNAMESPACE NAME READY STATUS RESTARTS AGE\nvmware-system-ako vmware-system-ako-ako-controller-manager-65d78d698d-c944k 1/2 CrashLoopBackOff 1465 (2m24s ago) 49d\n```\n\nDaraufhin habe ich sämtliche Ressourcen im **vmware-system-ako** Namespace überprüft:\n\n```bash\nkubectl -n vmware-system-ako get all\n\nNAME READY STATUS RESTARTS AGE\npod/vmware-system-ako-ako-controller-manager-65d78d698d-c944k 1/2 CrashLoopBackOff 1465 (4m17s ago) 49d\n\nNAME READY UP-TO-DATE AVAILABLE AGE\ndeployment.apps/vmware-system-ako-ako-controller-manager 0/1 1 0 49d\n\nNAME DESIRED CURRENT READY AGE\nreplicaset.apps/vmware-system-ako-ako-controller-manager-65d78d698d 1 1 0 49d\n```\n\nEin `kubectl describe` auf den fehlerhaften Pod lieferte folgendes Indiz:\n\n```bash\nkubectl -n vmware-system-ako describe pod vmware-system-ako-ako-controller-manager-65d78d698d-c944k\n[...]\nEvents:\nType Reason Age From Message\n---- ------ ---- ---- -------\nWarning BackOff 3m14s (x33529 over 5d10h) kubelet Back-off restarting failed container manager in pod vmware-system-ako-ako-controller-manager-65d78d698d-c944k_vmware-system-ako(e629cb54-f4fe-409f-8ac4-f2b0ac58b506)\n```\n\nIn den entsprechenden Logs konnte man dann das effektive Problem ausmachen:\n\n```bash\nkubectl -n vmware-system-ako logs vmware-system-ako-ako-controller-manager-65d78d698d-c944k infra | more\n\n2024-02-02T09:16:01.591Z INFO infra-main/main.go:49 AKO-Infra is running with version: ob-21883866-460f000-7e6ff10\n2024-02-02T09:16:01.591Z INFO infra-main/main.go:55 We are running inside kubernetes cluster. Won't use kubeconfig files.\n2024-02-02T09:16:01.594Z INFO infra-main/main.go:76 Successfully created kube client for ako-infra\n2024-02-02T09:16:01.594Z INFO utils/utils.go:173 Initializing configmap informer in vmware-system-ako\n2024-02-02T09:16:01.675Z INFO lib/dynamic_client.go:134 Skipped initializing dynamic informers for cniPlugin\n2024-02-02T09:16:01.682Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap {\"advancedL4\":\"true\",\"cloudName\":\"/infra/sites/default/enforcement-points/default/transport-zones/overlay-tz\",\"clusterID\":\"domain-c[...]\",\"controllerIP\":\"[...]\",\"credentialsSecretName\":\"avi-secret\",\"credentialsSecretNamespace\":\"vmware-system-ako\",\"logLevel\":\"WARN\",\"serverURL\":\"https://[...]\"}\n2024-02-02T09:16:01.682Z INFO ingestion/vcf_k8s_controller.go:427 TransportZone to use for AKO is set to /infra/sites/default/enforcement-points/default/transport-zones/overlay-tz\nE0202 09:16:20.192221 1 avisession.go:668] Client error for URI: login. Error: Post \"https://[...]/login\": dial tcp [...]:443: connect: no route to host\nE0202 09:16:20.193030 1 avisession.go:714] CheckControllerStatus is disabled for this session, not going to retry.\nE0202 09:16:20.193046 1 avisession.go:716] Failed to invoke API. Error: Post \"https://[...]/login\": dial tcp [...]:443: connect: no route to host\nE0202 09:16:20.193123 1 avisession.go:383] response error: Rest request error, returning to caller: Post \" https://[...]/login\": dial tcp [...]:443: connect: no route to host\n2024-02-02T09:16:20.193Z ERROR ingestion/vcf_k8s_controller.go:381 Failed to connect to AVI controller using secret provided by NCP, the secret would be deleted, err: Rest request error, returning to caller: Post \"https://[...]/login\": dial tcp [...]:443: connect: no route to host\n2024-02-02T09:16:20.201Z INFO ingestion/vcf_k8s_controller.go:210 ConfigMap Add\n2024-02-02T09:16:20.204Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap {\"advancedL4\":\"true\",\"cloudName\":\"/infra/sites/default/enforcement-points/default/transport-zones/overlay-tz\",\"clusterID\":\"domain-c[...]\",\"controllerIP\":\"[...]\",\"credentialsSecretName\":\"avi-secret\",\"credentialsSecretNamespace\":\"vmware-system-ako\",\"logLevel\":\"WARN\",\"serverURL\":\"https://[...]\"}\n2024-02-02T09:16:20.206Z WARN ingestion/vcf_k8s_controller.go:361 Failed to get Secret, got err: secrets \"avi-secret\" not found\n2024-02-02T09:16:20.206Z INFO ingestion/vcf_k8s_controller.go:210 ConfigMap Add\n2024-02-02T09:16:20.208Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap\n[...]\n```\n\nDie Zeile ***\\[…\\]Failed to connect to AVI controller using secret provided by NCP, the secret would be deleted\\[…\\]*** lieferte dabei den ausschlaggebenden Punkt." }, { "heading": "

Die Lösung

",
"body": "Somit schien für die Generierung des fehlenden Secrets der NSX Container Plugin (NCP)-Service zuständig zu sein, woraufhin ich diesen neustartete, um den Secret-Regenerierungsprozess anzustossen:\n\n```bash\nkubectl -n vmware-system-nsx get pods\n\nNAME                       READY   STATUS    RESTARTS   AGE\nnsx-ncp-5f4f7d6597-7rstp   2/2     Running   0          49d\nnsx-ncp-5f4f7d6597-ppl7w   2/2     Running   0          49d\n\nkubectl -n vmware-system-nsx delete pod nsx-ncp-5f4f7d6597-7rstp\nkubectl -n vmware-system-nsx delete pod nsx-ncp-5f4f7d6597-ppl7w\n```\n\nNachdem die NCP Pods neu generiert wurden, erschien ein **avi-init-secret**, welches wiederum einen Reboot des AKO Services auslöste. Kurz danach erschien dann auch das erhoffte **avi-secret** Objekt:\n\n```bash\nkubectl -n vmware-system-ako get secrets\n\nNAME TYPE DATA AGE\navi-init-secret Opaque 3 26h\navi-secret Opaque 3 26h\n```\n\nEine kurze Verifizierung meines Deployments zeigte, dass nun wieder LoadBalancer VIP IP-Adressen vom NSX ALB Controller zugewiesen wurden:\n\n```bash\nkubectl get svc -n ft-nsx-alb\n\nNAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nft-nsx-alb service/kubernetes LoadBalancer 10.96.0.10 172.16.22.31 443/TCP 1d\nft-nsx-alb service/supervisor LoadBalancer 10.96.0.134 172.16.22.32 80/TCP 1d\n```\n\nTL;DR\n\nNach einem Totalausfall des NSX ALB Controller Cluster kann ggf. ein Neustart der NCP Pods wahre Wunder bewirken." } ], "status": { "corpus": 267, "alsoLike": [ { "ref": "posts/antrea-nsx-integration", "score": "1.00" }, { "ref": "posts/lessons-learned-vsphere-with-tanzu-und-nsx-advanced-load-balancer-integration-mit-private-ca", "score": "1.00" }, { "ref": "solutions/vmware/vmware-cloud-foundation/addon/advanced-security", "score": "0.75" } ] }}
apiVersion = "soultec.ch/v1"kind = "Post"[metadata]name = "vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found"locale = "de"[metadata.labels]author = "matthias-grasmueck"series = "lessons-learned""capability/network" = "2.16""capability/security" = "2.16""capability/containers" = "2.39""vendor/vmware" = "0.88"[metadata.annotations]source = "blog-content/posts/de/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found.md"route = "/de/insights/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found/"schema = "/nerd/schema/posts.json"markdown = "/de/insights/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found.md"[spec]title = "vSphere with Tanzu und NSX Advanced Load Balancer – avi-secret not found"date = 2024-02-09author = "matthias-grasmueck"locale = "de"summary = "Ich bin kürzlich über ein interessantes Verhalten bei einem Funktionstest einer VMware vSphere with Tanzu Container Runtime Plattform in Kombination mit dem VMware NSX Advanced Load Balancer"capabilities = ["network", "security", "containers"]vendors = ["vmware"]series = "lessons-learned"hero = "/blog-assets/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found/hero.webp"legacySlug = "vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found"migrated = 2026-08-24draft = false[[sections]]body = '''Ich bin kürzlich über ein interessantes Verhalten bei einem Funktionstest einer VMware vSphere with Tanzu Container Runtime Plattform in Kombination mit dem VMware NSX Advanced Load Balancer gestolpert. Ich persönlich finde Funktionstests immer spannend, da man aus erster Hand erfahren kann, wie die eigenen Systeme unter erschwerten Bedingungen funktioniere bzw. ab wann sie den Dienst quittieren.Die Plattform basierte dabei auf [vSphere with Tanzu](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-with-tanzu-concepts-planning/GUID-28B0AEA2-2947-4FDD-AA71-51E46E24BF53.html) (vSphere 8.0 Update 2), [NSX Data Center](https://docs.vmware.com/en/VMware-NSX/index.html) (4.1.2.1) und [NSX (Avi) Advanced Load Balancer](https://docs.vmware.com/en/VMware-NSX-Advanced-Load-Balancer/index.html) (22.1.5). Sämtliche Komponenten wurden in einem integrierten Setup bereitgestellt. Das heisst, dass sämtliche Schnittstellen automatisiert angesteuert werden, was eine echte Cloud-like Experience für Developer und Plattform-Administratoren bietet.Dabei dient NSX Data Center in erster Linie der Netzwerk- und Security-Automatisierung (bspw. [Antrea CNI Integration in NSX](https://docs.vmware.com/en/VMware-NSX/4.1/administration/GUID-9197EF8A-7998-4D1B-B968-067007C56B5C.html)) und NSX Advanced Load Balancer der automatisierten Bereitstellung von L4 Load Balancer Services (kann um L7 Ingress Integration erweitert werden). Diesen Grad der Automatisierung erreicht man sprichwörtlich mit der Initialen «Out-of-the-Box» Bereitstellung der vSphere with Tanzu Container Plattform.'''[[sections]]heading = "

Das Problem

"
body = '''Als ich [alle drei NSX ALB Controller](https://avinetworks.com/docs/latest/architectural-overview/#controller) ausgeschaltet (power-off) habe, um ein Desaster-Szenario zu simulieren, hat sich alles so verhalten, wie erwartet. Die Überraschung kam erst nach der erfolgreichen Wiederherstellung des NSX ALB Control Planes zum Vorschein.Als ich ein Deployment mit einem Service vom Typen LoadBalancer bereitstellen wollte, stellte ich fest, dass ich keine externe IP-Adresse vom NSX ALB Controller erhalte:```bashkubectl get svc -n ft-nsx-albNAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEft-nsx-alb service/kubernetes LoadBalancer 10.96.0.10 <pending> 443/TCP 1dft-nsx-alb service/supervisor LoadBalancer 10.96.0.134 <pending> 80/TCP 1d```Im NSX ALB Control Plane konnte ich keine Indizien zu diesem Verhalten finden, da einfach nichts protokolliert wurde und dieser Umstand liefert mir wiederum einen Verdacht, woraufhin ich den zuständigen Service auf dem Supervisor Cluster überprüfte.Der [Avi Kubernetes Operator](https://github.com/vmware/load-balancer-and-ingress-services-for-kubernetes) (AKO) Service ist dabei für die Kommunikation des Supervisor Cluster mit dem NSX ALB Controller Cluster zuständig und genau dieser Service befand sich nicht im ordnungsgemässen **Running** Zustand:```bashkubectl get pods -A | grep -v RunningNAMESPACE NAME READY STATUS RESTARTS AGEvmware-system-ako vmware-system-ako-ako-controller-manager-65d78d698d-c944k 1/2 CrashLoopBackOff 1465 (2m24s ago) 49d```Daraufhin habe ich sämtliche Ressourcen im **vmware-system-ako** Namespace überprüft:```bashkubectl -n vmware-system-ako get allNAME READY STATUS RESTARTS AGEpod/vmware-system-ako-ako-controller-manager-65d78d698d-c944k 1/2 CrashLoopBackOff 1465 (4m17s ago) 49dNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/vmware-system-ako-ako-controller-manager 0/1 1 0 49dNAME DESIRED CURRENT READY AGEreplicaset.apps/vmware-system-ako-ako-controller-manager-65d78d698d 1 1 0 49d```Ein `kubectl describe` auf den fehlerhaften Pod lieferte folgendes Indiz:```bashkubectl -n vmware-system-ako describe pod vmware-system-ako-ako-controller-manager-65d78d698d-c944k[...]Events:Type Reason Age From Message---- ------ ---- ---- -------Warning BackOff 3m14s (x33529 over 5d10h) kubelet Back-off restarting failed container manager in pod vmware-system-ako-ako-controller-manager-65d78d698d-c944k_vmware-system-ako(e629cb54-f4fe-409f-8ac4-f2b0ac58b506)```In den entsprechenden Logs konnte man dann das effektive Problem ausmachen:```bashkubectl -n vmware-system-ako logs vmware-system-ako-ako-controller-manager-65d78d698d-c944k infra | more2024-02-02T09:16:01.591Z INFO infra-main/main.go:49 AKO-Infra is running with version: ob-21883866-460f000-7e6ff102024-02-02T09:16:01.591Z INFO infra-main/main.go:55 We are running inside kubernetes cluster. Won't use kubeconfig files.2024-02-02T09:16:01.594Z INFO infra-main/main.go:76 Successfully created kube client for ako-infra2024-02-02T09:16:01.594Z INFO utils/utils.go:173 Initializing configmap informer in vmware-system-ako2024-02-02T09:16:01.675Z INFO lib/dynamic_client.go:134 Skipped initializing dynamic informers for cniPlugin2024-02-02T09:16:01.682Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap {"advancedL4":"true","cloudName":"/infra/sites/default/enforcement-points/default/transport-zones/overlay-tz","clusterID":"domain-c[...]","controllerIP":"[...]","credentialsSecretName":"avi-secret","credentialsSecretNamespace":"vmware-system-ako","logLevel":"WARN","serverURL":"https://[...]"}2024-02-02T09:16:01.682Z INFO ingestion/vcf_k8s_controller.go:427 TransportZone to use for AKO is set to /infra/sites/default/enforcement-points/default/transport-zones/overlay-tzE0202 09:16:20.192221 1 avisession.go:668] Client error for URI: login. Error: Post "https://[...]/login": dial tcp [...]:443: connect: no route to hostE0202 09:16:20.193030 1 avisession.go:714] CheckControllerStatus is disabled for this session, not going to retry.E0202 09:16:20.193046 1 avisession.go:716] Failed to invoke API. Error: Post "https://[...]/login": dial tcp [...]:443: connect: no route to hostE0202 09:16:20.193123 1 avisession.go:383] response error: Rest request error, returning to caller: Post " https://[...]/login": dial tcp [...]:443: connect: no route to host2024-02-02T09:16:20.193Z ERROR ingestion/vcf_k8s_controller.go:381 Failed to connect to AVI controller using secret provided by NCP, the secret would be deleted, err: Rest request error, returning to caller: Post "https://[...]/login": dial tcp [...]:443: connect: no route to host2024-02-02T09:16:20.201Z INFO ingestion/vcf_k8s_controller.go:210 ConfigMap Add2024-02-02T09:16:20.204Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap {"advancedL4":"true","cloudName":"/infra/sites/default/enforcement-points/default/transport-zones/overlay-tz","clusterID":"domain-c[...]","controllerIP":"[...]","credentialsSecretName":"avi-secret","credentialsSecretNamespace":"vmware-system-ako","logLevel":"WARN","serverURL":"https://[...]"}2024-02-02T09:16:20.206Z WARN ingestion/vcf_k8s_controller.go:361 Failed to get Secret, got err: secrets "avi-secret" not found2024-02-02T09:16:20.206Z INFO ingestion/vcf_k8s_controller.go:210 ConfigMap Add2024-02-02T09:16:20.208Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap[...]```Die Zeile ***\[…\]Failed to connect to AVI controller using secret provided by NCP, the secret would be deleted\[…\]*** lieferte dabei den ausschlaggebenden Punkt.'''[[sections]]heading = "

Die Lösung

"
body = '''Somit schien für die Generierung des fehlenden Secrets der NSX Container Plugin (NCP)-Service zuständig zu sein, woraufhin ich diesen neustartete, um den Secret-Regenerierungsprozess anzustossen:```bashkubectl -n vmware-system-nsx get podsNAME                       READY   STATUS    RESTARTS   AGEnsx-ncp-5f4f7d6597-7rstp   2/2     Running   0          49dnsx-ncp-5f4f7d6597-ppl7w   2/2     Running   0          49dkubectl -n vmware-system-nsx delete pod nsx-ncp-5f4f7d6597-7rstpkubectl -n vmware-system-nsx delete pod nsx-ncp-5f4f7d6597-ppl7w```Nachdem die NCP Pods neu generiert wurden, erschien ein **avi-init-secret**, welches wiederum einen Reboot des AKO Services auslöste. Kurz danach erschien dann auch das erhoffte **avi-secret** Objekt:```bashkubectl -n vmware-system-ako get secretsNAME TYPE DATA AGEavi-init-secret Opaque 3 26havi-secret Opaque 3 26h```Eine kurze Verifizierung meines Deployments zeigte, dass nun wieder LoadBalancer VIP IP-Adressen vom NSX ALB Controller zugewiesen wurden:```bashkubectl get svc -n ft-nsx-albNAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEft-nsx-alb service/kubernetes LoadBalancer 10.96.0.10 172.16.22.31 443/TCP 1dft-nsx-alb service/supervisor LoadBalancer 10.96.0.134 172.16.22.32 80/TCP 1d```TL;DRNach einem Totalausfall des NSX ALB Controller Cluster kann ggf. ein Neustart der NCP Pods wahre Wunder bewirken.'''[status]corpus = 267[[status.alsoLike]]ref = "posts/antrea-nsx-integration"score = "1.00"[[status.alsoLike]]ref = "posts/lessons-learned-vsphere-with-tanzu-und-nsx-advanced-load-balancer-integration-mit-private-ca"score = "1.00"[[status.alsoLike]]ref = "solutions/vmware/vmware-cloud-foundation/addon/advanced-security"score = "0.75"
<?xml version="1.0" encoding="UTF-8"?><manifest kind="Post"> <apiVersion>soultec.ch/v1</apiVersion> <metadata> <name>vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found</name> <locale>de</locale> <labels> <author>matthias-grasmueck</author> <series>lessons-learned</series> <entry key="capability/network">2.16</entry> <entry key="capability/security">2.16</entry> <entry key="capability/containers">2.39</entry> <entry key="vendor/vmware">0.88</entry> </labels> <annotations> <source>blog-content/posts/de/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found.md</source> <route>/de/insights/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found/</route> <schema>/nerd/schema/posts.json</schema> <markdown>/de/insights/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found.md</markdown> </annotations> </metadata> <spec> <title>vSphere with Tanzu und NSX Advanced Load Balancer – avi-secret not found</title> <date>2024-02-09</date> <author>matthias-grasmueck</author> <locale>de</locale> <summary>Ich bin kürzlich über ein interessantes Verhalten bei einem Funktionstest einer VMware vSphere with Tanzu Container Runtime Plattform in Kombination mit dem VMware NSX Advanced Load Balancer</summary> <capabilities> <item>network</item> <item>security</item> <item>containers</item> </capabilities> <vendors> <item>vmware</item> </vendors> <series>lessons-learned</series> <hero>/blog-assets/vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found/hero.webp</hero> <legacySlug>vsphere-with-tanzu-und-nsx-advanced-load-balancer-avi-secret-not-found</legacySlug> <migrated>2026-08-24</migrated> <draft>false</draft> </spec> <sections> <section> <body>Ich bin kürzlich über ein interessantes Verhalten bei einem Funktionstest einer VMware vSphere with Tanzu Container Runtime Plattform in Kombination mit dem VMware NSX Advanced Load Balancer gestolpert. Ich persönlich finde Funktionstests immer spannend, da man aus erster Hand erfahren kann, wie die eigenen Systeme unter erschwerten Bedingungen funktioniere bzw. ab wann sie den Dienst quittieren.Die Plattform basierte dabei auf [vSphere with Tanzu](https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-with-tanzu-concepts-planning/GUID-28B0AEA2-2947-4FDD-AA71-51E46E24BF53.html) (vSphere 8.0 Update 2), [NSX Data Center](https://docs.vmware.com/en/VMware-NSX/index.html) (4.1.2.1) und [NSX (Avi) Advanced Load Balancer](https://docs.vmware.com/en/VMware-NSX-Advanced-Load-Balancer/index.html) (22.1.5). Sämtliche Komponenten wurden in einem integrierten Setup bereitgestellt. Das heisst, dass sämtliche Schnittstellen automatisiert angesteuert werden, was eine echte Cloud-like Experience für Developer und Plattform-Administratoren bietet.Dabei dient NSX Data Center in erster Linie der Netzwerk- und Security-Automatisierung (bspw. [Antrea CNI Integration in NSX](https://docs.vmware.com/en/VMware-NSX/4.1/administration/GUID-9197EF8A-7998-4D1B-B968-067007C56B5C.html)) und NSX Advanced Load Balancer der automatisierten Bereitstellung von L4 Load Balancer Services (kann um L7 Ingress Integration erweitert werden). Diesen Grad der Automatisierung erreicht man sprichwörtlich mit der Initialen «Out-of-the-Box» Bereitstellung der vSphere with Tanzu Container Plattform. </body> </section> <section> <heading>

Das Problem

</heading>
<body>Als ich [alle drei NSX ALB Controller](https://avinetworks.com/docs/latest/architectural-overview/#controller) ausgeschaltet (power-off) habe, um ein Desaster-Szenario zu simulieren, hat sich alles so verhalten, wie erwartet. Die Überraschung kam erst nach der erfolgreichen Wiederherstellung des NSX ALB Control Planes zum Vorschein.Als ich ein Deployment mit einem Service vom Typen LoadBalancer bereitstellen wollte, stellte ich fest, dass ich keine externe IP-Adresse vom NSX ALB Controller erhalte:```bashkubectl get svc -n ft-nsx-albNAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEft-nsx-alb service/kubernetes LoadBalancer 10.96.0.10 &lt;pending&gt; 443/TCP 1dft-nsx-alb service/supervisor LoadBalancer 10.96.0.134 &lt;pending&gt; 80/TCP 1d```Im NSX ALB Control Plane konnte ich keine Indizien zu diesem Verhalten finden, da einfach nichts protokolliert wurde und dieser Umstand liefert mir wiederum einen Verdacht, woraufhin ich den zuständigen Service auf dem Supervisor Cluster überprüfte.Der [Avi Kubernetes Operator](https://github.com/vmware/load-balancer-and-ingress-services-for-kubernetes) (AKO) Service ist dabei für die Kommunikation des Supervisor Cluster mit dem NSX ALB Controller Cluster zuständig und genau dieser Service befand sich nicht im ordnungsgemässen **Running** Zustand:```bashkubectl get pods -A | grep -v RunningNAMESPACE NAME READY STATUS RESTARTS AGEvmware-system-ako vmware-system-ako-ako-controller-manager-65d78d698d-c944k 1/2 CrashLoopBackOff 1465 (2m24s ago) 49d```Daraufhin habe ich sämtliche Ressourcen im **vmware-system-ako** Namespace überprüft:```bashkubectl -n vmware-system-ako get allNAME READY STATUS RESTARTS AGEpod/vmware-system-ako-ako-controller-manager-65d78d698d-c944k 1/2 CrashLoopBackOff 1465 (4m17s ago) 49dNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/vmware-system-ako-ako-controller-manager 0/1 1 0 49dNAME DESIRED CURRENT READY AGEreplicaset.apps/vmware-system-ako-ako-controller-manager-65d78d698d 1 1 0 49d```Ein `kubectl describe` auf den fehlerhaften Pod lieferte folgendes Indiz:```bashkubectl -n vmware-system-ako describe pod vmware-system-ako-ako-controller-manager-65d78d698d-c944k[...]Events:Type Reason Age From Message---- ------ ---- ---- -------Warning BackOff 3m14s (x33529 over 5d10h) kubelet Back-off restarting failed container manager in pod vmware-system-ako-ako-controller-manager-65d78d698d-c944k_vmware-system-ako(e629cb54-f4fe-409f-8ac4-f2b0ac58b506)```In den entsprechenden Logs konnte man dann das effektive Problem ausmachen:```bashkubectl -n vmware-system-ako logs vmware-system-ako-ako-controller-manager-65d78d698d-c944k infra | more2024-02-02T09:16:01.591Z INFO infra-main/main.go:49 AKO-Infra is running with version: ob-21883866-460f000-7e6ff102024-02-02T09:16:01.591Z INFO infra-main/main.go:55 We are running inside kubernetes cluster. Won't use kubeconfig files.2024-02-02T09:16:01.594Z INFO infra-main/main.go:76 Successfully created kube client for ako-infra2024-02-02T09:16:01.594Z INFO utils/utils.go:173 Initializing configmap informer in vmware-system-ako2024-02-02T09:16:01.675Z INFO lib/dynamic_client.go:134 Skipped initializing dynamic informers for cniPlugin2024-02-02T09:16:01.682Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap {"advancedL4":"true","cloudName":"/infra/sites/default/enforcement-points/default/transport-zones/overlay-tz","clusterID":"domain-c[...]","controllerIP":"[...]","credentialsSecretName":"avi-secret","credentialsSecretNamespace":"vmware-system-ako","logLevel":"WARN","serverURL":"https://[...]"}2024-02-02T09:16:01.682Z INFO ingestion/vcf_k8s_controller.go:427 TransportZone to use for AKO is set to /infra/sites/default/enforcement-points/default/transport-zones/overlay-tzE0202 09:16:20.192221 1 avisession.go:668] Client error for URI: login. Error: Post "https://[...]/login": dial tcp [...]:443: connect: no route to hostE0202 09:16:20.193030 1 avisession.go:714] CheckControllerStatus is disabled for this session, not going to retry.E0202 09:16:20.193046 1 avisession.go:716] Failed to invoke API. Error: Post "https://[...]/login": dial tcp [...]:443: connect: no route to hostE0202 09:16:20.193123 1 avisession.go:383] response error: Rest request error, returning to caller: Post " https://[...]/login": dial tcp [...]:443: connect: no route to host2024-02-02T09:16:20.193Z ERROR ingestion/vcf_k8s_controller.go:381 Failed to connect to AVI controller using secret provided by NCP, the secret would be deleted, err: Rest request error, returning to caller: Post "https://[...]/login": dial tcp [...]:443: connect: no route to host2024-02-02T09:16:20.201Z INFO ingestion/vcf_k8s_controller.go:210 ConfigMap Add2024-02-02T09:16:20.204Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap {"advancedL4":"true","cloudName":"/infra/sites/default/enforcement-points/default/transport-zones/overlay-tz","clusterID":"domain-c[...]","controllerIP":"[...]","credentialsSecretName":"avi-secret","credentialsSecretNamespace":"vmware-system-ako","logLevel":"WARN","serverURL":"https://[...]"}2024-02-02T09:16:20.206Z WARN ingestion/vcf_k8s_controller.go:361 Failed to get Secret, got err: secrets "avi-secret" not found2024-02-02T09:16:20.206Z INFO ingestion/vcf_k8s_controller.go:210 ConfigMap Add2024-02-02T09:16:20.208Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap[...]```Die Zeile ***\[…\]Failed to connect to AVI controller using secret provided by NCP, the secret would be deleted\[…\]*** lieferte dabei den ausschlaggebenden Punkt. </body> </section> <section> <heading>

Die Lösung

</heading>
<body>Somit schien für die Generierung des fehlenden Secrets der NSX Container Plugin (NCP)-Service zuständig zu sein, woraufhin ich diesen neustartete, um den Secret-Regenerierungsprozess anzustossen:```bashkubectl -n vmware-system-nsx get podsNAME                       READY   STATUS    RESTARTS   AGEnsx-ncp-5f4f7d6597-7rstp   2/2     Running   0          49dnsx-ncp-5f4f7d6597-ppl7w   2/2     Running   0          49dkubectl -n vmware-system-nsx delete pod nsx-ncp-5f4f7d6597-7rstpkubectl -n vmware-system-nsx delete pod nsx-ncp-5f4f7d6597-ppl7w```Nachdem die NCP Pods neu generiert wurden, erschien ein **avi-init-secret**, welches wiederum einen Reboot des AKO Services auslöste. Kurz danach erschien dann auch das erhoffte **avi-secret** Objekt:```bashkubectl -n vmware-system-ako get secretsNAME TYPE DATA AGEavi-init-secret Opaque 3 26havi-secret Opaque 3 26h```Eine kurze Verifizierung meines Deployments zeigte, dass nun wieder LoadBalancer VIP IP-Adressen vom NSX ALB Controller zugewiesen wurden:```bashkubectl get svc -n ft-nsx-albNAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEft-nsx-alb service/kubernetes LoadBalancer 10.96.0.10 172.16.22.31 443/TCP 1dft-nsx-alb service/supervisor LoadBalancer 10.96.0.134 172.16.22.32 80/TCP 1d```TL;DRNach einem Totalausfall des NSX ALB Controller Cluster kann ggf. ein Neustart der NCP Pods wahre Wunder bewirken. </body> </section> </sections> <status> <corpus>267</corpus> <alsoLike> <item> <ref>posts/antrea-nsx-integration</ref> <score>1.00</score> </item> <item> <ref>posts/lessons-learned-vsphere-with-tanzu-und-nsx-advanced-load-balancer-integration-mit-private-ca</ref> <score>1.00</score> </item> <item> <ref>solutions/vmware/vmware-cloud-foundation/addon/advanced-security</ref> <score>0.75</score> </item> </alsoLike> </status></manifest>
Lessons Learned · 2024-02-09

vSphere with Tanzu und NSX Advanced Load Balancer – avi-secret not found

Ich bin kürzlich über ein interessantes Verhalten bei einem Funktionstest einer VMware vSphere with Tanzu Container Runtime Plattform in Kombination mit dem VMware NSX Advanced Load Balancer

2024-02-09Datum
Matthias GrasmückAutor
4Min. Lesezeit
Themen Netzwerk 2.16 Security 2.16 Container 2.39
Hersteller VMware 0.88

Ich bin kürzlich über ein interessantes Verhalten bei einem Funktionstest einer VMware vSphere with Tanzu Container Runtime Plattform in Kombination mit dem VMware NSX Advanced Load Balancer gestolpert. Ich persönlich finde Funktionstests immer spannend, da man aus erster Hand erfahren kann, wie die eigenen Systeme unter erschwerten Bedingungen funktioniere bzw. ab wann sie den Dienst quittieren.

Die Plattform basierte dabei auf vSphere with Tanzu (vSphere 8.0 Update 2), NSX Data Center (4.1.2.1) und NSX (Avi) Advanced Load Balancer (22.1.5). Sämtliche Komponenten wurden in einem integrierten Setup bereitgestellt. Das heisst, dass sämtliche Schnittstellen automatisiert angesteuert werden, was eine echte Cloud-like Experience für Developer und Plattform-Administratoren bietet.

Dabei dient NSX Data Center in erster Linie der Netzwerk- und Security-Automatisierung (bspw. Antrea CNI Integration in NSX) und NSX Advanced Load Balancer der automatisierten Bereitstellung von L4 Load Balancer Services (kann um L7 Ingress Integration erweitert werden). Diesen Grad der Automatisierung erreicht man sprichwörtlich mit der Initialen «Out-of-the-Box» Bereitstellung der vSphere with Tanzu Container Plattform.

Das Problem

Als ich alle drei NSX ALB Controller ausgeschaltet (power-off) habe, um ein Desaster-Szenario zu simulieren, hat sich alles so verhalten, wie erwartet. Die Überraschung kam erst nach der erfolgreichen Wiederherstellung des NSX ALB Control Planes zum Vorschein.

Als ich ein Deployment mit einem Service vom Typen LoadBalancer bereitstellen wollte, stellte ich fest, dass ich keine externe IP-Adresse vom NSX ALB Controller erhalte:

kubectl get svc -n ft-nsx-alb

NAMESPACE       NAME               TYPE         CLUSTER-IP  EXTERNAL-IP  PORT(S)  AGE
ft-nsx-alb      service/kubernetes LoadBalancer 10.96.0.10  <pending>    443/TCP  1d
ft-nsx-alb      service/supervisor LoadBalancer 10.96.0.134 <pending>    80/TCP   1d

Im NSX ALB Control Plane konnte ich keine Indizien zu diesem Verhalten finden, da einfach nichts protokolliert wurde und dieser Umstand liefert mir wiederum einen Verdacht, woraufhin ich den zuständigen Service auf dem Supervisor Cluster überprüfte.

Der Avi Kubernetes Operator (AKO) Service ist dabei für die Kommunikation des Supervisor Cluster mit dem NSX ALB Controller Cluster zuständig und genau dieser Service befand sich nicht im ordnungsgemässen Running Zustand:

kubectl get pods -A | grep -v Running

NAMESPACE          NAME                                                      READY  STATUS           RESTARTS         AGE
vmware-system-ako  vmware-system-ako-ako-controller-manager-65d78d698d-c944k 1/2    CrashLoopBackOff 1465 (2m24s ago) 49d

Daraufhin habe ich sämtliche Ressourcen im vmware-system-ako Namespace überprüft:

kubectl -n vmware-system-ako get all

NAME                                                          READY STATUS           RESTARTS         AGE
pod/vmware-system-ako-ako-controller-manager-65d78d698d-c944k 1/2   CrashLoopBackOff 1465 (4m17s ago) 49d

NAME                                                     READY UP-TO-DATE AVAILABLE AGE
deployment.apps/vmware-system-ako-ako-controller-manager 0/1   1          0         49d

NAME                                                                DESIRED CURRENT READY AGE
replicaset.apps/vmware-system-ako-ako-controller-manager-65d78d698d 1       1       0     49d

Ein kubectl describe auf den fehlerhaften Pod lieferte folgendes Indiz:

kubectl -n vmware-system-ako describe pod vmware-system-ako-ako-controller-manager-65d78d698d-c944k
[...]
Events:
Type    Reason  Age                       From    Message
----    ------  ----                      ----    -------
Warning BackOff 3m14s (x33529 over 5d10h) kubelet Back-off restarting failed container manager in pod vmware-system-ako-ako-controller-manager-65d78d698d-c944k_vmware-system-ako(e629cb54-f4fe-409f-8ac4-f2b0ac58b506)

In den entsprechenden Logs konnte man dann das effektive Problem ausmachen:

kubectl -n vmware-system-ako logs vmware-system-ako-ako-controller-manager-65d78d698d-c944k infra | more

2024-02-02T09:16:01.591Z INFO infra-main/main.go:49 AKO-Infra is running with version: ob-21883866-460f000-7e6ff10
2024-02-02T09:16:01.591Z INFO infra-main/main.go:55 We are running inside kubernetes cluster. Won't use kubeconfig files.
2024-02-02T09:16:01.594Z INFO infra-main/main.go:76 Successfully created kube client for ako-infra
2024-02-02T09:16:01.594Z INFO utils/utils.go:173 Initializing configmap informer in vmware-system-ako
2024-02-02T09:16:01.675Z INFO lib/dynamic_client.go:134 Skipped initializing dynamic informers for cniPlugin
2024-02-02T09:16:01.682Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap {"advancedL4":"true","cloudName":"/infra/sites/default/enforcement-points/default/transport-zones/overlay-tz","clusterID":"domain-c[...]","controllerIP":"[...]","credentialsSecretName":"avi-secret","credentialsSecretNamespace":"vmware-system-ako","logLevel":"WARN","serverURL":"https://[...]"}
2024-02-02T09:16:01.682Z INFO ingestion/vcf_k8s_controller.go:427 TransportZone to use for AKO is set to /infra/sites/default/enforcement-points/default/transport-zones/overlay-tz
E0202 09:16:20.192221 1 avisession.go:668] Client error for URI: login. Error: Post "https://[...]/login": dial tcp [...]:443: connect: no route to host
E0202 09:16:20.193030 1 avisession.go:714] CheckControllerStatus is disabled for this session, not going to retry.
E0202 09:16:20.193046 1 avisession.go:716] Failed to invoke API. Error: Post "https://[...]/login": dial tcp [...]:443: connect: no route to host
E0202 09:16:20.193123 1 avisession.go:383] response error: Rest request error, returning to caller: Post " https://[...]/login": dial tcp [...]:443: connect: no route to host
2024-02-02T09:16:20.193Z ERROR ingestion/vcf_k8s_controller.go:381 Failed to connect to AVI controller using secret provided by NCP, the secret would be deleted, err: Rest request error, returning to caller: Post "https://[...]/login": dial tcp [...]:443: connect: no route to host
2024-02-02T09:16:20.201Z INFO ingestion/vcf_k8s_controller.go:210 ConfigMap Add
2024-02-02T09:16:20.204Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap {"advancedL4":"true","cloudName":"/infra/sites/default/enforcement-points/default/transport-zones/overlay-tz","clusterID":"domain-c[...]","controllerIP":"[...]","credentialsSecretName":"avi-secret","credentialsSecretNamespace":"vmware-system-ako","logLevel":"WARN","serverURL":"https://[...]"}
2024-02-02T09:16:20.206Z WARN ingestion/vcf_k8s_controller.go:361 Failed to get Secret, got err: secrets "avi-secret" not found
2024-02-02T09:16:20.206Z INFO ingestion/vcf_k8s_controller.go:210 ConfigMap Add
2024-02-02T09:16:20.208Z INFO ingestion/vcf_k8s_controller.go:346 Got data from ConfigMap
[...]

Die Zeile […]Failed to connect to AVI controller using secret provided by NCP, the secret would be deleted[…] lieferte dabei den ausschlaggebenden Punkt.

Die Lösung

Somit schien für die Generierung des fehlenden Secrets der NSX Container Plugin (NCP)-Service zuständig zu sein, woraufhin ich diesen neustartete, um den Secret-Regenerierungsprozess anzustossen:

kubectl -n vmware-system-nsx get pods

NAME                       READY   STATUS    RESTARTS   AGE
nsx-ncp-5f4f7d6597-7rstp   2/2     Running   0          49d
nsx-ncp-5f4f7d6597-ppl7w   2/2     Running   0          49d

kubectl -n vmware-system-nsx delete pod nsx-ncp-5f4f7d6597-7rstp
kubectl -n vmware-system-nsx delete pod nsx-ncp-5f4f7d6597-ppl7w

Nachdem die NCP Pods neu generiert wurden, erschien ein avi-init-secret, welches wiederum einen Reboot des AKO Services auslöste. Kurz danach erschien dann auch das erhoffte avi-secret Objekt:

kubectl -n vmware-system-ako get secrets

NAME            TYPE   DATA AGE
avi-init-secret Opaque 3    26h
avi-secret      Opaque 3    26h

Eine kurze Verifizierung meines Deployments zeigte, dass nun wieder LoadBalancer VIP IP-Adressen vom NSX ALB Controller zugewiesen wurden:

kubectl get svc -n ft-nsx-alb

NAMESPACE  NAME               TYPE         CLUSTER-IP  EXTERNAL-IP  PORT(S) AGE
ft-nsx-alb service/kubernetes LoadBalancer 10.96.0.10  172.16.22.31 443/TCP 1d
ft-nsx-alb service/supervisor LoadBalancer 10.96.0.134 172.16.22.32 80/TCP  1d

TL;DR

Nach einem Totalausfall des NSX ALB Controller Cluster kann ggf. ein Neustart der NCP Pods wahre Wunder bewirken.

Passt ausserdem