通过ASM管理ACK云盒节点上的工作负载

云盒(CloudBox)是将阿里云公共云的计算、存储、网络等基础设施以软硬一体方式,延伸部署到您的本地机房,满足数据安全、数据本地处理、低延时等业务需求的全托管云服务。您可以在ACK集群中创建云盒节点池,将业务Pod调度至云盒节点上来使用云盒资源。将ACK集群添加至ASM后,ASM将同时管理公共云和云盒节点池中的Pod,为应用之间的流量提供丰富、统一的路由、安全以及可观测能力。本文介绍如何使用ASM管理带有云盒节点池的ACK集群。

前提条件

步骤一:部署入口网关

云盒节点池对于Service有特殊限制:

  • 云盒内LoadBalancer类型的Service只支持挂载云盒ECS实例,公共云LoadBalancer类型的Service只支持挂载公共云ECS实例。

  • 位于云盒内的CLB不支持挂载EIP,即无法在云盒内创建一个公网CLB。

所以当您部署LoadBalancer类型的ASM入口网关时,需要确保网关CLB和网关Pod同时处于公共云可用区或云盒可用区。

说明

ASM网关支持使用serviceAnnotations字段配置CLB可用区,支持使用nodeSelectoraffinity字段配置网关Pod调度策略。

本示例中,我们在云盒可用区内创建一个ASM网关,通过serviceAnnotations指定网关CLB的可用区,通过nodeSelector指定网关Pod的可用区,具体YAML如下所示。

apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:   
  name: ingressgateway
  namespace: "istio-system"
spec:  
  clusterIds:
    - ${ACK Cluster ID}
  externalTrafficPolicy: Local
  gatewayType: ingress
  ports:  
  - name: http
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 443
  replicaCount: 2
  resources:
    limits:
      cpu: '2'
      memory: 2G
    requests:
      cpu: 200m
      memory: 256Mi
  serviceType: LoadBalancer  
  serviceAnnotations:    
    service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id: ${云盒资源所在虚拟机交换机ID}
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-master-zoneid: ${云盒资源所在可用区ID}
  nodeSelector:
    topology.kubernetes.io/zone: ${云盒资源所在可用区ID}
  rollingMaxSurge: "100%"
  rollingMaxUnavailable: "25%"

您可以将上述YAML保存在本地文件中,使用ASM的kubeconfig创建该网关资源,也可以使用ASM控制台通过YAML创建ASM网关。具体操作,请参见示例一:使用KubeAPI管理入口网关

步骤二:部署应用并配置网关规则

由于步骤一中创建的是一个私有网关,无法直接通过公网访问。请确保您当前环境可以访问VPC网络之后,再执行测试命令。

执行操作步骤,在使用云盒节点的ACK集群中部署httpbin应用和网关规则,并进行测试验证。