[英]My kubernetes AWS NLB integration is not working
我正在嘗試通過網絡負載平衡器在Kubernetes中部署服務。 我知道目前這是一個Alpha功能,但我正在運行一些測試。 我有一個可以正常工作的部署定義。 我沒有nlb批注的服務定義看起來像這樣,並且運行良好:
kind: Service
apiVersion: v1
metadata:
name: service1
annotations:
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
spec:
type: LoadBalancer
selector:
app: some-app
ports:
- port: 80
protocol: TCP
但是,當我切換到NLB時,即使負載平衡器已“正確”創建和配置,AWS目標組中的目標也始終顯示為不正常,並且我無法通過HTTP訪問該服務。 這是服務定義:
kind: Service
apiVersion: v1
metadata:
name: service1
annotations:
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
type: LoadBalancer
selector:
app: some-app
ports:
- port: 80
protocol: TCP
externalTrafficPolicy: Local
由於NLB轉發了客戶端IP,因此k8s節點安全組中似乎缺少一條規則。
NLB安全組實施中存在一個錯誤。 它已在1.11.7、1.1.25和可能的下一個1.13補丁中修復。
我不認為NLB是問題。
externalTrafficPolicy:本地
在AWS上不受kops支持,由於某些AWS限制,在AWS上運行的其他一些K8發行版也存在問題。
嘗試將其更改為
externalTrafficPolicy:群集
源IP是負載均衡器的問題,而不是真正的外部客戶端,這可以通過在服務上使用代理協議批注+向入口控制器添加一些配置來解決。
但是,還有第二個問題,盡管您可以從技術上破解它並強迫它工作,但通常不值得花時間。
externalTrafficPolicy:本地
創建NodePort / healthz端點,以便LB將流量發送到具有服務端點的節點的子集,而不是所有工作節點。 它在初始配置時已損壞,對帳循環也已中斷。
https://github.com/kubernetes/kubernetes/issues/80579
^更深入地描述了問題。
https://github.com/kubernetes/kubernetes/issues/61486
^描述了一種解決方法,可以使用kops掛鈎強制其運行
但老實說,您應該只使用externalTrafficPolicy:Cluster,因為它總是更穩定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.