Se os pods precisarem resolver nomes de host fora do Alibaba Cloud DNS — como domínios de registro de imagens privadas ou de aplicações internas — adicione a anotação network.alibabacloud.com/custom-dnsconfig para direcionar as consultas DNS a um servidor DNS auto-gerenciado. Essa anotação mescla nameservers personalizados, domínios de busca e opções no arquivo /etc/resolv.conf do pod durante a inicialização, sem substituir o comportamento padrão de DNS do cluster.
Quando usar este recurso
Use esta abordagem nos seguintes cenários:
|
Cenário |
Política de DNS |
Uso de DNS personalizado |
|
Cenário 1 |
|
Use |
|
Cenário 2 |
|
Use um servidor DNS auto-gerenciado para resolver nomes de domínio do registro de imagens |
|
Cenário 3 |
|
Use |
Não use esta abordagem nas situações abaixo:
Todos os domínios resolvidos pelo Alibaba Cloud DNS: Use a política de DNS
Default. Não configure servidores DNS personalizados.Domínios de aplicação em DNS auto-gerenciado e domínios de registro de imagens no Alibaba Cloud DNS: Defina a política de DNS como
Nonee especifique o campodnsConfigna especificação do pod. Consulte Personalizar configurações de DNS para um pod.
Como funciona
O valor da anotação segue a estrutura padrão spec.dnsConfig do Kubernetes. Na inicialização do pod, o ACS lê a anotação e integra as configurações personalizadas de DNS ao arquivo /etc/resolv.conf do pod:
Nameservers: O sistema insere os nameservers personalizados no início da lista e acrescenta o IP do servidor Alibaba Cloud DNS (
100.100.2.136) para que os pods continuem resolvendo domínios públicos.Domínios de busca e opções: O sistema combina esses itens com as definições da política de DNS ativa.
Na maioria dos casos, prefira usar acs-profile para aplicar configurações de DNS em todo o cluster em vez de adicionar anotações a pods individuais. Consulte Configuração de DNS em todo o cluster .
Configure um servidor DNS personalizado para um pod
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster ACS
kubectlconfigurado para conexão com o clusterUm servidor DNS auto-gerenciado e seu endereço ip
Adicionar a anotação a um pod
Adicione a anotação network.alibabacloud.com/custom-dnsconfig à seção metadata da configuração do pod. O valor da anotação é uma string JSON:
{
"servers": [
"20.1.xx.xx",
"30.1.xx.xx"
],
"searches": [
"xx.com",
"yy.com"
],
"options": [
"ndots:2",
"edns0"
]
}
|
Campo |
Tipo |
Limite |
Descrição |
|
|
|
Máximo de 2 endereços IP; os excedentes são ignorados |
Endereços IP dos servidores DNS personalizados. O sistema insere esses endereços no início da lista de nameservers e adiciona automaticamente o IP do servidor Alibaba Cloud DNS, permitindo que os pods ainda resolvam domínios públicos. |
|
|
|
Até 32 domínios de busca |
Domínios de busca anexados a nomes de host incompletos antes da resolução. Por exemplo, com |
|
|
|
— |
Opções de resolução DNS como pares chave-valor. O sistema combina essas opções com as da política de DNS ativa. Valores comuns: |
Defina dnsPolicy de acordo com o cenário. O Cenário 2 exige dnsPolicy: ClusterFirst.
Implantar uma carga de trabalho de teste
-
Crie um arquivo chamado
deploy.yamlcom o seguinte conteúdo:apiVersion: apps/v1 kind: Deployment metadata: labels: app: test name: test-default spec: replicas: 1 selector: matchLabels: app: test template: metadata: annotations: network.alibabacloud.com/custom-dnsconfig: '{"servers":["20.1.XXX.XXX","30.1.X.X"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}' labels: app: test spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2 command: ["sh","-c","i=1; while true; do echo $i; i=$((i=i+1)); sleep 1; done;"] name: busybox resources: requests: cpu: "2" memory: "8Gi" limits: cpu: "2" memory: "8Gi" dnsPolicy: Default -
Aplique a configuração:
kubectl apply -f deploy.yaml
Verifique a configuração de DNS
Verifique o arquivo /etc/resolv.conf do pod para confirmar se as configurações foram aplicadas corretamente:
kubectl exec <pod-name> -- cat /etc/resolv.conf
A saída esperada é:
search xx.com yy.com
nameserver 20.1.XXX.XXX
nameserver 30.1.XXX.XXX
nameserver 100.100.2.136
options ndots:6 edns
O endereço 100.100.2.136 corresponde ao servidor Alibaba Cloud DNS adicionado automaticamente pelo sistema.
Se o pod entrar no estado Pending e reportar um erro interno após a aplicação da configuração, valide se o JSON da anotação está correto e se todos os valores dos campos respeitam os limites estabelecidos.
Configuração de DNS em todo o cluster
Para aplicar configurações personalizadas de DNS a todos os pods de um namespace sem adicionar anotações individuais, configure a injeção automática de pods por meio do acs-profile.
O ConfigMap acs-profile a seguir injeta automaticamente a anotação de DNS personalizado em todos os pods do namespace default. Após a aplicação, os pods precisam apenas de dnsPolicy: Default — nenhuma anotação é necessária em cada pod.
apiVersion: v1
kind: ConfigMap
metadata:
name: acs-profile
namespace: kube-system
data:
selectors: |
[
{
"name": "selector-demo1",
"namespaceSelector": {
"matchLabels": {
"kubernetes.io/metadata.name": "default"
}
},
"effect": {
"annotations": {
"network.alibabacloud.com/custom-dnsconfig": "{\"servers\":[\"20.1.XXX.XXX\",\"30.1.X.X\"],\"searches\":[\"xx.com\",\"yy.com\"],\"options\":[\"ndots:2\",\"edns0\"]}"
}
}
}
]
Para obter detalhes completos sobre seletores e regras de injeção do acs-profile, consulte Configurar um acs-profile para injetar automaticamente configurações de pod.