深入理解Istio:云原生服务网格进阶实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.4 Kubernetes Ingress与Istio Gateway

kube-proxy只能路由Kubernetes集群内部的流量,而Kubernetes集群的Pod位于CNI创建的网络中,集群外部是无法直接与其通信的,因此在Kubernetes中创建了Ingress这个资源对象,并由位于Kubernetes边缘节点(这样的节点可以有很多个,也可以有一组)的Ingress Controller驱动,负责管理南北向流量。Ingress必须对接各种Ingress Controller才能使用,比如,Nginx Ingress Controller、Traefik。Ingress只适用于HTTP流量,使用方式也很简单,但只能对service、Port、HTTP路径等有限字段匹配路由流量,这导致它无法路由如MySQL、Redis和各种私有RPC等TCP流量。要想直接路由南北向的流量,只能使用service的LoadBalancer或NodePort,前者需要云厂商支持,后者需要进行额外的端口管理。有些Ingress Controller支持暴露TCP和UDP服务,但是只能使用service来暴露,Ingress本身是不支持的,例如,Nginx Ingress Controller,服务暴露的端口是通过创建ConfigMap的方式配置的。

Istio Gateway的功能与Kubernetes Ingress的功能类似,都是负责管理集群的南北向流量。Istio Gateway可被看作网络的负载均衡器,用于承载进出网格边缘的连接。Istio Gateway规范描述了一系列开放端口和这些端口所使用的协议、负载均衡的SNI配置等内容。 Istio 中的Gateway资源是一种CRD扩展,它同时复用了Sidecar 代理功能,详细配置请参考Istio官方网站。