我有两个在Kubernetes上运行的pod。为了简化,我们称它们为A和B。A是一个应用程序,它可以发出HTTP请求。B是一个运行在透明模式下的代理。问题是我应该如何改变iptables规则,使从A出来的流量通过B pod?
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
你可以通过使用服务网状结构来实现这样的行为,如 Linkerd
或 Istio
并使用出口功能。
另外,我很确定改变iptables不是一个好主意,因为以下几点:1.iptables是Kubernetes自动提供的,模型很复杂.2.一旦集群将重启,iptables中设置的规则可能会丢失,你将不知道自己做了什么。
另一种解决方案,不是使用服务网状结构,而是使用sidecar代理,如 Envoy
. 不管怎么说,你应该让和你一起工作的团队其他成员明确这种耦合。否则,就会有人来排查为什么A的流量会经过B,这不是我之前看到的模式,对我来说,这似乎更像是一种反模式。