文档首页/ 华为云UCS/ 最佳实践/ 服务网格/ 为南北向服务网关的目标服务配置灰度发布
更新时间:2024-10-22 GMT+08:00
分享

为南北向服务网关的目标服务配置灰度发布

使用场景

服务网关是网格的流量入口,网格外部的客户端通过服务网关访问网格内的服务。目前默认是基于Kubernetes Gateway API模型实现网关能力,网格服务详情中的灰度发布策略只适用于东西向网格内部服务间;对于南北向入口网关的目标服务,如果需要配置灰度发布策略,可参考下文为入口网关的目标服务配置灰度发布策略。

东西向网格内部服务间灰度发布,使用的是Istio的VirtualService/DestinationRule模型,依赖DestinationRulesubsets 来定义服务的版本。

南北向入口网关的目标服务灰度发布,使用的是Kubernetes Gateway API的后端服务定义(backend service definitions),依赖定义多个service来定义服务的版本。

前提条件

操作步骤

  1. 创建nginx-v1服务

    进入CCE Console页面,单击在网格已添加的CCE集群名称进入集群详情页,单击“服务-服务”,选择对应命名空间,单击“创建服务”按钮。

    参数填写说明:

    • Service名称:自定义服务名称,例如nginx-v1。
    • 访问类型:选择集群内访问。
    • 选择器:单击“引用负载标签”,选择对应的工作负载,例如nginx。
    • 端口配置:容器端口填写业务容器进程监听端口,例如80。服务端口填写通过service访问的端口,例如5566。

  2. 创建nginx-v2服务

    参考步骤1创建nginx-v2服务。

  3. 创建基于流量比例的路由

    进入华为云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端口。

  4. 验证基于流量比例的路由生效

    等待几秒钟待新规则配置下发成功,通过网关访问目标服务nginx应用,查看路由规则是否生效。

    查看方法如下

    在浏览器中输入地址 http://$GATEWAY_ELB_IP:$GATEWAY_PORT/ ,其中, $GATEWAY_ELB_IP 是路由引用的whtest命名空间下名为gwtest1的网关的负载均衡公网地址;

    $GATEWAY_PORT是gwtest1网关的监听器对外端口。

    预期结果:

    反复多次刷新浏览器,约有70%的时间可以看到v2版本的nginx服务内容。

相关文档