Os nós virtuais do ACK oferecem suporte à descoberta de serviço por meio do Alibaba Cloud DNS PrivateZone. Esse recurso sincroniza registros DNS de serviços Headless, ClusterIP e LoadBalancer interno com o PrivateZone. Este tópico descreve como ativar o PrivateZone para sincronizar registros DNS de Services associados a Pods ECI, permitindo acessá-los pelos respectivos nomes de domínio.
Informações básicas
O Alibaba Cloud DNS PrivateZone (resolução de DNS interna) é um serviço de DNS projetado para redes privadas, como as Virtual Private Clouds (VPCs) da Alibaba Cloud. Ele permite que clientes na sua VPC, como instâncias ECS e contêineres, resolvam nomes de domínio privados e acelera o processo de resolução. O PrivateZone é um serviço pago. Para mais informações, consulte Faturamento do produto.
Pré-requisitos
O componente ack-virtual-node deve estar instalado no cluster. Para mais informações, consulte Implantar o componente ack-virtual-node.
Este recurso não é compatível com o CoreDNS. Verifique se o componente CoreDNS não está instalado no cluster.
O Alibaba Cloud DNS PrivateZone deve estar ativado no console do Alibaba Cloud DNS.
Ative o PrivateZone
-
Modifique o ConfigMap eci-profile para ativar o PrivateZone.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, clique em .
Na lista suspensa Namespace, selecione kube-system. Localize o ConfigMap eci-profile e clique em Edit na coluna Actions.
Altere o valor de
enablePrivateZoneparatruee clique em OK.
-
Confirme se o PrivateZone está ativado.
No painel de navegação à esquerda do console do Alibaba Cloud DNS, clique em Private Zone.
Na aba Authoritative Zone, clique na aba User Defined Zones. Verifique se uma zona chamada svc.cluster.local.<cluster-id> foi criada.
Sincronizar registros DNS de Service com o PrivateZone
-
Crie um Deployment e Services para teste.
-
Salve o conteúdo YAML a seguir como test-pz.yaml.
Este manifesto cria um Deployment e três Services dos tipos Headless, ClusterIP e LoadBalancer interno.
ImportantePor padrão, os registros DNS de Service não são sincronizados. Para ativar a sincronização de um Service específico, adicione a anotação
service.beta.kubernetes.io/alibaba-cloud-private-zone-enable: "true"ao manifesto correspondente. O controlador de nó virtual sincronizará automaticamente os registros DNS com o 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" # Add this label to schedule the Pod on ECI. spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 -
Crie o Deployment e os Services.
kubectl create -f test-pz.yaml
-
-
Verifique se os registros DNS de Service foram sincronizados com o PrivateZone.
No painel de navegação à esquerda do console do Alibaba Cloud DNS, clique em Private Zone.
Na aba Authoritative Zone, clique na aba User Defined Zones. Localize a zona chamada svc.cluster.local.<cluster-id> e clique em Settings na coluna Actions.
-
Na aba Settings, verifique se os registros DNS de Service foram sincronizados automaticamente.
Os registros DNS na zona usam o formato
<service-name>.<namespace>e apontam para os endereços IP correspondentes. As regras de resolução são:Headless Service: corresponde a vários registros DNS, um para cada endereço IP de Pod de backend.
ClusterIP Service: corresponde a um único registro DNS que aponta para o IP do cluster. O cluster atribui esse endereço IP virtual ao Service para comunicação interna.
Serviço de LoadBalancer interno: corresponde a um único registro DNS que aponta para o endereço IP da instância interna do Server Load Balancer (SLB).
Após a sincronização dos registros, acesse os Services de dentro da VPC usando os nomes de domínio privados correspondentes.
Acesso por nome de domínio curto: dentro do cluster, use
<service-name>para acessar um Service no mesmo namespace ou<service-name>.<namespace>para um Service em outro namespace.Acesso por nome de domínio totalmente qualificado (FQDN): fora do cluster, mas na mesma VPC, use
<service-name>.<namespace>.svc.cluster.local.<cluster-id>para acessar um Service. Este método aplica-se apenas a Headless Services.