我在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