ASM支持部署远程控制面,您可以选择将控制面组件部署至您的非阿里云集群中,使得该集群中的网格代理可以直连远程控制面,提升配置推送效率,降低推送延迟。本文介绍如何部署远程控制面。
背景信息
数据面集群均基于阿里云VPC构建时,数据面工作负载可以通过阿里云VPC网络直连ASM托管控制面,网络延迟低,控制面配置下发顺畅,无需使用远程控制面能力。
当数据面集群位于其他云服务或线下数据中心,与ASM控制面通过公网或其他特殊方式连通,并且连通的网络环境不稳定或带宽受限。此时推荐使用ASM远程控制面来降低推送延迟。
远程控制面对整体架构如下:
如果所有非ACK集群中的Pod都直连托管ASM控制面,这意味着托管控制面和非ACK集群之间的网络连接数量以及带宽占用将与Pod数量正相关。此时如果频繁发生配置或服务变更,容易出现推送延迟的问题。
使用ASM远程控制面能力后,远程控制面为集群的网格代理推送配置。ASM控制面和非ACK集群之间将只有少量的用于控制面组件下发和服务发现的网络连接,这种方式能将大程度减少对于低延迟、高带宽网络环境的需求,提升配置推送效率。
ASM远程控制面使用注意事项
使用ASM远程控制面后,服务网格相关Kubernetes资源必须使用ASM的kubeconfig创建。如果使用远程集群的kubeconfig,该资源有被覆盖的风险。
ASM提供了全局的服务发现。即被ASM托管控制面管理的工作负载可以访问被远程控制面管理的服务,并且默认使用mTLS通信,支持ASM的东西向网关。
ASM远程控制面与通过数据面KubeAPI访问Istio资源功能冲突。开启远程控制面之前,请确保该功能处于关闭状态。
前提条件
已创建ASM实例,且实例版本在1.22及以上。具体操作,请参见创建ASM实例。
已添加两个数据面集群到ASM实例。具体操作,请参见添加集群到ASM实例。
cluster-1表示阿里云ACK集群,该集群中的网格代理可以和ASM控制面直连。
cluster-2表示外部注册集群或远程集群,该集群中的网格代理不可以直连ASM控制面,或者连接的网络环境受限。关于如何添加非阿里云集群到ASM实例,请参见通过ASM管理注册集群应用或管理通过Kubeconfig导入的Kubernetes集群。
步骤一:开启远程控制面能力
使用ASM实例的kubeconfig,执行以下命令修改集群中的ASMMeshConfig资源。
kubectl edit ASMMeshconfig
将以下内容中的
.spec.externalIstiodConfigurations
配置到ASMMeshConfig中。apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMMeshConfig metadata: name: default spec: ...... externalIstiodConfigurations: ${cluster-2的集群ID}: replicas: 2 # 这里也支持resources配置,和Pod的资源配置字段结构相同,为空时使用ASM提供的默认配置
说明切换为远程控制面后,该集群中的ASM网关会重启,请评估后再进行操作。
步骤二:部署应用并进行测试
部署sleep应用和httpbin应用到cluster-2。具体应用部署步骤,请参见部署httpbin应用。
使用cluster-2的kubeconfig,执行以下命令。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE httpbin-7df7fxxxxx-xxxxx 2/2 Running 0 3h15m sleep-6b7f9xxxxx-xxxxx 2/2 Running 0 3h15m
可以看到两个Pod中均被注入了Sidecar,并且处于Running状态。
执行以下命令,从sleep应用访问httpbin。
kubectl exec deploy/sleep -it -- curl httpbin:8000/status/418
预期输出:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
步骤三:集群互相访问说明
被托管控制面管理的工作负载默认可以访问到远程控制面的服务,远程控制面的服务默认不可以访问托管控制面的服务。
如果您不需要集群之间互相访问,可以使用集群内流量保持功能。具体操作,请参见多集群场景下启用ASM本地集群内流量保持功能。
如果您需要集群间相互访问,请参见实现远程控制面和托管控制面工作负载相互访问。