Freigeben über


Anpassen von CoreDNS für Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) verwendet CoreDNS für die Cluster-DNS-Verwaltung und -Auflösung mit allen 1.12.x - und höheren Clustern. AKS ist ein verwalteter Dienst, daher können Sie die Hauptkonfiguration für CoreDNS (ein CoreFile) nicht ändern. Stattdessen verwenden Sie eine ConfigMap von Kubernetes, um die Standardeinstellungen zu überschreiben. Um die standardmäßigen AKS CoreDNS ConfigMaps anzuzeigen, verwenden Sie den Befehl kubectl get configmaps --namespace=kube-system coredns --output yaml.

In diesem Artikel erfahren Sie, wie Sie ConfigMaps für grundlegende CoreDNS-Anpassungsoptionen in Azure Kubernetes Service (AKS) verwenden.

Hinweis

Zuvor wurde kube-dns von AKS für die Cluster-DNS-Verwaltung und -Auflösung verwendet, aber es ist jetzt veraltet. kube-dns bot verschiedene Anpassungsoptionen über eine Kubernetes-Konfigurationszuordnung. CoreDNS ist nicht abwärtskompatibel mit kube-dns. Sie müssen alle vorherigen Anpassungen aktualisieren, um mit CoreDNS zu arbeiten.

Voraussetzungen

  • Es wird vorausgesetzt, dass Sie über ein AKS-Cluster verfügen. Wenn Sie einen AKS-Cluster benötigen, können Sie einen mithilfe der Azure-Befehlszeilenschnittstelle, mit Azure PowerShell oder über das Azure-Portal erstellen.
  • Überprüfen Sie die Version von CoreDNS, die Sie ausführen. Die Konfigurationswerte können sich zwischen Versionen ändern.

Plug-In-Unterstützung

Alle integrierten CoreDNS-Plug-Ins werden unterstützt. Es werden keine Add-On-/Drittparteien-Plug-Ins unterstützt.

Wichtig

Wenn Sie Konfigurationen wie die in diesem Artikel erstellen, müssen die Namen, die Sie im data-Abschnitt angeben, auf .server oder .override enden. Diese Namenskonvention wird in der Standard-ConfigMap von AKS CoreDNS definiert, die Sie mit dem Befehl „kubectl get configmaps --namespace=kube-system coredns --output yaml“ anzeigen können.

Konfiguration von DNS-Namenumschreibungen

  1. Erstellen Sie eine Datei namens corednsms.yaml , und fügen Sie sie in die folgende Beispielkonfiguration ein. Stellen Sie sicher, dass Sie <domain to be rewritten> durch Ihren eigenen vollqualifizierten Domänennamen (FQDN) ersetzen.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: kube-system
    data:
      test.server: |
        <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
        }
    

    Wichtig

    Wenn Sie zu einem DNS-Server umleiten, z. B. die CoreDNS-Dienst-IP, muss dieser DNS-Server in der Lage sein, den umgeschriebenen Domänennamen aufzulösen.

  2. Erstellen Sie die ConfigMap mit dem Befehl „kubectl apply configmap“, und geben Sie den Namen Ihres YAML-Manifests an.

    kubectl apply -f corednsms.yaml
    
  3. Überprüfen Sie, ob die Anpassungen mithilfe des kubectl get configmaps Befehls angewendet wurden.

    kubectl get configmaps --namespace=kube-system coredns-custom -o yaml
    
  4. Führen Sie einen rollierenden Neustart durch, um die ConfigMap neu zu laden, und aktivieren Sie den Kubernetes Scheduler, CoreDNS ohne Ausfallzeiten mithilfe des kubectl rollout restart Befehls neu zu starten.

    kubectl --namespace kube-system rollout restart deployment coredns
    

Angeben eines Weiterleitungsservers für Den Netzwerkdatenverkehr

  1. Erstellen Sie eine Datei namens corednsms.yaml , und fügen Sie sie in die folgende Beispielkonfiguration ein. Stellen Sie sicher, dass Sie den forward Name und <domain to be rewritten> durch Ihre eigenen Werte ersetzen.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: kube-system
    data:
      test.server: | # You can 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
        }
    
  2. Erstellen Sie die ConfigMap mit dem kubectl apply configmap Befehl.

    kubectl apply -f corednsms.yaml
    
  3. Führen Sie einen rollierenden Neustart durch, um die ConfigMap neu zu laden, und aktivieren Sie den Kubernetes Scheduler, CoreDNS ohne Ausfallzeiten mithilfe des kubectl rollout restart Befehls neu zu starten.

    kubectl --namespace kube-system rollout restart deployment coredns
    

Verwenden benutzerdefinierter Domänen

Möglicherweise möchten Sie benutzerdefinierte Domänen konfigurieren, die nur intern aufgelöst werden können. Sie können beispielsweise die benutzerdefinierte Domäne puglife.local auflösen, bei der es sich nicht um eine gültige Domäne auf oberster Ebene handelt. Ohne eine ConfigMap für benutzerdefinierte Domänen kann der AKS-Cluster die Adresse nicht auflösen.

  1. Erstellen Sie eine neue Datei namens, corednsms.yaml und fügen Sie sie in die folgende Beispielkonfiguration ein. Stellen Sie sicher, dass Sie die benutzerdefinierte Domäne und die IP-Adresse mit Ihren eigenen Werten aktualisieren.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: kube-system
    data:
      puglife.server: | # You can 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
        }
    
  2. Erstellen Sie die ConfigMap mit dem kubectl apply configmap Befehl.

    kubectl apply -f corednsms.yaml
    
  3. Führen Sie einen rollierenden Neustart durch, um die ConfigMap neu zu laden, und aktivieren Sie den Kubernetes Scheduler, CoreDNS ohne Ausfallzeiten mithilfe des kubectl rollout restart Befehls neu zu starten.

    kubectl --namespace kube-system rollout restart deployment coredns 
    

Konfigurieren von Stubdomänen

  1. Erstellen Sie eine Datei namens „corednsms.yaml“, und fügen Sie die folgende Beispielkonfiguration ein. Stellen Sie sicher, dass Sie die benutzerdefinierten Domänen und IP-Adressen mit Ihren eigenen Werten aktualisieren.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: kube-system
    data:
      test.server: | # You can 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
        }
    
    
  2. Erstellen Sie die ConfigMap mit dem kubectl apply configmap Befehl und spezifizieren Sie die notwendigen Parameter.

    kubectl apply -f corednsms.yaml
    
  3. Führen Sie einen rollierenden Neustart durch, um die ConfigMap neu zu laden, und aktivieren Sie den Kubernetes Scheduler, CoreDNS ohne Ausfallzeiten mithilfe des kubectl rollout restart Befehls neu zu starten.

    kubectl --namespace kube-system rollout restart deployment coredns
    

Hinzufügen von benutzerdefinierten Host-zu-IP-Zuordnungen

  1. Erstellen Sie eine Datei namens „corednsms.yaml“, und fügen Sie die folgende Beispielkonfiguration ein. Achten Sie darauf, die IP-Adressen und Hostnamen mit Ihren eigenen Werten zu aktualisieren.

    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 can 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
              }
    
  2. Erstellen Sie die ConfigMap mit dem kubectl apply configmap Befehl.

    kubectl apply -f corednsms.yaml
    
  3. Führen Sie einen rollierenden Neustart durch, um die ConfigMap neu zu laden, und aktivieren Sie den Kubernetes Scheduler, CoreDNS ohne Ausfallzeiten mithilfe des kubectl rollout restart Befehls neu zu starten.

    kubectl --namespace kube-system rollout restart deployment coredns
    

Nächste Schritte