Kubernetes容器内的透明代理

时间:2020-05-07 18:33:36

标签: kubernetes network-programming iptables mitmproxy transparentproxy

我有这样的情况。我在一个pod中有2个容器,其中一个发出HTTP请求,另一个是透明代理(我正在端口8080上使用mitmproxy侦听),该容器可以拦截该请求。我遇到的问题是,代理仅拦截了目标位于Kubernetes集群之外的HTTP请求。 代理不会拦截目标位于Kubernetes集群内的请求(即当我向其他一些微服务发出HTTP请求时)。我假设这是因为我的脚本中缺少一些iptables过滤器。不幸的是,我没有解决任何办法的想法。有没有人至少可以指出我正确的方向?非常感谢您的帮助。

要在Pod上安装iptables,我正在使用带有initContainer的图像,如下所示:

  initContainers:
  - name: init
    image: init-image
    securityContext:
      privileged: true
    imagePullPolicy: Always

这是init-image Docker文件:

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

0 个答案:

没有答案