Принудительный трафик c от одного контейнера к другому - PullRequest
1 голос
/ 27 апреля 2020

У меня есть две капсулы на Кубернетесе. Для упрощения давайте называть их A и B. A - это приложение, которое делает HTTP-запросы. B - прокси, работающий в прозрачном режиме. Вопрос в том, как мне изменить правила iptables, чтобы трафик c, выходящий из A, проходил через модуль B ??

    NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
    A (application)       NodePort    10.109.208.35    <none>        8090:31000/TCP                  3d6h
    B (transparent proxy) NodePort    10.98.102.253    <none>        8080:32226/TCP                  3h33m

Я пробовал следующее, но оно не работает. Может кто-нибудь помочь мне разобраться?

sudo iptables -t nat -D PREROUTING -p tcp --dport 31000 -j REDIRECT --to 32226

1 Ответ

2 голосов
/ 27 апреля 2020

Вы можете добиться такого поведения, используя службу me sh, такую ​​как Linkerd или Istio, и используя возможности выхода.

Кроме того, я вполне уверен, что это не очень хорошая идея измените iptables из-за следующего: 1. iptables автоматически предоставлен Kubernetes и имеет сложную модель. 2. как только кластер будет перезагружен, правила, установленные в iptables, могут быть потеряны, и вы не будете знать, что вы сделали.

Другое решение, а не использование службы me sh, заключается в использовании прокси коляски, такие как Envoy. В любом случае, вы должны сделать эту связь явной для остальной части команды, которая работает с вами над этим. В противном случае кто-то выяснит, почему трафик c из А проходит через B. Это не тот шаблон, который я видел раньше, и для меня он больше похож на антипаттерн.

...