Kubernetes集群中访问LoadBalancer类型Service的ELB地址不通?
对于LoadBalancer类型Service,Kube-Proxy会将Service的ELB地址绑定到节点的kube-ipvs0网卡上,或配置到iptables转发中,当在Kubernetes集群中访问该ELB地址时,请求不会转发到ELB实例,而是被ipvs/iptables转发到对应的后端Pod。如果Service设置了“externalTrafficPolicy:Local”,这时如果节点上没有对应的后端Pod,就会出现网络访问不通的问题。
可以参考以下解决方法处理:
访问集群内的Service服务时,使用服务的ClusterIP或服务名称进行访问
将Service的外部流量策略externalTrafficPolicy改为Cluster,这样请求就能被转发到所有节点的Pod
Kubernetes集群内无法访问该集群LoadBalancer类型Service对应ELB的其他端口?
问题描述
在Kubernetes集群中,如果Kube-Proxy采用ipvs转发,则LoadBalancer类型Service的ELB地址会被绑定到节点的kube-ipvs0网卡上,导致流量不会被转发到ELB实例,IPVS会根据请求地址和端口转发到Service对应的后端Pod。如果其他Kubernetes集群或其他外部服务复用了该集群LoadBalancer类型Service对应的ELB,在该集群内就会出现无法访问这些服务的情况。
处理建议
如果存在LoadBalancer类型Service对应ELB被其他Kubernetes集群或外部服务复用时,建议服务部署在Kube-Proxy使用iptables模式的集群,iptables匹配不到请求地址及端口,流量会被网络路由到ELB实例
如果Kube-Proxy都是使用ipvs模式,建议不同Kubernetes集群间暴露LoadBalancer类型Service使用不同的ELB实例
Service使用的ELB在什么情况下会被自动删除?
只有CCM(Cloud Controller Manager)自动创建的ELB,在以下几种情况,才会被自动删除:
删除Service时
Service类型由LoadBalancer改为其他类型(如NodePort)时
退订集群时,选择同步删除弹性负载均衡的资源
通过Service注解(service.beta.kubernetes.io/ctyun-loadbalancer-reserved: "false")指定强制删除ELB