当前位置:   article > 正文

istio学习笔记 - 1 (初探数据平面)_lstio数据平面

lstio数据平面

istio学习笔记 - 1 (初探数据平面)

数据平面模型

模型

在这里插入图片描述
istio数据平面的核心是proxy,以sidecar模式运行,每个服务pod启动时伴随启动istio-init和proxy容器。其中istio-init容器主要功能是初始化pod网络和对pod设置iptable规则,设置完毕后自动结束。proxy容器中启动两个服务:pilot-agent、envoy,agent的作用是同步管理数据、启动并管理envoy服务进程、上报遥测数据,envoy服务则根据管理策略完成流量管控、生成遥测数据。

iptables规则

 *mangle
:PREROUTING ACCEPT [24256:13098448]
:INPUT ACCEPT [24256:13098448]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [23191:16009212]
:POSTROUTING ACCEPT [23191:16009212]
COMMIT
# Completed on Mon Apr 15 02:43:12 2019
# Generated by iptables-save v1.6.0 on Mon Apr 15 02:43:12 2019

*nat
:PREROUTING ACCEPT [1276:76560]
:INPUT ACCEPT [1276:76560]
:OUTPUT ACCEPT [1034:91283]
:POSTROUTING ACCEPT [1034:91283]
:ISTIO_INBOUND - [0:0]
:ISTIO_IN_REDIRECT - [0:0]
:ISTIO_OUTPUT - [0:0]
:ISTIO_REDIRECT - [0:0]
-A PREROUTING -p tcp -j ISTIO_INBOUND
-A OUTPUT -p tcp -j ISTIO_OUTPUT
-A ISTIO_INBOUND -p tcp -m tcp --dport 9080 -j ISTIO_IN_REDIRECT
-A ISTIO_IN_REDIRECT -p tcp -j REDIRECT --to-ports 15001
-A ISTIO_OUTPUT ! -d 127.0.0.1/32 -o lo -j ISTIO_REDIRECT
-A ISTIO_OUTPUT -m owner --uid-owner 1337 -j RETURN
-A ISTIO_OUTPUT -m owner --gid-owner 1337 -j RETURN
-A ISTIO_OUTPUT -d 127.0.0.1/32 -j RETURN
-A ISTIO_OUTPUT -j ISTIO_REDIRECT
-A ISTIO_REDIRECT -p tcp -j REDIRECT --to-ports 15001
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

istio通过给nat表中PREROUTING、OUTPUT链增加规则来实现流量redirect,流量流转大致如下图:
在这里插入图片描述
首先,我们假设:srv-A监听9080端口,proxy监听15001端口,下游服务向srv-A发送的请求为“to 9080”,srv-A的upstream是srv-B。

-A PREROUTING -p tcp -j ISTIO_INBOUND
-A ISTIO_INBOUND -p tcp -m tcp --dport 9080 -j ISTIO_IN_REDIRECT
-A ISTIO_IN_REDIRECT -p tcp -j REDIRECT --to-ports 15001
  • 1
  • 2
  • 3

从这条规则可以看出,所有从外部请求本地目标端口9080的tcp流量均会重定向到本地15001端口(proxy监听)

-A OUTPUT -p tcp -j ISTIO_OUTPUT
  • 1

所有从本地流向外部的tcp流量均会被ISTIO-OUTPUT规则处理

-A ISTIO_OUTPUT ! -d 127.0.0.1/32 -o lo -j ISTIO_REDIRECT
  • 1

从lo网卡流出,并且目的地址不是环回地址的tcp流量将会被重定向

-A ISTIO_OUTPUT -m owner --uid-owner 1337 -j RETURN
-A ISTIO_OUTPUT -m owner --gid-owner 1337 -j RETURN
  • 1
  • 2

对istio-proxy自己发出的流量不做处理(从proxy往外发送的流量本身就已经得到了处理,自然不用再redirect到proxy)。注:当proxy作为sidecar运行时,启用的是envoy的redirect模式,此时进程为–uid-owner 1337;当proxy作为透明代理运行时,启用的是envoy的tproxy模式,此时进程为–gid-owner 1337

-A ISTIO_OUTPUT -d 127.0.0.1/32 -j RETURN
  • 1

对目的地址是环回地址的流量不做处理(这部分流量是proxy将外部请求upstream到srv-A的流量,以及srv-A回复给proxy的流量,也不能redirect到proxy的15001端口)

-A ISTIO_OUTPUT -j ISTIO_REDIRECT
-A ISTIO_REDIRECT -p tcp -j REDIRECT --to-ports 15001
  • 1
  • 2

其他出口流量均redirect到proxy的15001端口(这部分流量是srv-A请求srv-B服务所产生)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/181714
推荐阅读
相关标签
  

闽ICP备14008679号