Utilize o parâmetro dnsPolicy para configurar políticas de DNS em pods de um cluster Container Compute Service (ACS).
Funcionamento da resolução de DNS no ACS
Em um cluster ACS, o CoreDNS é implantado na nuvem. O cluster utiliza o Service kube-dns para expor o CoreDNS, e as consultas de DNS originadas nos pods são encaminhadas ao servidor DNS definido na configuração do pod do CoreDNS. Para visualizar detalhes sobre o Service kube-dns, execute:
kubectl get svc kube-dns -n kube-system
Para obter mais informações sobre a resolução de DNS em clusters Kubernetes, consulte Visão geral do DNS.
Políticas de DNS
Os clusters ACS suportam quatro valores para dnsPolicy:
|
Política |
Descrição |
|
|
Padrão. Encaminha as consultas de DNS por meio do CoreDNS. O arquivo |
|
|
Ignora todas as configurações de DNS do cluster. Exige um bloco |
|
|
Utiliza o Alibaba Cloud DNS para resolução. O CoreDNS não é utilizado. |
|
|
Como os pods do ACS não suportam rede do host, esta política equivale a |
Configure uma política de DNS
Usar o CoreDNS (ClusterFirst)
Defina dnsPolicy: ClusterFirst para rotear as consultas de DNS do pod através do CoreDNS do cluster. Adote esta política quando os pods precisarem resolver Services implantados no mesmo cluster ACS.
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # Replace with the actual image you use.
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: ClusterFirst
Verificação: Após a inicialização do pod, verifique sua configuração de DNS:
kubectl exec alpine -- cat /etc/resolv.conf
A saída deve exibir o IP de cluster do kube-dns como nameserver.
Usar uma configuração de DNS personalizada (None)
Configure dnsPolicy: None e adicione um bloco dnsConfig para ter controle total sobre a resolução de DNS do pod. Esta opção é ideal quando os pods precisam utilizar um servidor DNS específico fora do cluster.
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # Replace with the actual image you use.
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: None
dnsConfig:
nameservers: ["169.254.xxx.xxx"]
searches:
- default.svc.cluster.local
- svc.cluster.local
- cluster.local
options:
- name: ndots
value: "2"
Campos do dnsConfig:
|
Campo |
Descrição |
|
|
Endereços IP dos servidores DNS para o pod. Aceita até três endereços. Quando o |
|
|
Domínios de busca de DNS para pesquisa de hostname. Opcional. Aceita até seis domínios. Tais domínios são anexados à lista de busca base gerada pela política de DNS, com remoção de duplicatas. |
|
|
Lista de opções do resolvedor de DNS. Cada item possui um |
Verificação: Depois que o pod iniciar, confirme a configuração de DNS gravada no contêiner:
kubectl exec alpine -- cat /etc/resolv.conf
Com a configuração de exemplo acima, a saída será semelhante a:
nameserver 169.254.xxx.xxx
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:2
Para consultar a especificação completa do dnsConfig, acesse DNS for Services and Pods.
Usar o Alibaba Cloud DNS (Default)
Defina dnsPolicy: Default caso os pods não precisem acessar outros Services no cluster ACS. Nesse cenário, o Alibaba Cloud DNS gerencia a resolução de nomes, sem uso do CoreDNS.
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # Replace with the actual image you use.
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: Default
Verificação: Após o início do pod, verifique se o nameserver aponta para o Alibaba Cloud DNS em vez do kube-dns:
kubectl exec alpine -- cat /etc/resolv.conf