1

我在 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
4

1 回答 1

2

您可以通过使用服务网格(例如LinkerdorIstio和使用出口功能)来实现这种行为。

另外,我很确定更改 iptables 不是一个好主意,因为以下原因: 1. iptables 由 Kubernetes 自动配置并且具有复杂的模型。2. 集群重启后,iptables 中设置的规则可能会丢失,您将不知道自己做了什么。

另一个解决方案,而不是使用服务网格,是使用边车代理,例如Envoy. 无论如何,您应该为与您一起工作的团队的其他成员明确这种耦合。否则,有人会解决为什么来自 A 的流量会通过 B。这不是我以前见过的模式,对我来说它似乎更像是一种反模式。

于 2020-04-27T14:49:37.243 回答