У меня есть такой сценарий. У меня есть 2 контейнера внутри одного модуля, один из них выполняет HTTP-запросы, другой - прозрачный прокси (я использую mitmproxy, прослушивающий порт 8080
), который перехватывает эти запросы. Проблема, с которой я столкнулся, заключается в том, что только HTTP-запросы, адресат которых находится за пределами кластера Kubernetes, перехватываются прокси. Прокси-сервер не перехватывает запросы, место назначения которых находится в кластере Kubernetes (т.е. когда я отправляю HTTP-запрос к какому-либо другому микросервису). Я предполагаю, что это потому, что мне не хватает некоторых фильтров iptables в моем скрипте. К сожалению, у меня закончились идеи, как это исправить. Есть ли кто-нибудь, кто мог бы хотя бы указать мне правильное направление? Я был бы очень признателен за любую помощь.
Чтобы установить iptables на pod, я использую изображение с initContainer
, например:
initContainers:
- name: init
image: init-image
securityContext:
privileged: true
imagePullPolicy: Always
Вот init-image
Docker file:
FROM alpine:3.6
RUN apk add --update iptables curl bash
RUN apk add --update ip6tables curl bash
COPY start.sh /start.sh
RUN chmod 777 /start.sh
ENTRYPOINT ["/start.sh"]
И, наконец, script.sh
. Часть с правом собственности возникла по причинам mitmproxy, и она была добавлена таким образом в соответствии с ее документацией.
#!/bin/bash
set -x
set -eo pipefail
iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner root --dport 80 -j REDIRECT --to-port 8080
ip6tables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner root --dport 80 -j REDIRECT --to-port 8080