Istio 是一种开源服务网格,使用代理拦截所有网络流量,可根据配置提供广泛的应用程序感知功能。
常见的 CRD:
- VirtualService:定义服务间或服务至外部流量的路由规则,支持请求匹配、路由选择、流量分割、重试、超时等策略。
- DestinationRule:定义目标服务的流量策略,比如负载均衡、连接池、TLS 配置等。每个目标服务的流量策略通过 DestinationRule 配置后,对所有请求生效。
- Gateway:配置边缘网关的入口流量规则,例如定义外部流量如何进入服务网格。它可以用于 HTTP、HTTPS、TLS 和 TCP 流量。
- ServiceEntry:将外部服务引入到 Istio 网格中,允许 Istio 管理和监控这些服务的流量。例如,可以使用 ServiceEntry 来引入外部 API,使网格中的服务可以透明地与外部服务交互。
创建一个 Nginx,用于测试:
1 | kubectl create deployment nginx --image=nginx:mainline |
创建 Gateway:
selector 匹配 istio-ingressgateway 部署的 Pod,通过该网关来接收外部流量。
1 | apiVersion: networking.istio.io/v1beta1 |
创建 VirtualService:
hosts 字段指定了可以通过 test.nginx.com 主机名访问该服务的外部请求,流量通过定义的 Gateway 进入。VirtualService 的 route 字段将流量路由到 nginx.default.svc.cluster.local。
1 | apiVersion: networking.istio.io/v1beta1 |
创建 DestinationRule:
trafficPolicy 中定义了负载均衡策略为 LEAST_CONN,即最小连接数策略。DestinationRule 的 host 必须匹配 VirtualService 中的 destination。
1 | apiVersion: networking.istio.io/v1beta1 |
通过 Istio Ingress Gateway 访问 Nginx:
1 | curl -H "Host: test.nginx.com" http://<istio-ingressgateway-cluster-ip>/ |