O CoreDNS é o servidor padrão de Domain Name System (DNS) dos clusters do Container Service for Kubernetes (ACK). Este tópico apresenta os plug-ins do CoreDNS e como configurá-los em diversos cenários.
Pré-requisitos
Cenários de uso
Este tópico usa como exemplo um pod que utiliza o CoreDNS para resolução de DNS. A política de DNS do pod define dnsPolicy: ClusterFirst. Exemplo:
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: ClusterFirst
Para mais informações sobre como definir o parâmetro dnsPolicy em diferentes situações, consulte Configure resolução de DNS.
Configurações padrão do CoreDNS
O namespace kube-system contém um ConfigMap do CoreDNS. O CoreDNS configura e ativa os plug-ins especificados nesse ConfigMap. Os ConfigMaps variam ligeiramente entre as versões do CoreDNS. Leia a documentação oficial do CoreDNS antes de modificar as configurações. O bloco de código a seguir exibe o conteúdo do arquivo de configuração padrão do 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 especificado durante a criação. 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 é 8080. Este plug-in avalia o estado de integridade do CoreDNS. Acesse |
|
ready |
Reporta o status dos plug-ins do CoreDNS. A porta de escuta padrão é 8181. Este plug-in avalia a prontidão dos plug-ins. Acesse |
|
kubernetes |
O plug-in kubernetes do CoreDNS fornece resolução de DNS para serviços em um cluster ACK. |
|
prometheus |
Exporta métricas do CoreDNS. Acesse |
|
forward ou proxy |
Encaminha consultas DNS para o servidor DNS predefinido. Por padrão, consultas DNS de nomes de domínio fora do domínio de cluster do Kubernetes são encaminhadas para o resolvedor 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 |
Detecta loops. Se detectar um loop, o CoreDNS será suspenso. |
|
reload |
Permite o recarregamento automático de um Corefile alterado. Após editar o ConfigMap, aguarde 2 minutos para que as alterações entrem em vigor. |
|
loadbalance |
Funciona como um balanceador de carga 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, esse plug-in permite que o CoreDNS escute na mesma porta usando múltiplos sockets simultaneamente. Para instruções detalhadas, consulte Melhores práticas de DNS. |
Configure recursos estendidos baseados no CoreDNS
Configure recursos estendidos baseados no CoreDNS nos seguintes cenários:
-
Cenário 1: Ativar coleta de logs
Para coletar logs de todos os registros de resolução de DNS do 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: Personalizar servidores DNS para nomes de domínio específicos
Se nomes de domínio com sufixo example.com precisarem ser resolvidos por um servidor DNS personalizado (por exemplo, servidor DNS 10.10.0.10), adicione uma configuração de resolução personalizada para esses domínios. 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: Personalizar servidores DNS para nomes de domínio externos
Se os nomes de domínio que precisam ser resolvidos por servidores DNS personalizados não compartilharem o mesmo sufixo, utilize servidores DNS personalizados para resolver todos os nomes de domínio externos. Nesse cenário, encaminhe os nomes de domínio que os servidores DNS personalizados não puderem resolver para o Alibaba Cloud DNS. Não modifique os arquivos /etc/resolv.conf nas instâncias do Elastic Compute Service (ECS) do cluster ACK. Por exemplo, se os endereços IP dos servidores 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: Personalizar hosts para nomes de domínio específicos
Configure o plug-in hosts para personalizar entradas de host 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 }ImportanteEspecifique fallthrough. Caso contrário, a resolução de nomes de domínio diferentes do especificado poderá falhar.
-
Cenário 5: Permitir acesso externo a serviços em um cluster ACK
Para permitir que um processo em uma instância ECS dentro de um cluster ACK acesse serviços no cluster, defina o endereço IP do cluster do kube-dns como valor do parâmetro
nameserverno arquivo /etc/resolv.conf da instância ECS. Não altere outras configurações no arquivo /etc/resolv.conf.Em uma rede interna, utilize uma instância de Server Load Balancer (SLB) voltada para a rede interna para permitir acesso interno aos serviços do cluster 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 SLB.
-
Cenário 6: Usar um nome de domínio para permitir acesso ao seu serviço em um cluster ACK ou ativar resolução CNAME para um cluster ACK
Use foo.example.com para permitir todo o acesso ao seu serviço em um cluster ACK a partir da Internet, de redes internas e de dentro do próprio cluster ACK. A seção a seguir descreve como ativar esse recurso:
Seu serviço
foo.default.svc.cluster.localestá exposto a acesso externo por meio de uma instância SLB voltada para a Internet. O nome de domíniofoo.example.comresolve para o endereço IP da instância SLB voltada para a Internet.Seu serviço
foo.default.svc.cluster.localestá exposto a acesso interno por meio de uma instância 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 SLB voltada para a rede interna na Virtual Private Cloud (VPC) onde o cluster ACK está implantado. Para mais informações sobre o procedimento, consulte Cenário 4: Personalizar hosts para nomes de domínio específicos.-
Dentro do cluster 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 seus pods de 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: Ativar o recurso MCS do ACK One
NotaO CoreDNS 1.9.3 ou posterior oferece suporte ao recurso Multi-cluster Services (MCS) da 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 superior. Para mais informações, consulte Configure o ACK para atualizar automaticamente o CoreDNS e Atualize 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, usado para habilitar 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 para salvar o arquivo e sair do modo de edição.
-
-
Cenário 9: Especificar diferentes servidores DNS upstream para domínios externos
Pré-requisitos
CoreDNS versão 1.11.3 ou posterior.
Configuração
Defina múltiplas diretivas
forwarddentro de um único bloco de servidor. Cada diretiva pode especificar um servidor DNS upstream diferente para um domínio específico. Para obter a 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 ... }