为了保障业务稳定性,通常采用多个ACK集群对等部署的方式来实现高可用。云原生网关支持多ACK集群接入,通过一个网关实例同时关联多个集群,将同名服务合并,在多个服务端点之间做负载均衡。搭配网关的健康检测功能,自动探测服务可用性,实现更高效的故障自动切流。本文以两个ACK集群为例,介绍如何通过云原生网关管理多个ACK集群。
前提条件
创建两个ACK集群。具体操作,请参见创建Kubernetes托管版集群。
在两个集群中配置同名的服务。以
httpbin
服务为例,示例配置如下所示。
背景信息
在生产实践中,若对业务稳定性要求非常高,通常会采用多ACK集群对等部署的方式来保障高可用。例如,集群A部署在可用区A,集群B部署在可用区B,A与B两个集群部署的服务一致,当其中一个集群故障时可以快速切换流量。
云原生网关为了支持业务的高可用部署诉求,提供了多ACK集群接入功能。即用一个云原生网关实例同时关联A、B两个集群,网关会将两个集群的同名服务进行合并,合并后的服务名称与原来保持一致,但是服务的IP地址列表会同时包含两个服务的所有IP地址。如果A或者B集群故障,利用云原生网关的路由能力会自动将流量分发到正常集群。推荐搭配网关的主动健康检测功能一起使用,由网关主动探测服务的IP地址可用性,从而带来更高效的故障自动切流。
如下图所示,云原生网关管理着来自两个ACK集群的A、B两个服务。当ACK集群B发生crash时,仍然能够通过网关访问到集群A的A、B两个服务,且该切流动作自动发生,无需人工干涉。
步骤一:在云原生网关中添加容器服务来源
登录MSE网关管理控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择云原生网关 > 网关列表,单击目标网关名称。
在左侧导航栏,选择路由管理,然后选择来源页签。
单击创建来源。在创建来源面板,配置相关参数,然后单击确定。具体操作,请参见创建服务来源。
步骤二:在云原生网关中分别添加服务A与B
在左侧导航栏,选择路由管理,然后选择服务页签。
单击创建服务。在创建服务面板,配置服务相关参数,然后单击确定。具体操作,请参见创建服务
步骤三:在云原生网关中为目标服务添加路由配置
在左侧导航栏,单击路由管理,然后选择路由页签。
单击创建路由。在创建路由页面,配置相关参数,然后单击保存并上线。具体操作,请参见创建路由。
结果验证
当集群A、B正常时
在服务列表页面查看服务地址。
可观察到服务地址中有两条记录。
多次访问网关,创造访问日志。具体代码如下所示。
while :; do curl http://<网关SLB地址>/test ; done
在网关日志中进行查询分析。
登录MSE网关管理控制台。
在左侧导航栏,选择云原生网关 > 网关列表,并在顶部菜单栏选择地域。
在网关列表页面,单击目标网关名称。
在左侧导航栏,单击观测分析 > 日志中心。在页面右上角,选择SLS日志服务。
通过分组查询可以查看upstream_host对应ACK集群上的服务地址。此时,upstream_host取值有两个,两个ACK集群均分了访问该服务的流量。
当集群A异常时
在集群A中删除httpbin服务。
此时,服务地址只有一条记录。
多次访问网关,创建访问日志。具体代码如下所示。
while :; do curl http://<网关SLB地址>/test ; done
在网关日志中进行查询分析。
登录MSE网关管理控制台。
在左侧导航栏,选择云原生网关 > 网关列表,并在顶部菜单栏选择地域。
在网关列表页面,单击目标网关名称。
在左侧导航栏,单击观测分析 > 日志中心。在页面右上角,选择SLS日志服务。
通过分组查询可以观察到此时upstream_host取值仅有一个,是集群B的服务地址。该现象表明网关将全部流量切到了集群B上。