Configurando o provedor DNS do cluster
Cada serviço em seu cluster do IBM Cloud® Kubernetes Service é designado a um nome de Sistema de Nomes de Domínio (DNS) que o provedor de DNS do cluster registra para resolver solicitações de DNS. Para obter mais informações sobre DNS para serviços e pods, consulte a Documentação do Kubernetes.
O provedor de DNS do cluster é o CoreDNS, que é um servidor DNS autorizado de uso geral que fornece integração compatível com versões anteriores, porém extensível, com o Kubernetes.
Como CoreDNS é um executável único e um processo único, ele tem menos dependências e peças em movimento que podem causar problemas do que outros provedores DNS de cluster. O projeto também é gravado na mesma linguagem que o projeto do Kubernetes,
Go, que ajuda a proteger a memória. Por fim, o CoreDNS suporta casos de uso mais flexíveis do que outros provedores de DNS do cluster, pois é possível criar entradas customizadas de DNS, como as configurações comuns nos Docs do CoreDNS.
- CoreDNS e alterações na NodeLocal configuração do cache DNS na versão 1.34 e posteriores
- O tempo padrão do cache DNS nas configurações DNS NodeLocal e CoreDNS foi aumentado de 30 segundos para 120 segundos. Esta alteração aplica-se às ConfigMap configurações de cache DNS. Alguns usuários estavam atingindo os limites de tráfego de pDNS (ou UDP ) devido a pesquisas frequentes de DNS causadas por durações curtas de cache. Um intervalo de cache de 30 segundos raramente é necessário, exceto para registros DNS que mudam com muita frequência, por exemplo, pontos finais de verificação de integridade. Para a maioria das cargas de trabalho, um cache padrão de 120 segundos oferece melhor desempenho e reduz o tráfego DNS desnecessário. Os usuários que necessitem de tempos de cache mais curtos para casos de uso específicos podem substituir essa configuração.
Ajustando automaticamente a escala do provedor de DNS do cluster
Por padrão, o CoreDNS inclui uma implementação para ajuste automático de escala dos pods do CoreDNS em resposta ao número núcleos e nós do trabalhador dentro do cluster. É possível ajustar os parâmetros de ajustador automático de escala do CoreDNS editando o configmap de ajuste automático de escala do CoreDNS. Por exemplo, se seus apps usam intensamente o provedor DNS de cluster, talvez você precise aumentar o número mínimo de pods do CoreDNS para suportar o app. Para obter mais informações, consulte a Documentação do Kubernetes.
Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
-
Verifique se a implementação do ajustador automático de escala do CoreDNS está disponível. Em sua saída da CLI, verifique se uma implementação é AVAILABLE.
kubectl get deployment -n kube-system coredns-autoscalerSaída de exemplo
NAME READY UP-TO-DATE AVAILABLE AGE coredns-autoscaler 1/1 1 1 69d -
Edite as configurações padrão para o ajustador automático de escala do CoreDNS. Procure o campo
data.linear, que é padronizado para um pod do CoreDNS por 16 nós do trabalhador ou 256 núcleos, com um mínimo de dois pods do CoreDNS independentemente do tamanho do cluster (preventSinglePointFailure: true). Para obter mais informações, consulte a documentação do Kubernetes.kubectl edit configmap -n kube-system coredns-autoscalerSaída de exemplo
apiVersion: v1 data: linear: '{"coresPerReplica":256,"nodesPerReplica":16,"preventSinglePointFailure":true}' kind: ConfigMap metadata: ...
Customizando o provedor de DNS do cluster
É possível customizar o CoreDNS editando o configmap do CoreDNS. Por exemplo, talvez você queira configurar domínios stub e servidores DNS de envio de dados para resolver serviços que apontam para hosts externos. Além disso, é possível configurar vários Corefiles dentro do configmap do CoreDNS. Para obter mais informações, consulte a Documentação do Kubernetes.
O armazenamento em cache de DNS NodeLocal conta com o CoreDNS para manter o cache de resoluções de DNS. Mantenha as configurações de cache de DNS NodeLocal e de CoreDNS aplicáveis, como domínios de stub, da mesma forma
para manter a consistência de resolução de DNS.
Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
-
Verifique se a implementação do CoreDNS está disponível. Em sua saída da CLI, verifique se uma implementação é AVAILABLE.
kubectl get deployment -n kube-system corednsSaída de exemplo
NAME READY UP-TO-DATE AVAILABLE AGE coredns 3/3 3 3 69d -
Edite as configurações padrão para o configmap do CoreDNS. Use um arquivo principal na seção
datado mapa de configuração para customizar domínios stub e servidores DNS de envio de dados. Para obter mais informações, consulte a Documentação do Kubernetes.O plug-in
proxydo CoreDNS foi descontinuado e substituído pelo plug-inforward. Se você atualizar o configmap CoreDNS, certifique-se de substituir todas as instânciasproxyporforward.kubectl edit configmap -n kube-system corednsSaída de exemplo do CoreDNS
apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube-system data: Corefile: | import <MyCorefile> .:53 { errors health { lameduck 10s } 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 { max_concurrent 1000 } cache 30 { disable success cluster.local disable denial cluster.local } loop reload loadbalance } <MyCorefile>: | abc.com:53 { errors cache 30 loop forward . 1.2.3.4 } -
Opcional: Inclua os Corefiles customizados no configmap do CoreDNS. No exemplo a seguir, inclua o
importna seçãodata.Corefilee preencha a seçãodata.com suas informações personalizadas doCorefile. Para obter mais informações, consulte a Documentação de importação do Corefile.O plug-in
proxydo CoreDNS foi descontinuado e substituído pelo plug-inforward. Se você atualizar o configmap CoreDNS, certifique-se de substituir todas as instânciasproxyporforward.kubectl edit configmap -n kube-system corednsSaída de exemplo customizada do Corefile
apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube-system data: Corefile: | import <MyCorefile> .:53 { errors health kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure upstream 172.16.0.1 fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf { max_concurrent 1000 } cache 30 { disable success cluster.local disable denial cluster.local } loop reload loadbalance } <MyCorefile>: | abc.com:53 { errors cache 30 loop forward . 1.2.3.4 } -
Após alguns minutos, os pods do CoreDNS assimilam as mudanças do mapa de configuração.
Configurando o cache DNS do NodeLocal
Configure o agente de armazenamento em cache DNS do NodeLocal em nós do trabalhador selecionados para desempenho e disponibilidade de DNS de cluster aprimorados em seu cluster IBM Cloud Kubernetes Service. Para obter mais informações,
consulte os Docs do Kubernetes.
Por padrão, as solicitações de DNS do cluster para pods que usam uma Política de DNS ClusterFirst são enviadas para o serviço DNS do cluster. Se você ativar o armazenamento em cache DNS do NodeLocal em um nó do trabalhador, as solicitações de DNS de cluster destes pods que estão no nó do trabalhador serão enviadas, em vez
disso, para o cache DNS local, que atende em um endereço IP de link local 169.254.20.10. O cache DNS também atende no IP de cluster do serviço kube-dns no namespace kube-system .
Não inclua o rótulo do cache DNS ao já usar DNS com reconhecimento de zona em seu cluster. Além disso, o armazenamento em cache de DNS NodeLocal conta com o CoreDNS para manter o cache de resoluções
de DNS. Mantenha as configurações de cache de DNS NodeLocal e de CoreDNS aplicáveis, como domínios de stub, da mesma forma para manter a consistência de resolução de DNS.
- Versão 1.34 e e anteriores
NodeLocalO cache DNS é opcional. Você deve ativá-lo manualmente adicionando o rótuloibm-cloud.kubernetes.io/node-local-dns-enabled=trueaos nós de trabalho.- Versão 1.35 e e posteriores
NodeLocalO cache DNS é ativado por padrão em todos os nós de trabalho. Os clusters atualizados para a versão 1.35 têm o DNS NodeLocal ativado automaticamente, a menos que você opte por não ativá-lo. Para evitar a ativação automática, aplique o rótuloibm-cloud.kubernetes.io/node-local-dns-disabled=trueaos nós de trabalho antes de fazer o upgrade.
Para obter mais informações sobre as alterações na versão 1.35, consulte as informações sobre a versão 1.35.
Ativar o cache DNS do NodeLocal
Ative o cache DNS do NodeLocal para um ou mais nós do trabalhador em seu cluster Kubernetes.
- Versão 1.35 e e posteriores
- NodeLocal O DNS é ativado por padrão em todos os nós de trabalho. Siga estas etapas somente se você tiver desativado anteriormente o NodeLocal DNS ou se estiver adicionando novos nós de trabalho com o NodeLocal DNS desativado.
- Versão 1.34 e e anteriores
- NodeLocal O DNS é opcional. Siga estas etapas para ativá-lo em seus nós de trabalho.
As etapas a seguir atualizam os pods DNS executados em nós do trabalhador específicos. Também é possível rotular o conjunto de trabalhadores para que nós futuros herdem o rótulo.
Antes de começar, atualize todas as políticas de rede de saída de DNS afetadas por esse recurso, como as políticas que dependem de seletores de pod ou namespace para a saída de DNS.
kubectl get networkpolicy --all-namespaces -o yaml
-
Se você tiver customizado domínios stub e servidores DNS de envio de dados para CoreDNS, deve-se também customizar o cache DNS
NodeLocalcom esses domínios stub e servidores DNS de envio de dados. -
Liste os nós em seu cluster. Os pods do agente de armazenamento em cache DNS do
NodeLocalfazem parte de um conjunto de daemon executado em cada nó.kubectl get nodes -
Inclua o rótulo
ibm-cloud.kubernetes.io/node-local-dns-enabled=trueno nó do trabalhador. O rótulo inicia o pod do agente de armazenamento em cache DNS no nó do trabalhador.- Inclua o rótulo em um ou mais nós do trabalhador.
-
Para rotular todos os nós do trabalhador no cluster: inclua o rótulo em todos os conjuntos de trabalhadores existentes.
-
Para rotular um nó do trabalhador individual:
kubectl label node <node_name> --overwrite "ibm-cloud.kubernetes.io/node-local-dns-enabled=true"
-
- Verifique se o nó tem o rótulo verificando se o campo
NODE-LOCAL-DNS-ENABLEDestá configurado comotrue.
kubectl get nodes -L "ibm-cloud.kubernetes.io/node-local-dns-enabled" ``` Saída de exemplo ```sh {: screen} NAME STATUS ROLES AGE VERSION NODE-LOCAL-DNS-ENABLED 10.xxx.xx.xxx Ready,SchedulingDisabled <none> 28h v1.35+IKS true ``` 3. Verifique se o pod do agente de armazenamento em cache DNS está em execução no nó do trabalhador. ```sh {: pre} kubectl get pods -n kube-system -l k8s-app=node-local-dns -o wide ``` Saída de exemplo ```sh {: screen} NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES node-local-dns-pvnjn 1/1 Running 0 1m 10.xxx.xx.xxx 10.xxx.xx.xxx <none> <none> ``` - Inclua o rótulo em um ou mais nós do trabalhador.
-
Repita as etapas anteriores para cada nó do trabalhador para ativar o armazenamento em cache DNS.
Desativar o cache DNS do NodeLocal
É possível desativar o cache DNS do NodeLocal para um ou mais nós do trabalhador.
- Versão 1.35 e e posteriores
-
Para desativar o DNS NodeLocal, que está ativado por padrão, adicione o rótulo
ibm-cloud.kubernetes.io/node-local-dns-disabled=trueaos seus nós de trabalho.kubectl label node --all --overwrite "ibm-cloud.kubernetes.io/node-local-dns-disabled=true" - Versão 1.34 e e anteriores
-
Para desativar o DNS NodeLocal, remova o rótulo
ibm-cloud.kubernetes.io/node-local-dns-enableddos nós de trabalho.
-
Remova o rótulo
ibm-cloud.kubernetes.io/node-local-dns-enableddo nó do trabalhador. Essa ação finaliza o pod do agente de armazenamento em cache DNS no nó do trabalhador.Execute o comando a seguir para remover o rótulo de todos os nós do trabalhador no cluster.
kubectl label node --all --overwrite "ibm-cloud.kubernetes.io/node-local-dns-enabled-"Execute o comando a seguir para remover o rótulo de um nó do trabalhador individual.
kubectl label node <node_name> "ibm-cloud.kubernetes.io/node-local-dns-enabled-"- Verifique se o rótulo foi removido consultando se o campo
NODE-LOCAL-DNS-ENABLEDestá vazio.
kubectl get nodes -L "ibm-cloud.kubernetes.io/node-local-dns-enabled" ``` Saída de exemplo ```sh {: screen} NAME STATUS ROLES AGE VERSION NODE-LOCAL-DNS-ENABLED 10.xxx.xx.xxx Ready,SchedulingDisabled <none> 28h v1.35+IKS ``` 2. Verifique se o pod não está mais em execução no nó no qual o cache DNS foi desativado. A saída não mostra pods. ```sh {: pre} kubectl get pods -n kube-system -l k8s-app=node-local-dns -o wide ``` Saída de exemplo ```sh {: screen} No resources found. ``` - Verifique se o rótulo foi removido consultando se o campo
-
Repita as etapas anteriores para cada nó do trabalhador para desativar o armazenamento em cache do DNS.
Customizando o cache DNS do NodeLocal
É possível customizar o cache de DNS NodeLocal editando qualquer um dos dois configmaps.
node-local-dnsconfigmap: customize a configuração de cache de DNSNodeLocal.- Configmap
node-local-dns-config: estenda a configuração de cache de DNSNodeLocalcustomizando domínios de stub ou servidores DNS de envio de dados para resolver serviços que apontem para hosts externos.
O armazenamento em cache de DNS NodeLocal conta com o CoreDNS para manter o cache de resoluções de DNS. Mantenha as configurações de cache de DNS NodeLocal e de CoreDNS aplicáveis, como domínios de stub, da mesma forma
para manter a consistência de resolução de DNS.
Editando o configmap node-local-dns para atualizações de configuração geral
Edite o configmap node-local-dns para customizar a configuração de cache de DNS NodeLocal.
Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
-
Verifique se o conjunto de daemons do cache DNS do
NodeLocalestá disponível.kubectl get ds -n kube-system node-local-dnsSaída de exemplo
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE node-local-dns 4 4 4 4 4 ibm-cloud.kubernetes.io/node-local-dns-enabled=true 82d -
Edite as configurações padrão ou inclua os Arquivos principais customizados no configmap de cache de DNS
NodeLocal. Cada Arquivo principal importado deve usar o caminhocoredns. Para obter mais informações, consulte a Documentação do Kubernetes.Somente um conjunto limitado de plug-ins é suportado para o cache de DNS do
NodeLocal.kubectl edit configmap -n kube-system node-local-dnsSaída de exemplo
apiVersion: v1 kind: ConfigMap metadata: name: node-local-dns namespace: kube-system data: Corefile: | # Add your NodeLocal DNS customizations as import files under ./coredns directory. # Refer to /docs/containers?topic=containers-cluster_dns for details. import ./coredns/<MyCorefile> cluster.local:53 abc.com:53 { errors cache { success 9984 30 denial 9984 5 } reload loop bind 169.254.20.10 172.21.0.10 forward . __PILLAR__CLUSTER__DNS__ { force_tcp } prometheus :9253 health 169.254.20.10:8080 } in-addr.arpa:53 { errors cache 30 reload loop bind 169.254.20.10 172.21.0.10 forward . __PILLAR__CLUSTER__DNS__ { force_tcp } prometheus :9253 } ip6.arpa:53 { errors cache 30 reload loop bind 169.254.20.10 172.21.0.10 forward . __PILLAR__CLUSTER__DNS__ { force_tcp } prometheus :9253 } .:53 { errors cache 30 { disable success cluster.local disable denial cluster.local } reload loop bind 169.254.20.10 172.21.0.10 forward . __PILLAR__UPSTREAM__SERVERS__ { force_tcp } prometheus :9253 } <MyCorefile>: | # Add custom corefile content ... -
Após alguns minutos, os pods do cache DNS do
NodeLocalassimilam as mudanças do mapa de configuração.
Editando o configmap node-local-dns-config para estender com domínios de stub ou servidores de envio de dados
Edite o configmap node-local-dns-config para estender a configuração de cache de DNS NodeLocal, como por meio da customização de domínios de stub ou de servidores DNS de envio de dados. Para obter mais informações,
consulte a Documentação do Kubernetes.
Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
-
Verifique se o conjunto de daemons do cache DNS do
NodeLocalestá disponível.kubectl get ds -n kube-system node-local-dnsSaída de exemplo
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE node-local-dns 4 4 4 4 4 ibm-cloud.kubernetes.io/node-local-dns-enabled=true 82d -
Confirme se o cache DNS do
NodeLocaltem um mapa de configuração.- Determine se o mapa de configuração do cache DNS do
NodeLocalexiste.
kubectl get cm -n kube-system node-local-dns-config ``` Saída de exemplo se nenhum configmap existir ```sh {: screen} Error from server (NotFound): ConfigMaps "node-local-dns-config" not found ``` 2. Se o mapa de configuração não existir, crie um mapa de configuração do cache DNS do `NodeLocal`. ```sh {: pre} kubectl create cm -n kube-system node-local-dns-config ``` Saída de exemplo ```sh {: screen} configmap/node-local-dns-config created ``` - Determine se o mapa de configuração do cache DNS do
-
Edite o mapa de configuração do cache DNS do
NodeLocal. O mapa de configuração usa a sintaxe do KubeDNS para customizar domínios stub e servidores DNS de envio de dados. Para obter mais informações, consulte a Documentação do Kubernetes.kubectl edit cm -n kube-system node-local-dns-configSaída de exemplo
apiVersion: v1 kind: ConfigMap metadata: name: node-local-dns-config namespace: kube-system data: stubDomains: | {"abc.com" : ["1.2.3.4"]} -
Após alguns minutos, os pods do cache DNS do
NodeLocalassimilam as mudanças do mapa de configuração.
Configurando o DNS com reconhecimento de zona
Configure DNS com reconhecimento de zona para desempenho de DNS de cluster melhorado e disponibilidade em seu cluster IBM Cloud Kubernetes Service multizona. Essa configuração
amplia o cache DNS do NodeLocal para preferir o tráfego de DNS de cluster dentro da mesma zona.
Por padrão, o seu cluster é configurado com recursos DNS em todo o cluster, não com recursos DNS com reconhecimento de zona. Mesmo depois de configurar o DNS com reconhecimento de zona, os recursos de DNS em todo o cluster permanecerão sendo executados como um DNS de backup. Os seus recursos DNS com reconhecimento de zona são separados do DNS em todo o cluster, e mudar o DNS com reconhecimento de zona não impacta o DNS em todo o cluster.
Não use o rótulo de cache DNS ao usar DNS com reconhecimento de zona em seu cluster.
Configurando o DNS com reconhecimento de zona
Conclua a etapa a seguir para configurar o DNS com reconhecimento de zona em seu cluster multizona
-
Atualize todas as políticas de rede de saída de DNS afetadas pelo DNS sensível à zona, como as políticas que dependem de seletores de pod ou namespace para a saída de DNS. Execute o comando a seguir para obter uma lista das suas políticas de rede.
kubectl get networkpolicy --all-namespaces -o yaml -
Rotule o
corednsConfigMap no namespace dokube-systemcomibm-cloud.kubernetes.io/deploy-zone-aware-dns=truekubectl label cm -n kube-system coredns --overwrite "ibm-cloud.kubernetes.io/deploy-zone-aware-dns=true" -
Atualize o cluster mestre para implementar os recursos de DNS com reconhecimento de zona
ibmcloud ks cluster master refresh -c CLUSTER_NAME_OR_ID -
Veja se a operação de atualização foi concluída revisando o Funcionamento do mestre nos detalhes do cluster.
ibmcloud ks cluster get -c CLUSTER_NAME_OR_ID -
Se você tiver customizado domínios stub e servidores DNS de envio de dados para CoreDNS, deve-se também customizar o cache DNS
NodeLocalcom esses domínios stub e servidores DNS de envio de dados. -
Configure uma variável de ambiente para as zonas do cluster.
ZONES=$(kubectl get nodes --no-headers --ignore-not-found=true -o jsonpath='{range .items[*]}{.metadata.labels.topology\.kubernetes\.io/zone}{"\n"}{end}' | uniq) -
Inicie os pods de ajustador automático de escala CoreDNS e CoreDNS em todas as zonas.
for ZONE in ${ZONES}; do kubectl scale deployment -n kube-system "coredns-autoscaler-${ZONE}" --replicas=1 done -
Verifique se os pods de ajustador automático de escala CoreDNS e CoreDNS estão em execução em todas as zonas.
for ZONE in ${ZONES}; do kubectl get pods -n kube-system -l "k8s-app=coredns-autoscaler-${ZONE}" -o wide kubectl get pods -n kube-system -l "k8s-app=coredns-${ZONE}" -o wide done -
Inicie os pods de cache DNS do
NodeLocalem todos os nós dos trabalhadores.kubectl label nodes --all --overwrite "ibm-cloud.kubernetes.io/zone-aware-dns-enabled=true" -
Verifique se os pods de cache DNS do
NodeLocalestão em execução em todos os nós dos trabalhadores.for ZONE in ${ZONES}; do kubectl get pods -n kube-system -l "k8s-app=node-local-dns-${ZONE}" -o wide done -
Rotule os seus conjuntos de trabalhadores para que futuros nós do trabalhador herdem o rótulo
ibm-cloud.kubernetes.io/zone-aware-dns-enabled=true.
Desativando e excluindo o DNS com reconhecimento de zona
Para remover o DNS com reconhecimento de zona, deve-se primeiro desativar o DNS com reconhecimento de zona em cada zona do seu cluster multizona. Em seguida, exclua os recursos DNS com reconhecimento de zona.
-
Remova o rótulo
ibm-cloud.kubernetes.io/zone-aware-dns-enabled=truedos seus conjuntos de trabalhadores. -
Configure uma variável de ambiente para as zonas no cluster.
ZONES=$(kubectl get nodes --no-headers --ignore-not-found=true -o jsonpath='{range .items[*]}{.metadata.labels.topology\.kubernetes\.io/zone}{"\n"}{end}' | uniq) -
Pare os pods de cache DNS do
NodeLocalem todos os nós do trabalhador.kubectl label nodes --all --overwrite "ibm-cloud.kubernetes.io/zone-aware-dns-enabled-" -
Pare os pods de ajustador automático de escala do CoreDNS em todas as zonas.
for ZONE in ${ZONES}; do kubectl scale deployment -n kube-system "coredns-autoscaler-${ZONE}" --replicas=0 done -
Verifique se os pods do ajustador automático de escala do CoreDNS não estão mais em execução em todas as zonas.
for ZONE in ${ZONES}; do kubectl get pods -n kube-system -l "k8s-app=coredns-autoscaler-${ZONE}" done -
Pare os pods do CoreDNS em todas as zonas.
for ZONE in ${ZONES}; do kubectl scale deployment -n kube-system "coredns-${ZONE}" --replicas=0 done -
Remova o rótulo
ibm-cloud.kubernetes.io/deploy-zone-aware-dns=truedo configmapcorednsno namespacekube-system.kubectl label cm -n kube-system coredns --overwrite "ibm-cloud.kubernetes.io/deploy-zone-aware-dns-" -
Atualize o cluster mestre para excluir os recursos DNS com reconhecimento de zona.
ibmcloud ks cluster master refresh --cluster CLUSTER_NAME_OR_ID -
Veja se a operação de atualização foi concluída revisando o Funcionamento do mestre nos detalhes do cluster.
ibmcloud ks cluster get -c CLUSTER_NAME_OR_ID