Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Configure pod DNS policies and domain name resolution

Última atualização: Jun 27, 2026

Defina dnsPolicy para controlar o comportamento de DNS do pod e use hostAliases para mapear domínios a IPs fixos.

Pré-requisitos

Funcionamento do CoreDNS no ACK

O ACK implanta o CoreDNS em todos os clusters. Um Service chamado kube-dns o expõe para consultas de DNS dos pods. Por padrão, dois pods coredns atuam como backend.

Inspecione os componentes de DNS no cluster:

# Check the kube-dns Service
kubectl get svc kube-dns -n kube-system

# Check the coredns Deployment
kubectl get deployment coredns -n kube-system

Consulte Visão geral do DNS.

Defina uma política de DNS para um pod

A dnsPolicy controla como o pod resolve nomes de domínio. O ACK oferece suporte a quatro políticas:

Política

Comportamento

ClusterFirst

O pod usa o CoreDNS. O arquivo /etc/resolv.conf aponta para o Service kube-dns. Política padrão.

None

O pod ignora as configurações de DNS do cluster. Use dnsConfig para definições personalizadas; sem ela, nenhum nome é resolvido.

Default

O pod herda as configurações de DNS do nó. No ACK, os nós são instâncias ECS, portanto o pod usa o /etc/resolv.conf do nó, que aponta para o DNS da Alibaba Cloud. O CoreDNS é ignorado.

ClusterFirstWithHostNet

Destinada a pods com hostNetwork. Sem esta política, um pod hostNetwork assume o valor Default e não consegue alcançar os Services do cluster.

A política Default não é a configuração padrão. Se você omitir a dnsPolicy , o pod usará ClusterFirst .

Use o CoreDNS para resolver nomes de domínio

Use ClusterFirst (padrão) quando os pods precisarem acessar outros Services do cluster.

Defina dnsPolicy: ClusterFirst na especificação do pod:

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine
  dnsPolicy: ClusterFirst

Aplique o manifesto e verifique a resolução de DNS:

kubectl apply -f pod.yaml

# Verify that the pod resolves cluster Services correctly
kubectl exec alpine -- nslookup kubernetes.default

Personalize as configurações de DNS de um pod

Use dnsPolicy: None para ter controle total sobre o servidor DNS e os domínios de busca do pod.

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine
  dnsPolicy: None
  dnsConfig:
    nameservers: ["169.254.xx.xx"]
    searches:
    - default.svc.cluster.local
    - svc.cluster.local
    - cluster.local
    options:
    - name: ndots
      value: "2"

O campo dnsConfig aceita as seguintes propriedades:

  • nameservers: IPs dos servidores DNS para o pod. Aceita até três endereços. Obrigatório quando dnsPolicy for None; opcional nos demais casos. Os valores são mesclados aos nameservers gerados pela política, e as duplicatas são removidas.

  • searches: Domínios de busca DNS para consulta de hostnames. Campo opcional com limite de seis entradas. Mescla-se aos domínios de busca gerados pela política, eliminando duplicatas. Caso o servidor DNS esteja inacessível, apenas o primeiro domínio é tentado.

  • options: Objetos contendo um name obrigatório e um value opcional. São mesclados às opções geradas pela política, com remoção de duplicatas. Consulte Políticas de resolução e cache de DNS.

Aplique o manifesto e verifique a configuração:

kubectl apply -f pod.yaml

# Check the DNS configuration inside the pod
kubectl exec alpine -- cat /etc/resolv.conf

Consulte DNS para Services e Pods.

Use as configurações de DNS do nó

Use dnsPolicy: Default quando os pods não precisarem dos Services do cluster e devam resolver nomes via DNS da Alibaba Cloud em vez do CoreDNS.

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine
  dnsPolicy: Default

Aplique o manifesto e valide a configuração:

kubectl apply -f pod.yaml

# Confirm the pod inherits the node's resolv.conf
kubectl exec alpine -- cat /etc/resolv.conf

Permita que pods hostNetwork acessem Services do cluster

Pods configurados com hostNetwork: true assumem por padrão a política de DNS Default, o que impede o acesso aos Services do cluster por nome. Defina dnsPolicy: ClusterFirstWithHostNet para restaurar a resolução de DNS do cluster.

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  hostNetwork: true
  dnsPolicy: ClusterFirstWithHostNet
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine

Aplique o manifesto e verifique o funcionamento:

kubectl apply -f pod.yaml

# Verify that the pod resolves cluster Services correctly
kubectl exec alpine -- nslookup kubernetes.default

Mapeie nomes de domínio para endereços IP específicos

Há dois métodos disponíveis:

  • Todos os pods (global): Ative o plugin hosts do CoreDNS para aplicar o mapeamento em todo o cluster. Consulte Configurar recursos estendidos com base no CoreDNS.

  • Pod individual: Use o campo hostAliases para adicionar entradas ao arquivo /etc/hosts desse pod específico.

Adicione aliases de host a um pod

O campo hostAliases insere entradas no arquivo /etc/hosts do pod após a inicialização pelo Kubernetes.

Aviso

Não edite o arquivo /etc/hosts diretamente. O kubelet gerencia esse arquivo e sobrescreve alterações manuais sempre que o pod é iniciado ou reiniciado.

apiVersion: v1
kind: Pod
metadata:
  name: hostaliases-pod
spec:
  hostAliases:
  - ip: "127.0.**.**"
    hostnames:
    - "foo.local"
    - "bar.local"
  - ip: "10.1.**.**"
    hostnames:
    - "foo.remote"
  containers:
  - name: cat-hosts
    image: busybox:1.28
    command:
    - cat
    args:
    - "/etc/hosts"

Após a inicialização, o arquivo /etc/hosts contém as entradas gerenciadas pelo Kubernetes seguidas pelos seus aliases:

# Kubernetes-managed hosts file.
127.0.**.**	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
10.200.**.**	hostaliases-pod

# Entries added by HostAliases.
127.0.**.**	foo.local	bar.local
10.1.**.**	foo.remote

Aplique o manifesto e confirme que os aliases resolvem corretamente:

kubectl apply -f hostaliases-pod.yaml

# Check that the aliases appear in /etc/hosts
kubectl exec hostaliases-pod -- cat /etc/hosts

# Verify resolution
kubectl exec hostaliases-pod -- nslookup foo.local

Próximos passos