簡體   English   中英

我的kubernetes AWS NLB集成無法正常工作

[英]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補丁中修復。

https://github.com/kubernetes/kubernetes/pull/68422

我不認為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM