kubernetes svc有一个参数externalTrafficPolicy当设置成Local的时候可以追踪,访问的来源的ip,但是就只能通过pod所在节点的nodeport才能访问,不是所有的节点都可以访问了。
当我们应用过程中发现设置了externalTrafficPolicy:Local以后svc死活都不能访问,后来经过一系列排查iptables和kube-proxy终于发现了解决办法。
在kube-proxy启动参数里面需要设置--hostname-override:
- --hostname-override=$(NODE_NAME)
env:
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
然后就可以正常使用了,过程参考文章:
https://stackoverflow.com/questions/47345327/why-unable-to-access-a-service-if-setting-externaltrafficpolicy-to-local-in-a-ku
https://ieevee.com/tech/2017/09/18/k8s-svc-src.html#%E5%AE%9E%E7%8E%B0iptables