как избежать snat при использовании типа службы clusterip на кубернетах?

Для каждой службы в кластере k8s кубернеты выполняют snat для пакетов запросов. Правила iptables:

-A KUBE-SERVICES ! -s 10.254.0.0/16 -d 10.254.186.26/32 -p tcp -m comment --comment "policy-demo/nginx: cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.254.186.26/32 -p tcp -m comment --comment "policy-demo/nginx: cluster IP" -m tcp --dport 80 -j KUBE-SVC-3VXIGVIYYFN7DHDA



-A KUBE-MARK-MASQ -j MARK --set-xmark 0x4000/0x4000


-A POSTROUTING -m comment --comment "kubernetes postrouting rules" -j KUBE-POSTROUTING
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -m mark --mark 0x4000/0x4000 -j MASQUERADE

Он хорошо работает в большинстве случаев, но не в сетевой политике. Caclico использует ipset для реализации сетевой политики, и соответствующий набор содержит только ip pod.

Итак, когда модуль службы работает на узле node1, а модуль доступа работает на узле node2. Сетевая политика отбрасывает запрос, потому что src ip запроса - это ip node2 или flannel.1 ip.

Я думаю, что есть способ закрыть snat для службы clusterip, но я нигде не могу его найти, может ли кто-нибудь мне помочь?

Большое тебе спасибо!


person duye    schedule 02.01.2018    source источник
comment
Вы решили эту проблему?   -  person Karthikeyan    schedule 29.06.2021


Ответы (1)


Проблема решена.

Я изменил --cluster-cidr=10.254.0.0/16 для kube-proxy на --cluster-cidr=172.30.0.0/16. И тогда это сработало.

Kube-proxy cluster-cidr должен совпадать с тем, который используется в диспетчере контроллеров, а также с тем, который используется calico.

person duye    schedule 03.01.2018