Personalizar o CoreDNS com o Azure Kubernetes Service

Azure Kubernetes Service (AKS) utiliza o projeto CoreDNS para gestão e resolução de DNS de cluster com todos os clusters 1.12.x e mais altos. Anteriormente, o projeto Kube-DNS foi usado. Este projeto kube-dns está agora depreciado. Para obter mais informações sobre a personalização do CoreDNS e Kubernetes, consulte a documentação oficial a montante.

Como a AKS é um serviço gerido, não é possível modificar a configuração principal para CoreDNS (um CoreFile). Em vez disso, utiliza um ConfigMap Kubernetes para anular as definições predefinidos. Para ver o padrão AKS CoreDNS ConfigMaps, utilize o kubectl get configmaps --namespace=kube-system coredns -o yaml comando.

Este artigo mostra-lhe como usar ConfigMaps para opções básicas de personalização do CoreDNS em AKS. Esta abordagem difere da configuração do CoreDNS noutros contextos, tais como a utilização do CoreFile. Verifique a versão do CoreDNS que está a executar, uma vez que os valores de configuração podem mudar entre versões.

Nota

kube-dns ofereceu diferentes opções de personalização através de um mapa config de Kubernetes. CoreDNS não é compatível com kube-dns. Quaisquer personalizações que tenha usado anteriormente devem ser atualizadas para utilização com o CoreDNS.

Antes de começar

Este artigo assume que você tem um cluster AKS existente. Se precisar de um cluster AKS, consulte o quickstart AKS utilizando o Azure CLI, utilizando Azure PowerShell ou utilizando o portal do Azure.

Ao criar uma configuração como os exemplos abaixo, os seus nomes na secção de dados devem terminar em .servidor ou .override. Esta convenção de nomeação é definida no configmap AKS CoreDNS padrão que pode ver usando o kubectl get configmaps --namespace=kube-system coredns -o yaml comando.

O que é suportado/não suportado

Todos os plugins CoreDNS incorporados são suportados. Não são suportados plugins adicionais/terceiros.

Reescrever DNS

Um dos cenários que tem é fazer reescrever o nome DNS on-the-fly. No exemplo seguinte, substitua-o pelo <domain to be written> seu próprio nome de domínio totalmente qualificado. Crie um ficheiro com o nome corednsms.yaml e cole a seguinte configuração de exemplo:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns-custom
  namespace: kube-system
data:
  test.server: | # you may select any name here, but it must end with the .server file extension
    <domain to be rewritten>.com:53 {
    log
    errors
    rewrite stop {
      name regex (.*)\.<domain to be rewritten>.com {1}.default.svc.cluster.local
      answer name (.*)\.default\.svc\.cluster\.local {1}.<domain to be rewritten>.com
    }
    forward . /etc/resolv.conf # you can redirect this to a specific DNS server such as 10.0.0.10, but that server must be able to resolve the rewritten domain name
    }

Importante

Se redirecionar para um servidor DNS, como o IP de serviço CoreDNS, esse servidor DNS deve ser capaz de resolver o nome de domínio reescrito.

Crie o ConfigMap utilizando o comando configmap de aplicação de kubectl e especifique o nome do seu manifesto YAML:

kubectl apply -f corednsms.yaml

Para verificar se as personalizações foram aplicadas, use o kubectl obter configmaps e especifique o seu ConfigMap personalizado para coredns :

kubectl get configmaps --namespace=kube-system coredns-custom -o yaml

Agora força o CoreDNS a recarregar o ConfigMap. O comando de eliminação de kubectl não é destrutivo e não causa tempo de mente. As kube-dns cápsulas são eliminadas e o Programador Kubernetes recria-as. Estas novas cápsulas contêm a alteração do valor TTL.

kubectl delete pod --namespace kube-system -l k8s-app=kube-dns

Nota

O comando acima está correto. Enquanto estamos a mudar coredns, a implementação está sob a etiqueta kube-dns .

Servidor avançado personalizado

Se precisar de especificar um servidor avançado para o tráfego da sua rede, pode criar um ConfigMap para personalizar o DNS. No exemplo seguinte, atualize o forward nome e o endereço com os valores para o seu próprio ambiente. Crie um ficheiro com o nome corednsms.yaml e cole a seguinte configuração de exemplo:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns-custom
  namespace: kube-system
data:
  test.server: | # you may select any name here, but it must end with the .server file extension
    <domain to be rewritten>.com:53 {
        forward foo.com 1.1.1.1
    }

Tal como nos exemplos anteriores, crie o ConfigMap utilizando o comando configmap aplicar o kubectl e especificar o nome do seu manifesto YAML. Em seguida, force o CoreDNS a recarregar o ConfigMap utilizando o pod de eliminação de kubectl para o Programador Kubernetes para recriá-los:

kubectl apply -f corednsms.yaml
kubectl delete pod --namespace kube-system --selector k8s-app=kube-dns

Use domínios personalizados

Pode querer configurar domínios personalizados que só podem ser resolvidos internamente. Por exemplo, você pode querer resolver o domínio personalizado puglife.local, que não é um domínio de nível superior válido. Sem um domínio personalizado ConfigMap, o cluster AKS não consegue resolver o endereço.

No exemplo seguinte, atualize o domínio personalizado e o endereço IP para direcionar o tráfego para com os valores para o seu próprio ambiente. Crie um ficheiro com o nome corednsms.yaml e cole a seguinte configuração de exemplo:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns-custom
  namespace: kube-system
data:
  puglife.server: | # you may select any name here, but it must end with the .server file extension
    puglife.local:53 {
        errors
        cache 30
        forward . 192.11.0.1  # this is my test/dev DNS server
    }

Tal como nos exemplos anteriores, crie o ConfigMap utilizando o comando configmap aplicar o kubectl e especificar o nome do seu manifesto YAML. Em seguida, force o CoreDNS a recarregar o ConfigMap utilizando o pod de eliminação de kubectl para o Programador Kubernetes para recriá-los:

kubectl apply -f corednsms.yaml
kubectl delete pod --namespace kube-system --selector k8s-app=kube-dns

Domínios de canhoto

O CoreDNS também pode ser usado para configurar domínios de canhotos. No exemplo seguinte, atualize os domínios personalizados e endereços IP com os valores para o seu próprio ambiente. Crie um ficheiro com o nome corednsms.yaml e cole a seguinte configuração de exemplo:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns-custom
  namespace: kube-system
data:
  test.server: | # you may select any name here, but it must end with the .server file extension
    abc.com:53 {
        errors
        cache 30
        forward . 1.2.3.4
    }
    my.cluster.local:53 {
        errors
        cache 30
        forward . 2.3.4.5
    }

Tal como nos exemplos anteriores, crie o ConfigMap utilizando o comando configmap aplicar o kubectl e especificar o nome do seu manifesto YAML. Em seguida, force o CoreDNS a recarregar o ConfigMap utilizando o pod de eliminação de kubectl para o Programador Kubernetes para recriá-los:

kubectl apply -f corednsms.yaml
kubectl delete pod --namespace kube-system --selector k8s-app=kube-dns

Anfitriões plugin

Como todos os plugins incorporados são suportados, isto significa que o plugin CoreDNS Hosts também está disponível para personalizar:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns-custom # this is the name of the configmap you can overwrite with your changes
  namespace: kube-system
data:
    test.override: | # you may select any name here, but it must end with the .override file extension
          hosts { 
              10.0.0.1 example1.org
              10.0.0.2 example2.org
              10.0.0.3 example3.org
              fallthrough
          }

Resolução de problemas

Para as etapas gerais de resolução de problemas do CoreDNS, tais como verificar os pontos finais ou a resolução, consulte a Resolução DNS de Depuração.

Para ativar o registo de consultas DNS, aplique a seguinte configuração no seu ConfigMap personalizado para coredns:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns-custom
  namespace: kube-system
data:
  log.override: | # you may select any name here, but it must end with the .override file extension
        log

Depois de aplicar as alterações de configuração, utilize o kubectl logs comando para visualizar a registo de depuragem CoreDNS. Por exemplo:

kubectl logs --namespace kube-system --selector k8s-app=kube-dns

Passos seguintes

Este artigo mostrou alguns cenários de exemplo para a personalização do CoreDNS. Para obter informações sobre o projeto CoreDNS, consulte a página de projeto a montante do CoreDNS.

Para saber mais sobre conceitos de rede core, consulte conceitos de Rede para aplicações em AKS.