对于Istio网络路由链路的理解
背景
最近在看Istio的网络配置,对于里面的几个组件如ingress-gateway、Gateway、VirtualService、DestinationRule和k8s原生的Service间的关系不是很清楚,这里整理以下自己的理解
组件
这里可能陈述不完全正确,属于个人理解
ingress-gateway: 本质是一个Service,仍然是k8s原有组件,在生产环境上一般为LoadBalancer模式,对外开放端口Gateway:配合ingress-gateway,运行在指定ingress-gateway的Pod上,作为请求进入Istio的入口VirtualService:- 配置转发规则,转发规则指一个请求满足哪些条件(比如路径,host),则发往哪个目的服务。
- 指定对应的
Gateway,Gateway上接收到的请求,会根据转发规则依次判断,选择第一个匹配的规则进行转发。
DestinationRule:- 对
VirtualService中目的服务的扩展,k8s中服务的为Service,DestinationRule可以进一步指定Service中的一部分Pod(通过不同的label)。 - 还支持请求的负载均衡策略等配置
- 对
Service:k8s原生的服务,作为负载的入口,将请求在多个Pod间进行负载均衡Pod:实际运行服务进程的容器,暴露端口为containerPort
网络路由

- 外部请求通过
ingress-gateway暴露出的端口进入集群,对于LoadBalancer模式具体端口由实现而定,对于NodePort模式,端口就是NodePort Gateway中会配置Selector,根据标签匹配到ingress-gateway。也会配置Port和Host(Host即请求中的Host请求头),ingress-gateway收到的请求符合该配置的会进入该Gateway。
Gateway的Port与ingress-gateway中的targetPort需要相同
VirtualService中配置对应的Gateway,同时配置一系列规则
Gateway的Port与VirtualService目前看来似乎并没有需要匹配的关系,仅Host规则符合即可进入VirtualService进行匹配
VirtualService中有一系列规则,符合规则的请求进入Destination
Destination中可以指定Port,该Port为Service中配置的Port,当指定的Service中包含多个端口时需要指定,否则可以不用指定,默认即为Service暴露的端口
Destination一般已经可以直接指定k8s的Service作为路由目的地了,但是可以通过DestinationRule进一步细化Service中的一部分PodService的targetPort为对应Pod中运行的服务进程暴露的端口Pod中可配置containerPod参数,但是只有展示作用,即使不配置,Pod所有端口默认也都是可以在集群内部被访问到的.

浙公网安备 33010602011771号