kubernetes svc有一個(gè)參數(shù)externalTrafficPolicy當(dāng)設(shè)置成Local的時(shí)候可以追蹤,訪問的來源的ip,但是就只能通過pod所在節(jié)點(diǎn)的nodeport才能訪問,不是所有的節(jié)點(diǎn)都可以訪問了。
當(dāng)我們應(yīng)用過程中發(fā)現(xiàn)設(shè)置了externalTrafficPolicy:Local以后svc死活都不能訪問,后來經(jīng)過一系列排查iptables和kube-proxy終于發(fā)現(xiàn)了解決辦法。
在kube-proxy啟動(dòng)參數(shù)里面需要設(shè)置--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