Cluster-DNS-Provider konfigurieren

Jedem Service in Ihrem IBM Cloud® Kubernetes Service-Cluster wird ein DNS-Name (Domain Name System) zugeordnet, den der Cluster-DNS-Provider registriert, um DNS-Anforderungen aufzulösen. Weitere Informationen zu DNS für Dienste und Pods finden Sie in der Dokumentation zu Kubernetes.

Als DNS-Anbieter für den Cluster dient CoreDNS, ein universell einsetzbarer, autoritativer DNS-Server, der eine abwärtskompatible, aber erweiterbare Integration mit Kubernetes bietet. Da CoreDNS eine einzeln ausführbare Funktion und ein einzelner Prozess ist, weist CoreDNS weniger Abhängigkeiten und bewegliche Teile auf als andere Cluster-DNS-Provider und ist damit weniger fehleranfällig. Das Projekt wurde außerdem in derselben Sprache, Go, wie das Kubernetes-Projekt geschrieben, was den Schutz des Speichers erleichtert. Schließlich unterstützt CoreDNS flexiblere Anwendungsfälle als andere Cluster-DNS-Anbieter, da Sie benutzerdefinierte DNS-Einträge erstellen können, wie beispielsweise die gängigen Konfigurationen in der Dokumentation zu CoreDNS.

CoreDNS und Änderungen NodeLocal an der DNS-Cache-Konfiguration in Version 1.34 und höher
Die Standard-DNS-Cache-Zeit in beiden CoreDNSNodeLocal DNS-Konfigurationen wurde von 30 Sekunden auf 120 Sekunden erhöht. Diese Änderung betrifft die ConfigMap Einstellungen für das DNS-Caching. Einige Benutzer stießen aufgrund häufiger DNS-Abfragen, die durch kurze Cache-Laufzeiten verursacht wurden, an die Grenzen des Datenverkehrs von pDNS (oder UDP ). Ein Cache-Intervall von 30 Sekunden ist nur selten erforderlich, außer bei DNS-Einträgen, die sich sehr häufig ändern, beispielsweise Endpunkte für Zustandsprüfungen. Bei den meisten Workloads sorgt ein Standard-Cache von 120 Sekunden für eine bessere Leistung und reduziert unnötigen DNS-Datenverkehr. Benutzer, die für bestimmte Anwendungsfälle kürzere Cache-Zeiten benötigen, können diese Einstellung überschreiben.

Automatische Skalierung für den Cluster-DNS-Provider

CoreDNS enthält standardmäßig eine Bereitstellung zur automatischen Skalierung der CoreDNS-Pods als Reaktion auf die Anzahl der Workerknoten und Cores im Cluster. Sie können die Parameter für die automatische CoreDNS-Skalierungsfunktion (DNS-Autoscaler) optimieren, indem Sie die Konfigurationszuordnung (Configmap) für die automatische CoreDNS-Skalierung bearbeiten. Wenn Ihre Apps den Cluster-DNS-Provider zum Beispiel intensiv nutzen, müssen Sie möglicherweise die Mindestanzahl der CoreDNS-Pods zur Unterstützung der App erhöhen. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes.

Vorbereitende Schritte: Melden Sie sich bei Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  1. Überprüfen Sie, dass die Bereitstellung des CoreDNS-Autoscalers verfügbar ist. Stellen Sie in Ihrer CLI-Ausgabe sicher, dass eine Bereitstellung den Status AVAILABLE (verfügbar) hat.

    kubectl get deployment -n kube-system coredns-autoscaler
    

    Beispielausgabe

    NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
    coredns-autoscaler   1/1     1            1           69d
    
  2. Bearbeiten Sie die Standardeinstellungen für den CoreDNS-Autoscaler. Suchen Sie nach dem Feld data.linear, das standardmäßig einen CoreDNS-Pod pro 16 Workerknoten oder 256 Kerne enthält, mit mindestens zwei CoreDNS-Pods unabhängig von der Clustergröße (preventSinglePointFailure: true). Weitere Informationen finden Sie in der Dokumentation zu Kubernetes.

    kubectl edit configmap -n kube-system coredns-autoscaler
    

    Beispielausgabe

    apiVersion: v1
    data:
      linear: '{"coresPerReplica":256,"nodesPerReplica":16,"preventSinglePointFailure":true}'
    kind: ConfigMap
    metadata:
    ...
    

Cluster-DNS-Provider anpassen

CoreDNS kann durch entsprechende Bearbeitung der CoreDNS-Konfigurationszuordnung (Configmap) angepasst werden. Sie könnten zum Beispiel Stub-Domänen und vorgeordnete Namensserver (Upstream-Namensserver) zur Auflösung von Services konfigurieren, die auf externe Hosts verweisen. Darüber hinaus können Sie mehrere Corefiles im CoreDNS unter ConfigMap konfigurieren. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes.

Das NodeLocal-DNS-Caching stützt sich auf CoreDNS, um den Cache für DNS-Auflösungen zu verwalten. Halten Sie den entsprechenden NodeLocal-DNS-Cache und die CoreDNS-Konfigurationen, wie z. B. Stubdomänen, für die Beibehaltung der DNS-Auflösung konsistent.

Vorbereitende Schritte: Melden Sie sich bei Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  1. Überprüfen Sie, ob die CoreDNS-Bereitstellung verfügbar ist. Stellen Sie in Ihrer CLI-Ausgabe sicher, dass eine Bereitstellung den Status AVAILABLE (verfügbar) hat.

    kubectl get deployment -n kube-system coredns
    

    Beispielausgabe

    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    coredns   3/3     3            3           69d
    
  2. Bearbeiten Sie die Standardeinstellungen für die CoreDNS--Konfigurationszuordnung. Verwenden Sie eine Corefile im Abschnitt data der Konfigurationszuordnung, um Stub-Domänen und vorgeordnete Namensserver (Upstream-Namensserver) anzupassen. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes.

    Das CoreDNS-Plug-in proxy wird nicht mehr verwendet und wird durch das Plug-in forward ersetzt. Stellen Sie beim Aktualisieren der CoreDNS-Konfigurationszuordnung sicher, dass alle Instanzen von proxy durch forward ersetzt werden.

    kubectl edit configmap -n kube-system coredns
    

    CoreDNS-Beispielausgabe

    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
            }
    
  3. Optional: Fügen Sie angepasste Corefiles zur CoreDNS-Konfigurationszuordnung hinzu. Fügen Sie im folgenden Beispiel den Abschnitt in import <MyCoreFile> den data.Corefile Abschnitt ein und vervollständigen Sie den Abschnitt data.<MyCorefile> mit Ihren individuellen Corefile-Informationen. Weitere Informationen finden Sie in der Dokumentation zum Corefile-Import.

    Das CoreDNS-Plug-in proxy wird nicht mehr verwendet und wird durch das Plug-in forward ersetzt. Stellen Sie beim Aktualisieren der CoreDNS-Konfigurationszuordnung sicher, dass alle Instanzen von proxy durch forward ersetzt werden.

    kubectl edit configmap -n kube-system coredns
    

    Beispielausgabe für angepasste 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
        }
    
  4. Nach einigen Minuten übernehmen die CoreDNS-Pods die in der Konfigurationszuordnung vorgenommenen Änderungen.

DNS-Cache 'NodeLocal' einrichten

Richten Sie den NodeLocal-DNS-Caching-Agenten für ausgewählte Workerknoten ein, um eine verbesserte Cluster-DNS-Leistung und -Verfügbarkeit in Ihrem IBM Cloud Kubernetes Service-Cluster zu erzielen. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes.

Standardmäßig werden DNS-Anfragen des Clusters für Pods, die eine ClusterFirstDNS-Richtlinie verwenden, an den DNS-Dienst des Clusters gesendet. Wenn Sie das DNS-Caching mit NodeLocal auf einem Workerknoten aktivieren, werden die Cluster-DNS-Anforderungen für solche Pods, die sich auf dem Workerknoten befinden, stattdessen an den lokalen DNS-Cache gesendet, der die 'link-local'-IP-Adresse 169.254.20.10 überwacht. Der DNS-Cache ist auch für die Cluster-IP des Service kube-dns im Namensbereich kube-system empfangsbereit.

Fügen Sie die DNS-Cache-Bezeichnung nicht hinzu, wenn Sie bereits zonenorientiertes DNS in Ihrem Cluster verwenden. Zudem stützt sich das NodeLocal-DNS-Caching auf CoreDNS, um den Cache für DNS-Auflösungen zu verwalten. Halten Sie den entsprechenden NodeLocal-DNS-Cache und die CoreDNS-Konfigurationen, wie z. B. Stubdomänen, für die Beibehaltung der DNS-Auflösung konsistent.

Versionen 1.34 und frühere Versionen
NodeLocal DNS-Cache ist opt-in. Sie müssen sie manuell aktivieren, indem Sie das Label ibm-cloud.kubernetes.io/node-local-dns-enabled=true zu den Arbeitsknoten hinzufügen.
Versionen 1.35 und höher
NodeLocal Der DNS-Cache ist standardmäßig auf allen Worker-Nodes aktiviert. Bei Clustern, die auf die Version 1.35 aktualisiert werden, wird NodeLocal DNS automatisch aktiviert, sofern Sie dies nicht ablehnen. Um die automatische Aktivierung zu verhindern, sollten Sie vor dem Upgrade das Label ibm-cloud.kubernetes.io/node-local-dns-disabled=true auf Ihre Arbeitsknoten anwenden.

Weitere Informationen zu den Änderungen der Version 1.35 finden Sie unter 1.35 version information.

NodeLocal-DNS-Cache aktivieren

Aktivieren Sie den NodeLocal-DNS-Cache für einen oder mehrere Workerknoten in Ihrem Kubernetes-Cluster.

Versionen 1.35 und höher
NodeLocal DNS ist standardmäßig auf allen Worker Nodes aktiviert. Führen Sie diese Schritte nur aus, wenn Sie zuvor NodeLocal DNS deaktiviert haben oder wenn Sie neue Arbeitsknoten mit deaktiviertem NodeLocal DNS hinzufügen.
Versionen 1.34 und frühere Versionen
NodeLocal DNS ist opt-in. Befolgen Sie diese Schritte, um sie auf Ihren Arbeitsknoten zu aktivieren.

Mit den folgenden Schritten werden DNS-Pods aktualisiert, die auf bestimmten Workerknoten ausgeführt werden. Außerdem können Sie dem Worker-Pool eine Bezeichnung zuordnen, sodass später erstellte Knoten die Bezeichnung übernehmen.

Bevor Sie beginnen, aktualisieren Sie alle DNS-Ausgangsnetzwerkrichtlinien, die von dieser Funktion betroffen sind, beispielsweise Richtlinien, die für den DNS-Ausgang auf Pod- oder Namespace-Selektoren basieren.

kubectl get networkpolicy --all-namespaces -o yaml
  1. Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  2. Wenn Sie Stubdomänen und vorgelagerte DNS-Server für CoreDNS angepasst haben, müssen Sie auch den NodeLocal-DNS-Cache anpassen, und zwar unter Angabe genau dieser Stubdomänen und vorgelagerten DNS-Server.

  3. Listen Sie die Knoten in Ihrem Cluster auf. Die Pods des NodeLocal-DNS-Caching-Agenten sind Teil einer Dämongruppe (DaemonSet), die auf jedem Knoten ausgeführt wird.

    kubectl get nodes
    
  4. Fügen Sie die Bezeichnung ibm-cloud.kubernetes.io/node-local-dns-enabled=true zum Workerknoten hinzu. Die Bezeichnung startet den Pod des DNS-Caching-Agenten auf dem Workerknoten.

    1. Fügen Sie die Bezeichnung zu einem oder mehreren Workerknoten hinzu.
      • Gehen Sie wie folgt vor, um allen Workerknoten im Cluster eine Bezeichnung zuzuordnen: Fügen Sie die Bezeichnung allen vorhandenen Worker-Pools hinzu.

      • Gehen Sie wie folgt vor, um einem einzelnen Workerknoten eine Bezeichnung zuzuordnen:

        kubectl label node <node_name> --overwrite "ibm-cloud.kubernetes.io/node-local-dns-enabled=true"
        
    2. Überprüfen Sie, ob der Knoten mit der Bezeichnung versehen wurde, indem Sie prüfen, ob für das Feld NODE-LOCAL-DNS-ENABLED der Wert true festgelegt ist.
        kubectl get nodes -L "ibm-cloud.kubernetes.io/node-local-dns-enabled"
        ```
        Beispielausgabe
    
        ```sh {: screen}
        NAME          STATUS                      ROLES    AGE   VERSION       NODE-LOCAL-DNS-ENABLED
        10.xxx.xx.xxx Ready,SchedulingDisabled    <none>   28h   v1.35+IKS   true
        ```
    3. Stellen Sie sicher, dass der Pod des DNS-Caching-Agenten auf dem Workerknoten ausgeführt wird.
    
    ```sh {: pre}
        kubectl get pods -n kube-system -l k8s-app=node-local-dns -o wide
        ```
        Beispielausgabe
    
        ```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>
        ```
    
  5. Wiederholen Sie die vorherigen Schritte für jeden Workerknoten, um das DNS-Caching zu aktivieren.

NodeLocal-DNS-Cache inaktivieren

Sie können den NodeLocal-DNS-Cache für einen oder mehrere Workerknoten inaktivieren.

Versionen 1.35 und höher

Um NodeLocal DNS zu deaktivieren, das standardmäßig aktiviert ist, fügen Sie das Label ibm-cloud.kubernetes.io/node-local-dns-disabled=true zu Ihren Arbeitsknoten hinzu.

kubectl label node --all --overwrite "ibm-cloud.kubernetes.io/node-local-dns-disabled=true"
Versionen 1.34 und frühere Versionen

Um NodeLocal DNS zu deaktivieren, entfernen Sie das Etikett ibm-cloud.kubernetes.io/node-local-dns-enabled von Ihren Worker Nodes.

  1. Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  2. Entfernen Sie die Bezeichnung ibm-cloud.kubernetes.io/node-local-dns-enabled aus dem Workerknoten. Durch diese Aktion wird der Pod des DNS-Caching-Agenten auf dem Workerknoten beendet.

    Führen Sie den folgenden Befehl aus, um die Bezeichnung bei allen Workerknoten im Cluster zu entfernen.

    kubectl label node --all --overwrite "ibm-cloud.kubernetes.io/node-local-dns-enabled-"
    

    Führen Sie den folgenden Befehl aus, um die Bezeichnung bei einem einzelnen Workerknoten zu entfernen.

    kubectl label node <node_name> "ibm-cloud.kubernetes.io/node-local-dns-enabled-"
    
    1. Überprüfen Sie, dass die Bezeichnung entfernt wurde, indem Sie prüfen, ob das Feld NODE-LOCAL-DNS-ENABLED leer ist.
        kubectl get nodes -L "ibm-cloud.kubernetes.io/node-local-dns-enabled"
        ```
        Beispielausgabe
    
        ```sh {: screen}
        NAME          STATUS                      ROLES    AGE   VERSION       NODE-LOCAL-DNS-ENABLED
        10.xxx.xx.xxx Ready,SchedulingDisabled    <none>   28h   v1.35+IKS   
        ```
    2. Stellen Sie sicher, dass der Pod nicht mehr auf dem Knoten ausgeführt wird, auf dem der DNS-Cache inaktiviert ist. In der Ausgabe sind keine Pods enthalten.
    
    ```sh {: pre}
        kubectl get pods -n kube-system -l k8s-app=node-local-dns -o wide
        ```
        Beispielausgabe
    
        ```sh {: screen}
        No resources found.
        ```
    
  3. Wiederholen Sie die vorherigen Schritte für jeden Workerknoten, um das DNS-Caching zu inaktivieren.

DNS-Cache 'NodeLocal' anpassen

Sie können den DNS-Cache NodeLocal anpassen, indem Sie eine der beiden Konfigurationszuordnungen bearbeiten.

Das NodeLocal-DNS-Caching stützt sich auf CoreDNS, um den Cache für DNS-Auflösungen zu verwalten. Halten Sie den entsprechenden NodeLocal-DNS-Cache und die CoreDNS-Konfigurationen, wie z. B. Stubdomänen, für die Beibehaltung der DNS-Auflösung konsistent.

Konfigurationszuordnung node-local-dns für allgemeine Konfigurationsaktualisierungen bearbeiten

Sie können die Konfigurationszuordnung node-local-dns, um die DNS-Cachekonfiguration NodeLocal anzupassen.

Vorbereitende Schritte: Melden Sie sich bei Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  1. Überprüfen Sie, ob die Dämongruppe (DaemonSet) des DNS-Cache NodeLocal verfügbar ist.

    kubectl get ds -n kube-system node-local-dns
    

    Beispielausgabe

    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
    
  2. Bearbeiten Sie die Standardeinstellungen oder fügen Sie angepasste Corefiles zur NodeLocal-Konfigurationszuordnung für den DNS-Cache hinzu. Jede Corefile, die Sie importieren, muss den Pfad coredns verwenden. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes.

    Für den NodeLocal DNS-Cache wird nur eine begrenzte Anzahl von Plug-ins unterstützt.

    kubectl edit configmap -n kube-system node-local-dns
    

    Beispielausgabe

    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 ...
    
  3. Nach einigen Minuten übernimmt der NodeLocal-DNS-Cache die in der Konfigurationszuordnung vorgenommenen Änderungen.

Konfigurationszuordnung node-local-dns-config zur Erweiterung mit Stubdomänen oder Upstream-Servern bearbeiten

Bearbeiten Sie die Konfigurationszuordnung node-local-dns-config, um die NodeLocal-DNS-Cachekonfiguration zu erweitern, z. B. durch Anpassen von Stubdomänen oder Upstream-DNS-Servern. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes.

Vorbereitende Schritte: Melden Sie sich bei Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  1. Überprüfen Sie, ob die Dämongruppe (DaemonSet) des DNS-Cache NodeLocal verfügbar ist.

    kubectl get ds -n kube-system node-local-dns
    

    Beispielausgabe

    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
    
  2. Stellen Sie sicher, dass der NodeLocal-DNS-Cache eine Konfigurationszuordnung (Configmap) besitzt.

    1. Stellen Sie fest, ob die Konfigurationszuordnung (Configmap) für den NodeLocal-DNS-Cache vorhanden ist.
        kubectl get cm -n kube-system node-local-dns-config
        ```
        Beispiel für die Ausgabe bei nicht vorhandener Konfigurationszuordnung
    
        ```sh {: screen}
        Error from server (NotFound): ConfigMaps "node-local-dns-config" not found
        ```
    2. Falls keine Konfigurationszuordnung vorhanden ist, erstellen Sie eine solche Zuordnung für den `NodeLocal`-DNS-Cache.
    
    ```sh {: pre}
        kubectl create cm -n kube-system node-local-dns-config
        ```
        Beispielausgabe
    
        ```sh {: screen}
        configmap/node-local-dns-config created
        ```
    
  3. Bearbeiten Sie die Konfigurationszuordnung (Configmap) für den NodeLocal-DNS-Cache. Die Konfigurationszuordnung (Configmap) erfordert die Verwendung der KubeDNS-Syntax für die Anpassung von Stubdomänen und vorgelagerten DNS-Servern. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes.

    kubectl edit cm -n kube-system node-local-dns-config
    

    Beispielausgabe

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: node-local-dns-config
      namespace: kube-system
    data:
      stubDomains: |
          {"abc.com" : ["1.2.3.4"]}
    
  4. Nach einigen Minuten übernimmt der NodeLocal-DNS-Cache die in der Konfigurationszuordnung vorgenommenen Änderungen.

Zonenorientiertes DNS einrichten

Richten Sie in Ihrem IBM Cloud Kubernetes Service-Mehrzonencluster zonenorientiertes DNS für eine verbesserte Cluster-DNS-Leistung und -Verfügbarkeit ein. Diese Einrichtung erweitert den NodeLocal-DNS-Cache, sodass Cluster-DNS-Datenverkehr innerhalb derselben Zone bevorzugt wird.

Standardmäßig wird Ihr Cluster mit clusterweiten DNS-Ressourcen und nicht mit zonenorientierten DNS-Ressourcen eingerichtet. Auch nach der Einrichtung des zonenorientierten DNS werden die clusterweiten DNS-Ressourcen weiterhin als Backup-DNS ausgeführt. Ihre zonenorientierten DNS-Ressourcen sind vom clusterweiten DNS getrennt und das Ändern des zonenorientierten DNS wirkt sich nicht auf das clusterweite DNS aus.

Verwenden Sie die DNS-Cache-Bezeichnung nicht, wenn Sie zonenorientiertes DNS in Ihrem Cluster verwenden.

Zonenorientiertes DNS einrichten

Führen Sie den folgenden Schritt aus, um zonenbewusster DNS in Ihrem Mehrzonencluster einzurichten.

  1. Aktualisieren Sie alle DNS-Ausgangsnetzwerkrichtlinien, die von Zone-Aware DNS betroffen sind, beispielsweise Richtlinien, die für den DNS-Ausgang auf Pod- oder Namespace-Selektoren basieren. Führen Sie den folgenden Befehl aus, um eine Liste Ihrer Netzwerkrichtlinien anzuzeigen.

    kubectl get networkpolicy --all-namespaces -o yaml
    
  2. Beschriften Sie die coredns ConfigMap im Namensbereich kube-system mit ibm-cloud.kubernetes.io/deploy-zone-aware-dns=true.

    kubectl label cm -n kube-system coredns --overwrite "ibm-cloud.kubernetes.io/deploy-zone-aware-dns=true"
    
  3. Aktualisieren Sie den Cluster-Master, um die zonenbasierten DNS-Ressourcen bereitzustellen.

    ibmcloud ks cluster master refresh -c CLUSTER_NAME_OR_ID
    
  4. Vergewissern Sie sich, dass der Aktualisierungsvorgang abgeschlossen wurde. Überprüfen Sie dazu, den Masterstatus (Master Health) in den Cluster-Details.

    ibmcloud ks cluster get -c CLUSTER_NAME_OR_ID
    
  5. Wenn Sie Stubdomänen und vorgelagerte DNS-Server für CoreDNS angepasst haben, müssen Sie auch den NodeLocal-DNS-Cache anpassen, und zwar unter Angabe genau dieser Stubdomänen und vorgelagerten DNS-Server.

  6. Legen Sie eine Umgebungsvariable für die Zonen des Clusters fest.

    ZONES=$(kubectl get nodes --no-headers --ignore-not-found=true -o jsonpath='{range .items[*]}{.metadata.labels.topology\.kubernetes\.io/zone}{"\n"}{end}' | uniq)
    
  7. Starten Sie CoreDNS und die CoreDNS-Autoscaler-Pods in allen Zonen.

    for ZONE in ${ZONES}; do
        kubectl scale deployment -n kube-system "coredns-autoscaler-${ZONE}" --replicas=1
    done
    
  8. Überprüfen Sie, dass CoreDNS und die CoreDNS-Autoscaler-Pods in allen Zonen ausgeführt werden.

    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
    
  9. Starten Sie die Pods des NodeLocal-DNS-Cache in allen Workerknoten.

    kubectl label nodes --all --overwrite "ibm-cloud.kubernetes.io/zone-aware-dns-enabled=true"
    
  10. Überprüfen Sie, dass die Pods des NodeLocal-DNS-Cache in allen Workerknoten ausgeführt werden.

    for ZONE in ${ZONES}; do
        kubectl get pods -n kube-system -l "k8s-app=node-local-dns-${ZONE}" -o wide
    done
    
  11. Ordnen Sie Ihren Worker-Pools eine Bezeichnung zu, damit zukünftige Workerknoten die Bezeichnung ibm-cloud.kubernetes.io/zone-aware-dns-enabled=true übernehmen.

Zonenorientiertes DNS inaktivieren und löschen

Zum Entfernen von zonenorientiertem DNS müssen Sie zuerst das zonenorientierte DNS in jeder Zone Ihres Mehrzonenclusters inaktivieren. Anschließend löschen Sie die zonenorientierten DNS-Ressourcen.

  1. Entfernen Sie das. ibm-cloud.kubernetes.io/zone-aware-dns-enabled=trueBezeichnung aus Ihren Worker-Pools

  2. Legen Sie eine Umgebungsvariable für die Zonen im Cluster fest.

    ZONES=$(kubectl get nodes --no-headers --ignore-not-found=true -o jsonpath='{range .items[*]}{.metadata.labels.topology\.kubernetes\.io/zone}{"\n"}{end}' | uniq)
    
  3. Stoppen Sie die Pods des NodeLocal-DNS-Cache auf allen Workerknoten.

    kubectl label nodes --all --overwrite "ibm-cloud.kubernetes.io/zone-aware-dns-enabled-"
    
  4. Stoppen Sie die CoreDNS-Autoscaler-Pods in allen Zonen.

    for ZONE in ${ZONES}; do
        kubectl scale deployment -n kube-system "coredns-autoscaler-${ZONE}" --replicas=0
    done
    
  5. Überprüfen Sie, dass die CoreDNS-Autoscaler-Pods in allen Zonen nicht mehr ausgeführt werden.

    for ZONE in ${ZONES}; do
        kubectl get pods -n kube-system -l "k8s-app=coredns-autoscaler-${ZONE}"
    done
    
  6. Stoppen Sie die CoreDNS-Pods in allen Zonen.

    for ZONE in ${ZONES}; do
        kubectl scale deployment -n kube-system "coredns-${ZONE}" --replicas=0
    done
    
  7. Entfernen Sie die Bezeichnung ibm-cloud.kubernetes.io/deploy-zone-aware-dns=true aus der Konfigurationszuordnung coredns im Namensbereich kube-system.

    kubectl label cm -n kube-system coredns --overwrite "ibm-cloud.kubernetes.io/deploy-zone-aware-dns-"
    
  8. Aktualisieren Sie den Cluster-Master, um die zonenorientierten DNS-Ressourcen zu löschen.

    ibmcloud ks cluster master refresh --cluster CLUSTER_NAME_OR_ID
    
  9. Vergewissern Sie sich, dass der Aktualisierungsvorgang abgeschlossen wurde. Überprüfen Sie dazu, den Masterstatus (Master Health) in den Cluster-Details.

    ibmcloud ks cluster get -c CLUSTER_NAME_OR_ID