Clusters ACS usam o CoreDNS como servidor DNS padrão para descoberta de serviços do Kubernetes. Instale e opere um CoreDNS não gerenciado para personalizar recursos de DNS no cluster ACS.
Cenários
Este tópico aplica-se apenas ao CoreDNS não gerenciado. As configurações do CoreDNS gerenciado não ficam visíveis para os usuários e não podem ser alteradas manualmente. Para CoreDNS gerenciado, consulte Configuração de política de DNS e resolução de nomes de domínio. Para instalar o CoreDNS não gerenciado, consulte Usar CoreDNS não gerenciado em um cluster ACS.
O exemplo a seguir usa um pod com dnsPolicy: ClusterFirst na configuração da política de DNS:
apiVersion: v1
kind: Pod
metadata:
name: alinux3
namespace: default
spec:
containers:
- image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alinux3
dnsPolicy: ClusterFirst
Para configure o parâmetro dnsPolicy para diferentes cenários, consulte Configure resolução de DNS.
Configurações padrão do CoreDNS
O ConfigMap do CoreDNS no namespace kube-system define quais plug-ins estão ativados. Os ConfigMaps variam ligeiramente entre as versões do CoreDNS. Antes de fazer alterações, revise a documentação oficial do CoreDNS. O exemplo a seguir mostra a 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 do cluster. Nome de domínio padrão do cluster: cluster.local.
|
Parâmetro |
Descrição |
|
|
Envia mensagens de erro para a saída padrão. |
|
|
Relata o status de integridade do CoreDNS. A porta de escuta padrão é 8080, geralmente usada para verificações de integridade. Obtenha o status de integridade em |
|
|
Informa o status de prontidão dos plug-ins do CoreDNS. A porta de escuta padrão é 8181, normalmente utilizada para verificações de prontidão. Consulte o status de prontidão em |
|
|
Fornece resolução de serviços dentro de um cluster Kubernetes. |
|
|
Disponibiliza um endpoint para métricas do CoreDNS. Acesse dados de monitoramento no formato Prometheus via |
|
|
Encaminha consultas de nomes de domínio para servidores DNS predefinidos. Por padrão, se um nome de domínio não pertencer ao domínio do Kubernetes, a consulta é encaminhada para o resolvedor em |
|
|
Cache de DNS. |
|
|
Detecta loops de encaminhamento. Caso um loop seja identificado, o CoreDNS para. |
|
|
Recarrega automaticamente o Corefile quando há alterações. Após editar o ConfigMap associado, as mudanças entram em vigor em até 2 minutos. |
|
|
Habilita o balanceamento de carga de DNS randomizando a ordem dos registros A, AAAA e MX nas respostas. |
Configure recursos estendidos com base no CoreDNS
Os cenários a seguir demonstram personalizações comuns do CoreDNS:
-
Cenário 1: Ative o Log Service simples
Para registrar todos os registros de resolução de DNS, adicione o parâmetro
logao 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
Para resolver nomes de domínio com um sufixo específico (como
example.com) por meio de um servidor DNS personalizado (como 10.10.0.10), adicione um bloco de resolução customizado. Exemplo:example.com:53 { errors cache 30 forward . 10.10.0.10 { prefer_udp } }Configuração:
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
Quando os nomes de domínio que exigem resolução de DNS personalizada não compartilham um sufixo comum, encaminhe todas as consultas externas para seus servidores DNS personalizados.
Por exemplo, para encaminhar consultas aos servidores DNS 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
Use o plug-in hosts para mapear nomes de domínio para endereços IP estáticos, de forma semelhante ao arquivo /etc/hosts. Por exemplo, para apontar
www.example.compara 127.0.0.1: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 o parâmetro
fallthroughem hosts. Caso contrário, nomes de domínio não listados podem falhar na resolução. -
Cenário 5: Ative 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
nameserverno arquivo/etc/resolv.confda instância ECS como o endereço IP do cluster do kube-dns. Não modifique outras configurações no arquivo/etc/resolv.conf.Para acesso à rede interna, use uma instância de Classic Load Balancer (CLB) voltada para a rede interna a fim de expor serviços no cluster ACS. 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 CLB.
-
Cenário 6: Usar um nome de domínio para permitir acesso ao seu serviço em um cluster ACK ou ative resolução CNAME para um cluster ACK
Use
foo.example.compara expor seu serviço em um cluster ACK à Internet, redes internas e acesso intra-cluster. Para ative isso:Seu serviço
foo.default.svc.cluster.localestá exposto a acessos externos usando uma instância CLB voltada para a Internet. O nome de domíniofoo.example.comé resolvido para o endereço IP da instância CLB voltada para a Internet.Seu serviço
foo.default.svc.cluster.localestá exposto a acessos internos usando uma instância CLB voltada para a rede interna. Acesse o console do Alibaba Cloud DNS PrivateZone para apontarfoo.example.compara o endereço IP da instância CLB voltada para a rede interna na virtual private cloud (VPC) onde o cluster ACK está implantado. Consulte Configure CoreDNS não gerenciado.-
Use o plug-in rewrite dentro do cluster ACK 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 não precisarem de resolução IPv6 (registro AAAA), configure o CoreDNS para interceptar essas consultas e retornar NODATA, reduzindo assim a transferência desnecessária 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 . }