eni模式下设置LoadBalancer 或 NodePort Service 的 externalTrafficPolicy 为 Local时,通信异常
cyclinder opened this issue · 4 comments
cyclinder commented
Local 模式最大程度保持源IP, 所以kube-proxy 不会对数据包 SNAT, 导致数据包出入 Pod 时,接收和发出的网卡不一致,数据包丢弃:
client -> externalIP:
request packet: client -> NLB -> VPC -> Pod's IP(to calixxxxx) -> veth1
response packet: from eth0 -> world.....
cyclinder commented
BSWANG commented
阿里云容器服务上对外暴露Loadbalancer类型的Service的时候,直接使用SLB挂载后端Pod的方式来做的解决。https://github.com/kubernetes/cloud-provider-alibaba-cloud/blob/master/pkg/controller/helper/service_utils.go#L71
cyclinder commented
emm, 我当时测试 ENI 模式 + Local 模式+ SLB ,应该是有通信问题的
BSWANG commented
emm, 我当时测试 ENI 模式 + Local 模式+ SLB ,应该是有通信问题的
对,Local模式NodePort转发的时候不做SNAT,所以会有问题的,阿里云容器服务上使用SLB直接挂Pod来避免了走到NodePort Local转发,并且保留了源地址的能力。
增加veth可以解决,terway的独占ENI模式也是这个来解决这种问题的,但也是增加了复杂度,在networkpolicy、Qos等功能上就得同时考虑Pod的多张网卡。