ACK虚拟节点已支持基于云解析PrivateZone的服务发现功能,能够将Headless、ClusterIP和内网LoadBalancer类型Service的解析记录同步到PrivateZone。本文介绍如何启用PrivateZone,以及如何将ECI Pod绑定的Service的解析记录同步到PrivateZone,以便后续可以通过域名访问对应Service。
背景信息
云解析PrivateZone(内网DNS解析)是面向企业内网场景(主要为阿里云VPC内网场景)提供的完整DNS解析服务,可以为云上客户在VPC内网环境下的各种客户端(如ECS主机、容器)提供域名解析、内网域名解析加速等服务。使用PrivateZone会产生费用,具体请参见产品计费。
前提条件
集群中已安装ack-virtual-node组件。具体操作,请参见部署ack-virtual-node组件。
本功能不支持与CoreDNS混用,请确保集群中未安装CoreDNS组件。
已在云解析DNS控制台开通云解析PrivateZone。
启用PrivateZone
同步Service的解析记录到PrivateZone
创建用于测试的Deployment和Service。
将以下YAML内容,保存为test-pz.yaml。
以下YAML将创建1个Deployment和3个Service,其中Service的类型分别为Headless、ClusterIP和LoadBalancer。
重要Service的解析记录默认不会同步到PrivateZone。为Service添加
service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true"
的Annotation后,虚拟节点Controller才会把Service的解析记录同步到PrivateZone中。apiVersion: v1 kind: Service metadata: name: nginx-headless-service annotations: service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true" spec: ports: - port: 80 protocol: TCP selector: app: nginx clusterIP: None --- apiVersion: v1 kind: Service metadata: name: nginx-clusterip-service annotations: service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true" spec: ports: - port: 80 protocol: TCP selector: app: nginx type: ClusterIP --- apiVersion: v1 kind: Service metadata: name: nginx-intranet-service annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet" service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true" spec: ports: - port: 80 protocol: TCP selector: app: nginx type: LoadBalancer --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx alibabacloud.com/eci: "true" # 添加特定Lable将Pod调度到ECI spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80
创建Deployment和Service。
kubectl create -f test-pz.yaml
确认Service的解析记录已同步到PrivateZone中。
在云解析DNS控制台的左侧导航栏,单击内网域名解析。
在内置权威页签的用户域名页签下,找到名称为svc.cluster.local.<集群ID>的Zone,单击对应的解析设置。
在解析记录页签下,可以看到已自动同步Service的解析记录。
Zone中解析记录格式为
<service-name>.<namespace>
,对应相应的IP解析。解析规则如下:Headless Service:对应多条解析记录,分别为后端Pod的IP地址。
ClusterIP Service:对应一条解析记录,为Cluster IP(集群为该Service分配的一个虚拟IP地址,用于集群内部通信)。
LoadBalancer Service:对应一条解析记录,为Cluster IP(集群为该Service分配的一个虚拟IP地址,用于集群内部通信)。
同步后,您可以在VPC环境中通过私有域名访问Service。
短域名访问:在集群内通过
<service-name>
访问本Namespace下的Service,通过<service-name>.<namespace>
访问其他Namespace中的Service。长域名访问:在集群外通过
<service-name>.<namespace>.svc.cluster.local.<clusterId>
访问Service,仅适用于Headless Service。