IBM Cloud Docs
Cluster-DNS-Provider konfigurieren

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 Kubernetes.

Der Cluster-DNS-Anbieter ist CoreDNS, ein allgemeiner, autoritativer DNS-Server, der eine rückwä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 z. B. die üblichen Konfigurationen in den CoreDNS-Dokumenten.

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 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. Zusätzlich können Sie mehrere Corefiles innerhalb der CoreDNS ConfigMap konfigurieren. Weitere Informationen finden Sie in der Dokumentation 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 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. Im folgenden Beispiel fügen Sie import <MyCoreFile> in den Abschnitt data.Corefile ein und ergänzen den Abschnitt data.<MyCorefile> mit Ihren eigenen 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 den Dokumenten von Kubernetes.

Standardmäßig werden Cluster-DNS-Anfragen für Pods, die eine ClusterFirst DNS-Richtlinie verwenden, an den Cluster-DNS-Dienst 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.

Der NodeLocal-DNS-Cache ist allgemein in Clustern verfügbar, die Kubernetes 1.18 oder höher ausführen; standardmäßig ist er jedoch inaktiviert.

NodeLocal-DNS-Cache aktivieren

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

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-Egress-Netzwerkrichtlinien, die von dieser Funktion betroffen sind, z. B. Richtlinien, die auf Pod- oder Namespace-Selektoren für DNS-Egress angewiesen sind.

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

      NAME          STATUS                      ROLES    AGE   VERSION       NODE-LOCAL-DNS-ENABLED
      10.xxx.xx.xxx Ready,SchedulingDisabled    <none>   28h   v1.32+IKS   true
      
    3. Stellen Sie sicher, dass der Pod des DNS-Caching-Agenten auf dem Workerknoten ausgeführt wird.

      kubectl get pods -n kube-system -l k8s-app=node-local-dns -o wide
      

      Beispielausgabe

      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.

  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

      NAME          STATUS                      ROLES    AGE   VERSION       NODE-LOCAL-DNS-ENABLED
      10.xxx.xx.xxx Ready,SchedulingDisabled    <none>   28h   v1.32+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.

      kubectl get pods -n kube-system -l k8s-app=node-local-dns -o wide
      

      Beispielausgabe

      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 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 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

      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.

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

      Beispielausgabe

      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 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-Egress-Netzwerkrichtlinien, die von zonenspezifischem DNS betroffen sind, z. B. Richtlinien, die auf Pod- oder Namespace-Selektoren für DNS-Egress beruhen. Führen Sie den folgenden Befehl aus, um eine Liste Ihrer Netzwerkrichtlinien zu erhalten.

    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 die ibm-cloud.kubernetes.io/zone-aware-dns-enabled=true Label 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>