通过云原生网关管理多个ACK集群

为了保障业务稳定性,通常采用多个ACK集群对等部署的方式来实现高可用。云原生网关支持多ACK集群接入,通过一个网关实例同时关联多个集群,将同名服务合并,在多个服务端点之间做负载均衡。搭配网关的健康检测功能,自动探测服务可用性,实现更高效的故障自动切流。本文以两个ACK集群为例,介绍如何通过云原生网关管理多个ACK集群。

前提条件

  • 创建两个ACK集群。具体操作,请参见创建Kubernetes托管版集群

  • 在两个集群中配置同名的服务。以httpbin服务为例,示例配置如下所示。

    展开查看YAML文件

    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          containers:
          - image: docker.io/kennethreitz/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80

背景信息

在生产实践中,若对业务稳定性要求非常高,通常会采用多ACK集群对等部署的方式来保障高可用。例如,集群A部署在可用区A,集群B部署在可用区B,A与B两个集群部署的服务一致,当其中一个集群故障时可以快速切换流量。

云原生网关为了支持业务的高可用部署诉求,提供了多ACK集群接入功能。即用一个云原生网关实例同时关联A、B两个集群,网关会将两个集群的同名服务进行合并,合并后的服务名称与原来保持一致,但是服务的IP地址列表会同时包含两个服务的所有IP地址。如果A或者B集群故障,利用云原生网关的路由能力会自动将流量分发到正常集群。推荐搭配网关的主动健康检测功能一起使用,由网关主动探测服务的IP地址可用性,从而带来更高效的故障自动切流。

如下图所示,云原生网关管理着来自两个ACK集群的A、B两个服务。当ACK集群B发生crash时,仍然能够通过网关访问到集群A的A、B两个服务,且该切流动作自动发生,无需人工干涉。

image

步骤一:在云原生网关中添加容器服务来源

  1. 登录MSE网关管理控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择云原生网关 > 网关列表,单击目标网关名称。

  3. 在左侧导航栏,选择路由管理,然后选择来源页签。

  4. 单击创建来源。在创建来源面板,配置相关参数,然后单击确定。具体操作,请参见创建服务来源

    创建容器来源.png

步骤二:在云原生网关中分别添加服务A与B

  1. 在左侧导航栏,选择路由管理,然后选择服务页签。

  2. 单击创建服务。在创建服务面板,配置服务相关参数,然后单击确定。具体操作,请参见创建服务

    没有删除一个服务.png

步骤三:在云原生网关中为目标服务添加路由配置

  1. 在左侧导航栏,单击路由管理,然后选择路由页签。

  2. 单击创建路由。在创建路由页面,配置相关参数,然后单击保存并上线。具体操作,请参见创建路由

    创建路由222.png

结果验证

当集群A、B正常时

  1. 服务列表页面查看服务地址。

    可观察到服务地址中有两条记录。没删除服务.png

  2. 多次访问网关,创造访问日志。具体代码如下所示。

    while :; do curl http://<网关SLB地址>/test ; done
  3. 在网关日志中进行查询分析。

    1. 登录MSE网关管理控制台

    2. 在左侧导航栏,选择云原生网关 > 网关列表,并在顶部菜单栏选择地域。

    3. 网关列表页面,单击目标网关名称。

    4. 在左侧导航栏,单击观测分析 > 日志中心。在页面右上角,选择SLS日志服务

      image.png

      通过分组查询可以查看upstream_host对应ACK集群上的服务地址。此时,upstream_host取值有两个,两个ACK集群均分了访问该服务的流量。

      image..png

当集群A异常时

  1. 在集群A中删除httpbin服务。

    此时,服务地址只有一条记录。

    删除一个服务.png

  2. 多次访问网关,创建访问日志。具体代码如下所示。

    while :; do curl http://<网关SLB地址>/test ; done
  3. 在网关日志中进行查询分析。

    1. 登录MSE网关管理控制台

    2. 在左侧导航栏,选择云原生网关 > 网关列表,并在顶部菜单栏选择地域。

    3. 网关列表页面,单击目标网关名称。

    4. 在左侧导航栏,单击观测分析 > 日志中心。在页面右上角,选择SLS日志服务

      image..png

      通过分组查询可以观察到此时upstream_host取值仅有一个,是集群B的服务地址。该现象表明网关将全部流量切到了集群B上。

      image..png