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組件。
已在Alibaba Cloud DNS控制台開通雲解析PrivateZone。
啟用PrivateZone
修改eci-profile的配置,啟用PrivateZone。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
選擇命名空間為kube-system,找到eci-profile,然後單擊對應的編輯。
將
enablePrivateZone的值改為true,然後單擊確定。
確認已啟用PrivateZone。
在Alibaba Cloud DNS控制台的左側導覽列,單擊內網網域名稱解析。
在內建權威頁簽的使用者網域名稱頁簽下,確認已產生名稱為svc.cluster.local.<叢集ID>的Zone。
同步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中。
在Alibaba Cloud 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。