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