Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Configure o CoreDNS não gerenciado

Última atualização: Sep 21, 2026

O CoreDNS é o servidor de Domain Name System (DNS) padrão dos clusters do Container Service for Kubernetes (ACK). Este tópico apresenta os plug-ins fornecidos pelo CoreDNS e como configurá-los em diversos cenários.

Pré-requisitos

Cenários de uso

Neste tópico, usamos como exemplo um pod que utiliza o CoreDNS para resolução de DNS. dnsPolicy: ClusterFirst é especificado na configuração da política de DNS do pod. Exemplo:

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

Para obter mais informações, consulte Configurar resolução de DNS e defina o parâmetro dnsPolicy de acordo com o cenário.

Configurações padrão do CoreDNS

No namespace kube-system, você pode encontrar um ConfigMap do CoreDNS. O CoreDNS configura e ativa os plug-ins especificados no ConfigMap. Os ConfigMaps de diferentes versões do CoreDNS apresentam pequenas diferenças. Leia a documentação oficial do CoreDNS antes de modificar as configurações. O bloco de código a seguir mostra o conteúdo do arquivo de configuração padrão usado pelo CoreDNS 1.6.2:

  Corefile: |
    .:53 {
        errors
        log
        health {
           lameduck 15s
        }
        ready
        kubernetes {{.ClusterDomain}} in-addr.arpa ip6.arpa {
          pods verified
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . /etc/resolv.conf {
              prefer_udp
        }
        cache 30
        loop
        reload
        loadbalance
    }
Nota

Substitua ClusterDomain pelo nome de domínio do cluster que você especificou ao criar o cluster. O nome de domínio padrão do cluster é cluster.local.

Parâmetro

Descrição

errors

Imprime erros na saída padrão (stdout).

health

Gera relatórios de verificação de integridade para o CoreDNS. A porta de escuta padrão é a 8080. Este plug-in avalia o status de integridade do CoreDNS. Acesse http://localhost:8080/health para visualizar o relatório de verificação de integridade do CoreDNS.

ready

Relata o status dos plug-ins do CoreDNS. A porta de escuta padrão é a 8181. Este plug-in avalia a prontidão dos plug-ins do CoreDNS. Acesse http://localhost:8181/ready para visualizar a prontidão dos plug-ins do CoreDNS. Após todos os plug-ins entrarem no estado de execução, um código de resposta 200 é retornado para a prontidão dos plug-ins do CoreDNS.

kubernetes

O plug-in kubernetes do CoreDNS fornece resolução de DNS para services em um cluster do ACK.

prometheus

Exporta métricas do CoreDNS. Acesse http://localhost:9153/metrics para visualizar as métricas do CoreDNS no formato do Prometheus.

forward ou proxy

Encaminha consultas de DNS para o servidor de DNS predefinido. Por padrão, as consultas de DNS de nomes de domínio fora do domínio do cluster do Kubernetes são encaminhadas para o resolvedor de DNS predefinido (/etc/resolv.conf). As configurações padrão baseiam-se no arquivo /etc/resolv.conf do host.

cache

Ativa o cache de DNS.

loop

Executa a detecção de loop. Se um loop for detectado, o CoreDNS será suspenso.

reload

Permite o recarregamento automático de um Corefile alterado. Ao editar o ConfigMap, aguarde 2 minutos para que as alterações entrem em vigor.

loadbalance

Funciona como um balanceador de carga de DNS round-robin para randomizar a ordem dos registros A, AAAA e MX na resposta.

multisocket

O CoreDNS v1.12.1 introduz o plug-in multisocket para melhorar o desempenho em ambientes com alto uso de CPU. Quando ativado, este plug-in permite que o CoreDNS escute na mesma porta usando vários sockets simultaneamente. Para obter instruções detalhadas, consulte Práticas recomendadas de DNS.

Configure recursos estendidos com base no CoreDNS

Você pode configurar recursos estendidos com base no CoreDNS nos cenários a seguir:

  • Cenário 1: Ative a coleta de logs

    Para coletar os logs de todos os registros de resolução de DNS realizados pelo CoreDNS, ative o plug-in de log adicionando o parâmetro log ao Corefile. Exemplo:

      Corefile: |
        .:53 {
            errors
            log
            health {
               lameduck 15s
            }
            ready
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . /etc/resolv.conf {
                  prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
  • Cenário 2: Personalize servidores de DNS para nomes de domínio específicos

    Se os nomes de domínio com o sufixo example.com precisarem ser resolvidos por um servidor de DNS personalizado (por exemplo, o servidor de DNS 10.10.0.10), adicione uma configuração de resolução personalizada para esses nomes de domínio. Exemplo:

    example.com:53 {
      errors
      cache 30
      forward . 10.10.0.10 {
      prefer_udp
      }
    }

    O bloco de código a seguir mostra a configuração completa do Corefile:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . /etc/resolv.conf {
              prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
        example.com:53 {
            errors
            cache 30
            forward . 10.10.0.10 {
            prefer_udp
            }
        }
  • Cenário 3: Personalize servidores de DNS para nomes de domínio externos

    Se os nomes de domínio que precisam ser resolvidos por servidores de DNS personalizados não compartilharem o mesmo sufixo, use servidores de DNS personalizados para realizar a resolução de DNS de todos os nomes de domínio externos. Nesse cenário, encaminhe os nomes de domínio que não podem ser resolvidos pelos servidores de DNS personalizados para o Alibaba Cloud DNS. Não modifique os arquivos /etc/resolv.conf nas instâncias do Elastic Compute Service (ECS) do cluster do ACK. Por exemplo, se os endereços IP dos servidores de DNS personalizados forem 10.10.0.10 e 10.10.0.20, modifique o parâmetro forward. Exemplo:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . 10.10.0.10 10.10.0.20 {
              prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
  • Cenário 4: Personalize hosts para nomes de domínio específicos

    Configure o plug-in hosts se desejar personalizar hosts para nomes de domínio específicos. Por exemplo, pode ser necessário apontar www.example.com para 127.0.0.1. Exemplo:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            
            hosts {
              127.0.0.1 www.example.com
              fallthrough
            }
          
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . /etc/resolv.conf {
              prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
    Importante

    É obrigatório especificar fallthrough. Caso contrário, a resolução de nomes de domínio diferentes do especificado poderá falhar.

  • Cenário 5: Ative o acesso externo a services em um cluster do ACK

    Para permitir que um processo em uma instância do ECS em um cluster do ACK acesse services no cluster, especifique o endereço IP do cluster do kube-dns no cluster como o valor do parâmetro nameserver no arquivo /etc/resolv.conf da instância do ECS. Não modifique outras configurações no arquivo /etc/resolv.conf.

    Em uma rede interna, use uma instância do Server Load Balancer (SLB) voltada para a rede interna para permitir o acesso interno aos services no cluster do ACK. Em seguida, faça login no console do Alibaba Cloud DNS PrivateZone e adicione um registro A que aponte para o endereço IP privado da instância do SLB.

  • Cenário 6: Use um nome de domínio para permitir o acesso ao seu service em um cluster do ACK ou ative a resolução CNAME para um cluster do ACK

    Use foo.example.com para permitir todo o acesso ao seu service em um cluster do ACK a partir da Internet, de redes internas e de dentro de um cluster do ACK. A seção a seguir descreve como ativar esse recurso:

    • O seu service foo.default.svc.cluster.local é exposto ao acesso externo por meio de uma instância do SLB voltada para a Internet. O nome de domínio foo.example.com é resolvido para o endereço IP da instância do SLB voltada para a Internet.

    • O seu service foo.default.svc.cluster.local é exposto ao acesso interno por meio de uma instância do SLB voltada para a rede interna. Faça login no console do Alibaba Cloud DNS PrivateZone para apontar foo.example.com para o endereço IP da instância do SLB voltada para a rede interna na virtual private cloud (VPC) onde o cluster do ACK está implantado. Para obter mais informações sobre o procedimento, consulte Cenário 4: Personalize hosts para nomes de domínio específicos.

    • Dentro do cluster do ACK, use o plug-in rewrite para adicionar um registro CNAME que aponte foo.example.com para foo.default.svc.cluster.local. Exemplo:

        Corefile: |
          .:53 {
              errors
              health {
                 lameduck 15s
              }
              ready
              
              rewrite stop {
                name exact foo.example.com foo.default.svc.cluster.local
                answer name foo.default.svc.cluster.local foo.example.com 
              }
      
              kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
                ttl 30
              }
              prometheus :9153
              forward . /etc/resolv.conf {
                prefer_udp
              }
              cache 30
              loop
              reload
              loadbalance
          }
  • Cenário 7: Configure o CoreDNS para não retornar endereços IPv6 resolvidos com base em registros AAAA

    Se os pods da sua aplicação não precisarem de resultados de resolução baseados em registros AAAA, configure o CoreDNS para interceptar esses resultados e retornar um código NODATA. Isso minimiza a transferência de dados. Exemplo:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            # Add the following line to enable the template plug-in. Do not modify other settings. 
            template IN AAAA .
        
        }
  • Cenário 8: Ative o recurso MCS do ACK One

    Nota

    O CoreDNS 1.9.3 ou posterior oferece suporte ao recurso de multi-cluster Services (MCS) do Distributed Cloud Container Platform for Kubernetes (ACK One). Para ativar esse recurso, certifique-se de ter atualizado o CoreDNS para a versão 1.9.3 ou posterior. Para obter mais informações, consulte Configurar o ACK para atualizar automaticamente o CoreDNS e Atualizar manualmente o CoreDNS.

    1. Execute o comando a seguir para atualizar o ConfigMap do CoreDNS:

      kubectl edit configmap/coredns -n kube-system
    2. Adicione uma linha acima da linha que começa com kubernetes e especifique multicluster clusterset.local na nova linha para ativar o plug-in multicluster, que é usado para ativar o recurso MCS do ACK One. Essa configuração define os sufixos dos nomes de domínio dos multi-cluster Services como clusterset.local.

      Corefile: |
          .:53 {
              # Irrelevant lines are not shown. 
              # Add the following line. 
              multicluster clusterset.local
              kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
                ttl 30
              }
              # Irrelevant lines are not shown. 
          }
    3. Pressione Esc, insira :wq! e pressione Enter. Salve o arquivo e saia do modo de edição.

  • Cenário 9: Especifique diferentes servidores de DNS upstream para domínios externos

    Pré-requisitos

    CoreDNS versão 1.11.3 ou posterior.

    Configuração

    Defina várias diretivas forward dentro de um único bloco de servidor. Cada diretiva pode especificar um servidor de DNS upstream diferente para um domínio específico. Para obter uma lista completa de parâmetros, consulte a documentação oficial do plug-in forward.

    Exemplo

    Corefile: |
        .:53 {
            # ... other configurations ...
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            # Forward queries for foo.com to DNS server 10.20.0.1
            forward foo.com 10.20.0.1
            # Forward queries for bar.com to DNS server 10.30.0.1
            forward bar.com 10.30.0.1
            # Forward all other queries to the DNS servers specified in the node's /etc/resolv.conf
            forward . /etc/resolv.conf
            # ... other configurations ...
        }