我有这样的情况。我在一个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