为南北向服务网关的目标服务配置灰度发布
使用场景
服务网关是网格的流量入口,网格外部的客户端通过服务网关访问网格内的服务。目前默认是基于Kubernetes Gateway API模型实现网关能力,网格服务详情中的灰度发布策略只适用于东西向网格内部服务间;对于南北向入口网关的目标服务,如果需要配置灰度发布策略,可参考下文为入口网关的目标服务配置灰度发布策略。
东西向网格内部服务间灰度发布,使用的是Istio的VirtualService/DestinationRule模型,依赖DestinationRulesubsets 来定义服务的版本。
南北向入口网关的目标服务灰度发布,使用的是Kubernetes Gateway API的后端服务定义(backend service definitions),依赖定义多个service来定义服务的版本。
操作步骤
- 创建nginx-v1服务
进入CCE Console页面,单击在网格已添加的CCE集群名称进入集群详情页,单击“服务-服务”,选择对应命名空间,单击“创建服务”按钮。
参数填写说明:
- Service名称:自定义服务名称,例如nginx-v1。
- 访问类型:选择集群内访问。
- 选择器:单击“引用负载标签”,选择对应的工作负载,例如nginx。
- 端口配置:容器端口填写业务容器进程监听端口,例如80。服务端口填写通过service访问的端口,例如5566。
- 创建nginx-v2服务
参考步骤1创建nginx-v2服务。
- 创建基于流量比例的路由
进入华为云UCS控制台,依次单击“服务网格-要配置的网格名称-服务网关-网关路由-HTTP路由-YAML创建”。
使用以下内容,创建nginx-canary网关路由。
apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: nginx-canary # 网关路由名 namespace: whtest # 网关路由所在的命名空间 spec: parentRefs: - group: gateway.networking.k8s.io kind: Gateway name: gwtest1 # 网关名 namespace: whtest # 网关所在的命名空间 rules: - backendRefs: - group: '' kind: Service name: nginx-v1 # nginx-v1服务的服务名 port: 5566 # nginx-v1服务的服务端口 weight: 30 # nginx-v1服务的流量比例 - group: '' kind: Service name: nginx-v2 # nginx-v2的服务名 port: 5566 # nginx-v2服务的端口 weight: 70 # nginx-v2服务的流量比例 matches: - path: type: PathPrefix value: /
该配置表示路由规则引用whtest命名空间下名为gwtest1的Gateway资源。因为未指定监听器名称,此处会尝试引用该Gateway的所有监听器。对于路径前缀为/的请求,将30%流量路由到同命名空间下的nginx-v1服务的5566端口,将70%流量路由到同命名空间下的nginx-v2服务的5566端口。
- 验证基于流量比例的路由生效
等待几秒钟待新规则配置下发成功,通过网关访问目标服务nginx应用,查看路由规则是否生效。
查看方法如下:
在浏览器中输入地址 http://$GATEWAY_ELB_IP:$GATEWAY_PORT/ ,其中, $GATEWAY_ELB_IP 是路由引用的whtest命名空间下名为gwtest1的网关的负载均衡公网地址;
$GATEWAY_PORT是gwtest1网关的监听器对外端口。
预期结果:
反复多次刷新浏览器,约有70%的时间可以看到v2版本的nginx服务内容。