如何将K8s default命名空间的LoadBalancer指向kube-system的ingress pod
结论
你的需求完全可以实现,不需要在selector字段添加额外配置,反而需要删除现有Service的selector字段:Kubernetes Service的selector仅支持匹配同命名空间下的Pod,无法跨命名空间筛选kube-system中的ingress Pod。
之前配置失效的核心原因
- 单个Kubernetes Service不能同时指定
ExternalName和LoadBalancer两种类型,二者逻辑互斥,配置中重复的type字段会被kube-apiserver按最后一个取值生效,完全不符合预期。 - 你尝试的
ExternalName类型Service仅用于返回CNAME记录做域名映射,无法绑定云厂商负载均衡的后端端点。
可行实现方案
你已经在kube-system下创建了对接ingress Pod的ClusterIP Service,可以直接用无selector的LoadBalancer Service关联该ClusterIP,步骤如下:
- 调整
default命名空间下的LoadBalancer Service配置,删除spec.selector字段,最终配置如下:
apiVersion: v1 kind: Service metadata: name: ecom-loadbalancer labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx spec: ports: - port: 443 targetPort: 443 type: LoadBalancer
- 手动创建同名Endpoints资源,指向
kube-system下ClusterIP Service的虚拟IP:
apiVersion: v1 kind: Endpoints metadata: name: ecom-loadbalancer # 必须和LoadBalancer Service的名称完全一致 subsets: - addresses: # 替换为kube-system下ecom-loadbalancer Service的实际ClusterIP,可通过kubectl get svc -n kube-system查询 - ip: 10.96.xx.xx ports: - port: 443
配置应用后等待1~2分钟,Scaleway的负载均衡会自动同步后端端点,即可正常转发流量到kube-system下的ingress Pod。
内容的提问来源于stack exchange,提问作者joe1531
相关产品推荐
相关产品推荐

