首页 微服务引擎 MSE 操作指南 云原生网关 网关管理 通过云原生网关管理多个ACK集群

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

更新时间: 2023-06-29 17:51:15

云原生网关支持通过多实例或者单实例多可用区打散的方式保障高可用。本文介绍如何通过云原生网关对多集群进行管理。

前提条件

  • 已创建两个ACK集群。关于创建集群,请参见创建Kubernetes托管版集群

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

    展开查看代码

    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

步骤一:在云原生网关中分别管理集群A与B

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

  2. 在左侧导航栏,选择云原生网关 > 网关列表

  3. 在顶部菜单栏选择地域。

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

  5. 在左侧导航栏,选择服务管理 > 来源管理

  6. 在服务来源管理页面左上角,单击创建来源

  7. 创建来源面板,配置相关参数,然后单击确定

    配置项

    说明

    来源类型

    支持容器服务MSE NacosMSE ZooKeeperEDAS 注册中心SAE注册中心服务来源。

    当服务来源选择容器服务时,需配置以下参数(目前仅支持对含有Ingress监听配置的ACK容器服务进行编辑操作):

    ACK/ASK集群

    选择后端服务所在的集群。

    说明

    您在创建网关时需要选择和后端集群相同的VPC,那么服务来源添加时会自动获取该VPC下的集群。

    是否监听K8s Ingress

    • 开启监听Ingress配置后,云原生网关会自动监听Ingress资源的变化,并使Ingress资源中域名、路由的相关配置生效。

    • 关闭监听Ingress配置后,云原生网关会放弃监听Ingress资源,并失效之前已监听的Ingress资源中域名、路由相关配置,请您谨慎操作。

    重要

    通过管控手动配置的域名、路由的相关配置的优先级高于Ingress资源。

    IngressClass

    监听关联指定IngressClass的Ingress资源。

    • 当配置成空值时,监听集群中所有的Ingress资源。

    • 当配置成具体值时(仅支持单个值,暂不支持批量配置),监听集群中带有class注解或者Spec.IngressClassName的值与配置值一致的Ingress资源。当配置成nginx时,监听的Ingress资源包括:IngressClass为nginx或者未关联任何IngressClass的Ingress资源。

    监听命名空间

    监听指定命名空间的Ingress资源。

    • 当配置成空值时,监听集群中所有命名空间中的Ingress资源。

    • 当配置成具体值时(仅支持单个值,暂不支持批量配置),监听集群中指定命名空间中的Ingress资源。

    当服务来源选择MSE NacosMSE ZooKeeper时,需配置以下参数:

    集群名称

    选择集群。

    注册类型

    选择集群后,注册类型自动生成。

    注册地址

    选择集群后,注册地址自动生成。

    当服务来源选择EDAS注册中心时,需配置以下参数:

    微服务空间

    选择服务部署在EDAS的某个微服务空间。

    服务分组

    若服务指定了特殊的服务分组,此处需要新增对应分组。

    当服务来源选择SAE注册中心时,需配置以下参数:

    命名空间

    选择服务部署在SAE的某个命名空间。

    服务分组

    若服务指定了特殊的服务分组,此处需要新增对应分组。

    创建完成后,控制台界面如下所示。

    image..png

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

  1. 在左侧导航栏,选择服务管理 > 服务列表

  2. 服务列表页面左上角,单击创建服务创建服务面板,配置服务相关参数,然后单击确定

    关于相关参数的说明,请参见添加服务

    创建完成后,控制台界面如下所示。

    image..png

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

  1. 左侧导航栏,单击路由管理 > 路由配置,然后在页面左上角,单击创建路由

  2. 编辑路由页面,填写请求信息目标服务,然后单击保存并上线

    关于详细的配置项信息,请参见新建路由规则

    创建完成后,控制台界面如下所示(test-app为示例服务)。

    image..png

结果验证

当集群A、B正常时

  1. 在服务地址中查看记录。

    可观察到服务地址中有两条记录。如下图所示。

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

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

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

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

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

    4. 在左侧导航栏,单击观测分析 > 日志中心

    image.png

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

    image..png

当集群A异常时

  1. 在集群A中删除test-app服务。

    此时,服务地址只剩一条记录。网关服务列表如下所示。

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

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

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

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

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

    4. 在左侧导航栏,单击观测分析 > 日志中心

    image..png

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

    image..png

阿里云首页 微服务引擎 MSE 相关技术圈