Em ambientes de nuvem híbrida, o servidor DNS do cluster frequentemente não resolve nomes de domínio internos locais. Isso pode impedir que os pods baixem imagens de repositórios privados ou acessem serviços internos. Para resolver esse problema, adicione a anotação k8s.aliyun.com/eci-custom-dnsconfig à especificação do pod. O Elastic Container Instance (ECI) usa essa anotação para rotear consultas DNS pelo servidor DNS interno.
Configure um servidor DNS personalizado
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster Kubernetes em execução com um nó virtual (ECI habilitado)
O endereço IP do servidor DNS interno
Adicionar a anotação à especificação do pod
Adicione a anotação k8s.aliyun.com/eci-custom-dnsconfig em metadata.annotations no manifesto do pod ou Deployment. O valor da anotação é uma string JSON com os seguintes campos:
|
Campo |
Descrição |
|
|
Endereços IP dos servidores DNS. O sistema aceita no máximo 2 endereços IP e ignora automaticamente os excedentes. O Alibaba Cloud DNS é adicionado automaticamente ao final para garantir o funcionamento correto do sistema. |
|
|
Domínios de pesquisa. São permitidos no máximo 32 domínios. Se uma consulta usar um nome de domínio incompleto, o sistema anexa cada sufixo de domínio de pesquisa em sequência e tenta a resolução novamente. |
|
|
Opções de resolução DNS como pares chave-valor. Opções comuns: |
O campo options aceita as seguintes chaves:
ndots: número mínimo de pontos que um nome deve conter para ser tratado como nome de domínio absoluto. Nomes com menos pontos são testados primeiro em relação a cada domínio de pesquisa.edns0: habilita a extensão Extension Mechanisms for DNS (EDNS0) para pacotes UDP maiores e maior segurança.timeout: tempo limite para cada consulta DNS.attempts: número de tentativas de repetição para uma consulta DNS com falha.
O formato do valor da anotação é:
{"nameservers":"<dns-server-ip-1>,<dns-server-ip-2>","searches":"<domain-1>,<domain-2>","options":"ndots:<n>,edns0"}
O exemplo de Deployment abaixo configura dois nameservers personalizados, dois domínios de pesquisa e defina ndots e edns0:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-custom-dnsconfig: "{\"nameservers\":\"20.1.xx.xx,20.1.xx.xx\",\"searches\":\"xx.com,xx.eee\",\"options\":\"ndots:2,edns0\"}"
spec:
dnsPolicy: Default
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
Defina dnsPolicy
Defina dnsPolicy como Default ao usar um servidor DNS personalizado. Com a política Default, o pod herda a configuração DNS do nó em que está em execução. Isso preserva o caminho de roteamento do nó para o servidor DNS interno e mantém intacta a resolução de domínios públicos.