使用ASM远程控制面降低推送延迟

ASM支持部署远程控制面,您可以选择将控制面组件部署至您的非阿里云集群中,使得该集群中的网格代理可以直连远程控制面,提升配置推送效率,降低推送延迟。本文介绍如何部署远程控制面。

背景信息

数据面集群均基于阿里云VPC构建时,数据面工作负载可以通过阿里云VPC网络直连ASM托管控制面,网络延迟低,控制面配置下发顺畅,无需使用远程控制面能力。

当数据面集群位于其他云服务或线下数据中心,与ASM控制面通过公网或其他特殊方式连通,并且连通的网络环境不稳定或带宽受限。此时推荐使用ASM远程控制面来降低推送延迟。

远程控制面对整体架构如下:

image

如果所有非ACK集群中的Pod都直连托管ASM控制面,这意味着托管控制面和非ACK集群之间的网络连接数量以及带宽占用将与Pod数量正相关。此时如果频繁发生配置或服务变更,容易出现推送延迟的问题。

使用ASM远程控制面能力后,远程控制面为集群的网格代理推送配置。ASM控制面和非ACK集群之间将只有少量的用于控制面组件下发和服务发现的网络连接,这种方式能将大程度减少对于低延迟、高带宽网络环境的需求,提升配置推送效率。

ASM远程控制面使用注意事项

  • 使用ASM远程控制面后,服务网格相关Kubernetes资源必须使用ASM的kubeconfig创建。如果使用远程集群的kubeconfig,该资源有被覆盖的风险。

  • ASM提供了全局的服务发现。即被ASM托管控制面管理的工作负载可以访问被远程控制面管理的服务,并且默认使用mTLS通信,支持ASM的东西向网关。

  • ASM远程控制面与通过数据面KubeAPI访问Istio资源功能冲突。开启远程控制面之前,请确保该功能处于关闭状态。

前提条件

步骤一:开启远程控制面能力

  1. 使用ASM实例的kubeconfig,执行以下命令修改集群中的ASMMeshConfig资源。

    kubectl edit ASMMeshconfig
  2. 将以下内容中的.spec.externalIstiodConfigurations配置到ASMMeshConfig中。

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: ASMMeshConfig
    metadata:
      name: default
    spec:
      ......
      externalIstiodConfigurations:
        ${cluster-2的集群ID}:
          replicas: 2
          # 这里也支持resources配置,和Pod的资源配置字段结构相同,为空时使用ASM提供的默认配置
    说明

    切换为远程控制面后,该集群中的ASM网关会重启,请评估后再进行操作。

步骤二:部署应用并进行测试

  1. 部署sleep应用和httpbin应用到cluster-2。具体应用部署步骤,请参见部署httpbin应用

  2. 使用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状态。

  3. 执行以下命令,从sleep应用访问httpbin。

    kubectl exec deploy/sleep -it -- curl httpbin:8000/status/418

    预期输出:

        -=[ teapot ]=-
    
           _...._
         .'  _ _ `.
        | ."` ^ `". _,
        \_;`"---"`|//
          |       ;/
          \_     _/
            `"""`

步骤三:集群互相访问说明

被托管控制面管理的工作负载默认可以访问到远程控制面的服务,远程控制面的服务默认不可以访问托管控制面的服务。