-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Istio 中的 Sidecar 注入及透明流量劫持过程详解 · Service Mesh|服务网格中文社区 #293
Comments
@rootsongjc 你好,我对 envoy 了解得不多,关于理解 Inbound/Outbound handler 部分有些疑问,盼望解答:
|
你好,这篇文章主要讲解的是 Istio 中的如何使用 iptables 做流量劫持的,关于流量在 sidecar 里是如何处理的可以查看这篇Sidecar 流量路由机制分析里面有更详细的说明。 |
宋神,我用 demo profile部署的istio 1.6.3,部署bookfinfo,无其它特别配置,productpage的envoy里关于virtualoutbound中,并没有处理到9080的流量转移,请教这是啥可能原因?
|
当是一个inbound的请求时候,这个时候包的目的地址是pod的IP,目的端口是业务的真实端口(9080,非svc的映射port),由于iptables这个链接目的端口被重改为15006了,会命中virtual inbound listener(0.0.0.0:15006), 这个listener里有一系列的filterchain,它是怎么匹配到真的9080的业务的,比如下面的输出:
|
@myf5 virtualOutbound 这个 listener 的 filterChains 里有设置 接下来如果你执行 |
谢谢,重新阅读和查了一些资料,这个virtual outbound 和virtual inbound处理机制不一样,inbound是直接通过virtualinbound listener内的filter直接处理具体的业务对应listener,而virtualoutbound借助这里描述的:
实现将流量重新在整个配置里重新进行listnener匹配,如果匹配上其它listener则走匹配listener逻辑;如果没有匹配其它listener,则走passthroughcluster直接将包发送到外部。 关于: |
可以通过给 getsockopt 系统调用传入 SO_ORIGINAL_DST 参数获取原始的地址 |
理解了,感谢~ |
@knight42 还有一个细节问题想请教,比如当Productpage访问reviews的时候,目标是 reviews的IP:9080. 在iptables,在output链中最终执行目标端口改写为15001,但是目标IP并没有变,那这个连接怎么最终跑到同pod的envoy 容器的15001上了呢?难道不应该继续走到postrouting并直接发送到pod之外吗。我特地查了下productpage容器的路由表,发现并没有将reviews的ip做特别处理。 |
在iptables规则里找找 |
redirect动作指明了跳转的端口,但目的IP未变,接下来感觉应该走postrouting。没理解的地方是为什么匹配到了envoy的监听端口。就好像一台主机本身有个进程监听80端口,但是另一个进程发送一个到互联网其它主机的80请求,怎么会引导会localhost:80呢。 |
建议先详细了解一下 iptables https://ipset.netfilter.org/iptables-extensions.man.html#lbDK
|
感谢明白了。把它和普通的DNAT搞混了。 |
https://www.servicemesher.com/blog/sidecar-injection-iptables-and-traffic-routing/
本文基于 Istio 1.5.1 版本,介绍了 sidecar 模式及其优势 sidecar 注入到数据平面,如何做流量劫持和转发的,以及流量是怎样路由到 upstream 的。
The text was updated successfully, but these errors were encountered: