Kubernetes 在注入istio的k8s pod中,为什么特使调用localhost,数据包通过预路由链

Kubernetes 在注入istio的k8s pod中,为什么特使调用localhost,数据包通过预路由链,kubernetes,iptables,istio,Kubernetes,Iptables,Istio,正如我所知,当一个进程发送数据包时,数据包应该只通过iptables输出和后路由 但当我在装有istio的吊舱里测试时。我发现当特使调用localhost:xxx时,数据包确实通过了预路由和输入。为什么会发生这种情况?如列表中所述 用于除去除已建立连接之外的所有入站流量 用于处理入站端口。流量将重定向至特使,特使将处理并转发至当地服务。如果未设置,istio iptables将不会拦截任何入站端口 根据github上的 入境 假设所有流量都需要重定向到代理,则入站重定向的iptable规则非

正如我所知,当一个进程发送数据包时,数据包应该只通过iptables输出和后路由


但当我在装有istio的吊舱里测试时。我发现当特使调用localhost:xxx时,数据包确实通过了预路由和输入。为什么会发生这种情况?

如列表中所述


用于除去除已建立连接之外的所有入站流量


用于处理入站端口。流量将重定向至特使,特使将处理并转发至当地服务。如果未设置,istio iptables将不会拦截任何入站端口

根据github上的

入境

假设所有流量都需要重定向到代理,则入站重定向的iptable规则非常简单。如果入站流量需要绕过代理,则需要附加规则,例如ssh

iptables-t nat-A预路由-p tcp-j重定向--到端口${ISTIO_PROXY_port}


istio是完整的,因此您可以实际检查预路由输入到底做了什么



此外,还有一个关于了解特使侧车如何在Istio服务网格中拦截和路由流量的博客。如果您想了解整个过程,值得一看。

AFAIK istio init init container用于设置iptables规则,以便入站/出站流量将通过sidecar代理,因此我不确定它为什么不应该使用预路由和输入?这是一个可以回答您问题的示意图。另外,请检查有关代理入/出边界流量方法的信息。如果这能回答你的问题,请告诉我。