【发布时间】:2021-03-06 19:50:25
【问题描述】:
据我所知,当一个进程发送数据包时,数据包应该只通过 iptables OUTPUT 和 POSTROUTING。
但是当我在注入 istio 的 pod 中进行测试时。我发现当特使调用 localhost:xxx 时,数据包确实通过了 PREROUTING 和 INPUT。为什么会这样?
【问题讨论】:
标签: kubernetes iptables istio
据我所知,当一个进程发送数据包时,数据包应该只通过 iptables OUTPUT 和 POSTROUTING。
但是当我在注入 istio 的 pod 中进行测试时。我发现当特使调用 localhost:xxx 时,数据包确实通过了 PREROUTING 和 INPUT。为什么会这样?
【问题讨论】:
标签: kubernetes iptables istio
正如 istio iptables script 中提到的那样。
INPUT 用于丢弃所有入站流量,除了已建立的连接。
PREROUTING 用于处理入站端口。流量将被重定向到 Envoy,Envoy 将处理并转发到本地服务。如果不设置,则 istio iptables 不会拦截任何入站端口。
根据github上的proxy-redirection
入站
入站重定向的 iptable 规则很简单,假设所有流量都需要重定向到代理。如果入站流量需要绕过代理,则需要额外的规则,例如ssh。
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-port ${ISTIO_PROXY_PORT}
istio 有完整的iptables schematic,因此您实际上可以检查 PREROUTING 和 INPUT 究竟做了什么。
此外,medium 上还有一篇关于了解 Envoy Sidecar 如何在 Istio 服务网格中拦截和路由流量的博客。如果你想了解整个过程,值得一看。
【讨论】: