From 2342d0cd57542f7a23d9031b26d44073ba442615 Mon Sep 17 00:00:00 2001 From: Chris Ricker Date: Wed, 3 Dec 2025 10:22:19 -0500 Subject: [PATCH] Calico: populate kubernetes-services-endpoint for localhost LB (#12598) When loadbalancer_apiserver_localhost is enabled, Calico falls back to the Kubernetes service IP because the kubernetes-services-endpoint ConfigMap is empty. CNI then fails to reach the API server even though an nginx proxy is listening on localhost. Update kube_apiserver_global_endpoint to always reference the localhost load balancer (respecting the configured port) and populate the ConfigMap for both eBPF and localhost LB modes. --- roles/kubespray_defaults/defaults/main/main.yml | 4 ++-- .../calico/templates/kubernetes-services-endpoint.yml.j2 | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/roles/kubespray_defaults/defaults/main/main.yml b/roles/kubespray_defaults/defaults/main/main.yml index 17289f0db..8fc30ef52 100644 --- a/roles/kubespray_defaults/defaults/main/main.yml +++ b/roles/kubespray_defaults/defaults/main/main.yml @@ -646,8 +646,8 @@ apiserver_loadbalancer_domain_name: "lb-apiserver.kubernetes.local" kube_apiserver_global_endpoint: |- {% if loadbalancer_apiserver is defined -%} https://{{ apiserver_loadbalancer_domain_name }}:{{ loadbalancer_apiserver.port | default(kube_apiserver_port) }} - {%- elif loadbalancer_apiserver_localhost and (loadbalancer_apiserver_port is not defined or loadbalancer_apiserver_port == kube_apiserver_port) -%} - https://localhost:{{ kube_apiserver_port }} + {%- elif loadbalancer_apiserver_localhost -%} + https://localhost:{{ loadbalancer_apiserver_port | default(kube_apiserver_port) }} {%- else -%} https://{{ first_kube_control_plane_address | ansible.utils.ipwrap }}:{{ kube_apiserver_port }} {%- endif %} diff --git a/roles/network_plugin/calico/templates/kubernetes-services-endpoint.yml.j2 b/roles/network_plugin/calico/templates/kubernetes-services-endpoint.yml.j2 index f1e81776e..36c548cc3 100644 --- a/roles/network_plugin/calico/templates/kubernetes-services-endpoint.yml.j2 +++ b/roles/network_plugin/calico/templates/kubernetes-services-endpoint.yml.j2 @@ -5,7 +5,7 @@ metadata: namespace: kube-system name: kubernetes-services-endpoint data: -{% if calico_bpf_enabled %} +{% if calico_bpf_enabled or loadbalancer_apiserver_localhost %} KUBERNETES_SERVICE_HOST: "{{ kube_apiserver_global_endpoint | urlsplit('hostname') }}" KUBERNETES_SERVICE_PORT: "{{ kube_apiserver_global_endpoint | urlsplit('port') }}" {% endif %}