Прозрачный прокси внутри Kubernetes pod - PullRequest
0 голосов
/ 07 мая 2020

У меня есть такой сценарий. У меня есть 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
...