云盒(CloudBox)是将阿里云公共云的计算、存储、网络等基础设施以软硬一体方式,延伸部署到您的本地机房,满足数据安全、数据本地处理、低延时等业务需求的全托管云服务。您可以在ACK集群中创建云盒节点池,将业务Pod调度至云盒节点上来使用云盒资源。将ACK集群添加至ASM后,ASM将同时管理公共云和云盒节点池中的Pod,为应用之间的流量提供丰富、统一的路由、安全以及可观测能力。本文介绍如何使用ASM管理带有云盒节点池的ACK集群。
前提条件
已经创建了带有云盒节点池的ACK集群。具体操作,请参见在ACK集群中使用云盒资源。
已创建并添加ACK集群到ASM实例。具体操作,请参见已创建ASM实例和添加集群到ASM实例。
步骤一:部署入口网关
云盒节点池对于Service有特殊限制:
云盒内LoadBalancer类型的Service只支持挂载云盒ECS实例,公共云LoadBalancer类型的Service只支持挂载公共云ECS实例。
位于云盒内的CLB不支持挂载EIP,即无法在云盒内创建一个公网CLB。
所以当您部署LoadBalancer类型的ASM入口网关时,需要确保网关CLB和网关Pod同时处于公共云可用区或云盒可用区。
ASM网关支持使用serviceAnnotations字段配置CLB可用区,支持使用nodeSelector
、affinity
字段配置网关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应用和网关规则,并进行测试验证。