Как избежать snat при использовании типа сервиса clusterip на kubernetes?

Для каждого сервиса в кластере k8s kubernetes делают 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 для реализации сетевой политики, а соответствующий набор содержит только pod ip.

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

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

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

1 ответ

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

Я изменился --cluster-cidr=10.254.0.0/16 для кубе-прокси --cluster-cidr=172.30.0.0/16, И тогда это сработало хорошо.

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

Другие вопросы по тегам