AWS上的Kubernetes:外部负载平衡器无法从与Pod相同的节点访问服务

时间:2018-09-12 07:57:07

标签: amazon-web-services kubernetes

我在AWS上通过kops进行了k8s集群设置。我的初始设置是一个节点,在该节点上部署了服务,并通过内部AWS负载均衡器公开了该服务:

apiVersion: v1
kind: Service
metadata:
  name: kube-state-metrics-2
  namespace: kube-system
  labels:
    k8s-app: kube-state-metrics
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
spec:
  ports:
  - name: http-metrics
    port: 8080
    targetPort: http-metrics
    protocol: TCP
  - name: telemetry
    port: 8081
    targetPort: telemetry
    protocol: TCP
  selector:
    k8s-app: kube-state-metrics
  type: LoadBalancer

创建负载均衡器后,AWS控制台显示它无法访问实例上的服务。我验证了该服务正在运行,并且可以通过主服务器上的群集IP进行访问。

在遇到此问题之前,我创建了一个新节点。现在,负载均衡器表明它可以达到两个实例之一。也就是说,它现在可以通过新的节点IP到达服务。我的旧节点上仍运行着两个Pod。现在,我将服务的副本数增加了1,因此在新节点上也运行了Pod。现在,我的负载均衡器表明它可以同时到达两个实例。我的理论是,由于iptables修改了kube-proxy规则,以将流量概率转发到运行在不同节点上的两个容器之一,因此旧节点会将流量转发到新节点上的Pod。 / p>

可能会发生什么?我看了一下IPtables规则,它们对我来说很好。

FWIW,我正在使用amazon-vpc-cni-k8s

我已经发布了更多详细信息here

0 个答案:

没有答案