Istio中的Envoy配置文件
# Envoy配置项
- Listener
- Route
- Cluster
- Endpoint
# 流量路线图
这里有两个端口需要特别注意,即15001端口和15006端口。这两个端口引出两个概念:OutBound和Inbound。
我们需要知道,Istio做的流量拦截不止是入口方向的流量,还包括出口方向。所以在整个链路中就分为OutBound和InBound。OutBound负责接收Iptables拦截的所有出口流量,InBound负责接收Iptables拦截的入口方向的流量。
# Listener
当我们通过istioctl pc listener productpage-v1-6b746f74dc-msp5x
查看某一个pod的Listener时会发现有非常多的Listener。这里需要注意的是:xxx
- VirtualOutboundListener(端口15001) 这是一种特殊的Listener,它接收的流量并不直接转给某个Route,而是将流量转发给OutBoundListener,转发的原则就是根据端口。比如拦截了9080端口,那就会转发给9080的OutBoundListener。
- OutboundListener(集群内服务的每一个端口一个,相同端口会使用一个) 这是出口方向的Listener,由于我们并不知道应用会请求哪些服务,所以OutBoundListener需要包含所有服务。因此OutBoundListener的数量是集群内所有服务端口的并集。当某一个端口的OutBoundListener收到流量后,即把它转发给以该端口命名的OutBoundRoute
- VirtualInboundListener(端口15006) 和VirtualOutboundListener类似,但它是入口方向的VirtualListener。它会把接收到的流量转发给以pod端口命名的Cluster。
- InboundListener 接收来自Iptables从127.0.0.6转发来的流量,将流量转发到”inbound|80||“ (猜测,需要看下具体代码确认下)
# Route
- OutboundRoute 以端口命名的Route,和OutBoundListener一一对应,用于处理来自OutBoundListener的流量,将流量转发到OutboundCluster
- InboundRoute 用于处理来自InboundListener的流量,将流量转发给OutboundCluster。
- “inbound|80||” 接收来自InboundListener的流量,将其转发到InboundCluster
# Cluster
- InboundCluster 以Pod的端口命名的一个Cluster,接收来自VirtualInBoundListener的流量;将流量转发到127.0.0.6
- OutboundCluster 以集群内服务FQDN命名的Cluster,接收来自OutBoundRoute的流量;将流量转发到目标服务的Endpoint
# Endpoint
可以理解为K8S中的Endpoint
# 参考文章
https://www.zhaohuabing.com/post/2018-09-25-istio-traffic-management-impl-intro/ (opens new window)
- 原文出处:
- 原文作者: https://github.com/saltbo
- 原文链接:
- 版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。