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
É necessário ter criado um cluster gerenciado do ACK ou cluster do ACK Serverless.
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
}
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 |
|
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 |
|
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 |
|
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. |
|
|
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
nameserverno 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íniofoo.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 apontarfoo.example.compara 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.comparafoo.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
NotaO 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.
-
Execute o comando a seguir para atualizar o ConfigMap do CoreDNS:
kubectl edit configmap/coredns -n kube-system -
Adicione uma linha acima da linha que começa com
kubernetese especifiquemulticluster clusterset.localna 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 comoclusterset.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. } 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
forwarddentro 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 ... }