在Kubernetes环境中,Kubernetes Ingress用于配置需要在集群外部公开的服务。但是在Istio服务网格中,更好的方法是使用新的配置模型,即Istio Gateway。Gateway允许将Istio流量管理的功能应用于进入集群的流量。
二者在支持的功能上的对比,如下表所示
Istio Gateway | 阿里云Ingress Controller | NGINX Ingress Controller | |
---|---|---|---|
根据HTTP Header选择路由规则 | 支持 | 仅支持单个Header,不支持多个Header组合 | 不支持 |
Header规则支持正则表达式 | 支持 | 支持 | 不支持 |
服务之间设置权重拆分流量 | 支持 | 支持 | 不支持 |
Header和权重规则组合使用 | 支持 | 支持 | 不支持 |
路由规则检查 | 支持 | 不支持 | 不支持 |
路由规则粒度 | service下的不同pod | service | service |
支持的协议 | HTTP1.1/HTTP2/gRPC/TCP/Websockets/MongoDB | HTTP1.1/HTTP2/gRPC/TCP/Websockets | HTTP1.1/HTTP2/gRPC/TCP/Websockets |
下面我们看下使用Istio Gateway实现灰度发布时,与Ingress在使用上的差异
Istio Gateway实现灰度发布
环境准备
创建Kubernetes集群
阿里云容器服务Kubernetes 1.10.4目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。具体过程可以参考这里
部署istio
阿里云容器服务在应用目录
目前支持istio快速部署,具体过程可以参考这里
部署用于灰度发布的两个服务
old service
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: old-nginx
spec:
replicas: 2
selector:
matchLabels: