我的kubernetes AWS NLB集成无效

时间:2018-03-27 23:21:07

标签: amazon-web-services kubernetes nlb

我正在尝试通过网络负载均衡器在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

3 个答案:

答案 0 :(得分:1)

似乎k8s节点安全组中缺少规则,因为NLB转发客户端IP。

答案 1 :(得分:0)

NLB安全组实施中存在一个错误。它已在1.11.7、1.1.25和可能的下一个1.13补丁中修复。

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

答案 2 :(得分:0)

我不认为NLB是问题所在。

  

externalTrafficPolicy:本地

AWS上的kops不支持

,并且由于某些AWS限制,在AWS上运行的其他一些K8发行版也存在问题。
尝试将其更改为

  

externalTrafficPolicy:群集

存在一个问题,源IP是负载平衡器的源IP,而不是真正的外部客户端,可以通过在服务上使用代理协议注释+向入口控制器添加一些配置来解决此问题。

但是,存在第二个问题,尽管您可以从技术上破解它并强迫它工作,但通常不值得花时间。

  

externalTrafficPolicy:本地


创建NodePort / healthz终结点,以便LB将流量发送到具有服务终结点的节点子集而不是所有工作节点。初始配置已中断,对帐循环也已中断。

https://github.com/kubernetes/kubernetes/issues/80579
^更深入地描述了这个问题。

https://github.com/kubernetes/kubernetes/issues/61486
^描述了一种解决方法,可以使用kops挂钩强制其工作

但是说实话,您应该坚持 externalTrafficPolicy:群集,因为它总是更稳定。