Configuration du fournisseur DNS de cluster

Un nom DNS (Domain Name System) est affecté à chaque service dans votre cluster IBM Cloud® Kubernetes Service et est enregistré par le fournisseur DNS de cluster pour résoudre les demandes DNS. Pour plus d’informations sur le DNS pour les services et les pods, consultez la documentation Kubernetes.

Le fournisseur DNS du cluster est CoreDNS, un serveur DNS polyvalent et de référence qui offre une intégration rétrocompatible, mais extensible, avec Kubernetes. Etant donné que CoreDNS est un simple fichier exécutable et un processus unique, il a moins de dépendances et de pièces mobiles susceptibles de présenter des problèmes que les précédents fournisseurs DSN de cluster. Le projet est également écrit dans le même langage que le projet Kubernetes, Go, ce qui contribue à protéger la mémoire. Enfin, CoreDNS prend en charge des cas d'utilisation plus flexibles que les autres fournisseurs de DNS en cluster, car vous pouvez créer des entrées DNS personnalisées, telles que les configurations courantes décrites dans la documentation CoreDNS.

CoreDNS et modifications de la configuration NodeLocal du cache DNS dans la version 1.34 et les versions ultérieures
Le délai de mise en cache DNS par défaut dans les configurations DNS NodeLocal et CoreDNS a été augmenté de 30 à 120 secondes. Cette modification s'applique aux ConfigMap paramètres de mise en cache DNS. Certains utilisateurs atteignaient les limites de trafic de pDNS (ou UDP ) en raison des fréquentes recherches DNS causées par des durées de cache courtes. Un intervalle de mise en cache de 30 secondes est rarement nécessaire, sauf pour les enregistrements DNS qui changent très fréquemment, par exemple les points de contrôle d'état. Pour la plupart des charges de travail, un cache par défaut de 120 secondes offre de meilleures performances et réduit le trafic DNS inutile. Les utilisateurs qui ont besoin de temps de cache plus courts pour des cas d'utilisation spécifiques peuvent remplacer ce paramètre.

Mise à l'échelle automatique du fournisseur DNS de cluster

Par défaut, CoreDNS comprend un déploiement pour la mise à l'échelle automatique des pods CoreDNS en réponse au nombre de noeuds worker et de coeurs présents dans le cluster. Vous pouvez affiner les paramètres du programme de mise à l'échelle automatique de CoreDNS en modifiant l'élément configmap correspondant à la mise à l'échelle automatique de CoreDNS. Par exemple, si vos applications utilisent beaucoup le fournisseur DNS de cluster, vous devrez peut-être augmenter le nombre minimal de pods CoreDNS pour prendre en charge ces applications. Pour plus d'informations, consultez la documentation d' Kubernetes.

Avant de commencer : Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  1. Vérifiez que le déploiement du programme de mise à l'échelle automatique de CoreDNS est disponible. Dans votre sortie CLI, vérifiez que la colonne AVAILABLE contient la valeur 1 (un déploiement est disponible).

    kubectl get deployment -n kube-system coredns-autoscaler
    

    Exemple de sortie

    NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
    coredns-autoscaler   1/1     1            1           69d
    
  2. Editez les paramètres par défaut du programme de mise à l'échelle automatique de CoreDNS. Recherchez la zone data.linear, qui correspond par défaut à un pod CoreDNS par 16 noeuds worker ou 256 coeurs, avec un minimum de deux pods CoreDNS, quelle que soit la taille du cluster (preventSinglePointFailure: true). Pour plus d'informations, voir la documentation Kubernetes.

    kubectl edit configmap -n kube-system coredns-autoscaler
    

    Exemple de sortie

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

Personnalisation du fournisseur DNS de cluster

Vous pouvez personnaliser CoreDNS en éditant la mappe de configuration de CoreDNS. Par exemple, vous souhaiterez peut-être configurer des domaines de module de remplacement et des serveurs DNS en amont pour résoudre les services qui pointent vers des hôtes externes. De plus, vous pouvez configurer plusieurs fichiers Corefiles dans l' CoreDNS ConfigMap. Pour plus d'informations, consultez la documentation d' Kubernetes.

Le cache DNS NodeLocal repose sur CoreDNS pour gérer le cache de la résolution DNS. Conservez en l'état les configurations applicables du cache DNS NodeLocal et de CoreDNS, comme les domaines de module de remplacement, pour garantir la cohérence de la résolution DNS.

Avant de commencer : Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  1. Vérifiez que le déploiement de CoreDNS est disponible. Dans votre sortie CLI, vérifiez que la colonne AVAILABLE contient la valeur 1 (un déploiement est disponible).

    kubectl get deployment -n kube-system coredns
    

    Exemple de sortie

    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    coredns   3/3     3            3           69d
    
  2. Editez les paramètres par défaut pour la mappe de configuration de CoreDNS. Utilisez un fichier Corefile dans la section data de la mappe de configuration pour personnaliser des domaines de module de remplacement et des serveurs DNS en amont. Pour plus d'informations, consultez la documentation d' Kubernetes.

    Le plug-in CoreDNS proxy est obsolète et remplacé par le plug-in forward. Si vous mettez à jour la mappe de configuration (configmap) de CoreDNS, veillez à remplacer toutes les instances de proxy par forward.

    kubectl edit configmap -n kube-system coredns
    

    Exemple de sortie pour 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
            }
    
  3. Facultatif : ajoutez des fichiers Corefile personnalisés à la mappe de configuration de CoreDNS. Dans l'exemple suivant, incluez le dans import <MyCoreFile> la section data.Corefile et complétez la section data.<MyCorefile> avec vos informations Corefile personnalisées. Pour plus d'informations, consultez la documentation relative à l'importation de fichiers Corefile.

    Le plug-in CoreDNS proxy est obsolète et remplacé par le plug-in forward. Si vous mettez à jour la mappe de configuration (configmap) de CoreDNS, veillez à remplacer toutes les instances de proxy par forward.

    kubectl edit configmap -n kube-system coredns
    

    Exemple de sortie de fichier Corefile personnalisé

    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. Au bout de quelques minutes, les pods CoreDNS récupèrent les modifications de mappe de configuration.

Configuration du cache DNS NodeLocal

Configurez l'agent de mise en cache DNS NodeLocal sur certains noeuds worker afin d'améliorer les performances et la disponibilité DNS de cluster dans votre cluster IBM Cloud Kubernetes Service. Pour plus d'informations, consultez la documentation d' Kubernetes.

Par défaut, les requêtes DNS du cluster pour les pods utilisant une politique DNSClusterFirst sont envoyées au service DNS du cluster. Si vous activez la mise en cache DNS NodeLocal sur un noeud worker, les demandes DNS de cluster pour les pods qui se trouvent sur le noeud worker sont envoyées au cache DNS local, qui est à l'écoute sur l'adresse IP de lien local 169.254.20.10. Le cache DNS écoute également l'adresse IP de cluster du service kube-dns dans l'espace de noms kube-system.

N'ajoutez pas le libellé de cache DNS lorsque vous utilisez déjà zone-aware DNS dans votre cluster. De plus, le cache DNS NodeLocal repose sur CoreDNS pour gérer le cache de la résolution DNS. Conservez en l'état les configurations applicables du cache DNS NodeLocal et de CoreDNS, comme les domaines de module de remplacement, pour garantir la cohérence de la résolution DNS.

1.34 s de version et versions antérieures
NodeLocal Le cache DNS est facultatif. Vous devez l'activer manuellement en ajoutant l'étiquette ibm-cloud.kubernetes.io/node-local-dns-enabled=true aux nœuds de travail.
1.35 s de version et versions ultérieures
NodeLocal Le cache DNS est activé par défaut sur tous les nœuds de travail. Les clusters qui sont mis à niveau vers la version 1.35 ont NodeLocal DNS activé automatiquement à moins que vous ne choisissiez de ne pas le faire. Pour empêcher l'activation automatique, appliquez l'étiquette ibm-cloud.kubernetes.io/node-local-dns-disabled=true à vos nœuds de travail avant de procéder à la mise à niveau.

Pour plus d'informations sur les changements de version 1.35, voir 1.35 information sur la version.

Activation du cache DNS NodeLocal

Activez le cache DNS NodeLocal pour un ou plusieurs des noeuds worker figurant dans votre cluster Kubernetes.

1.35 s de version et versions ultérieures
NodeLocal Le DNS est activé par défaut sur tous les nœuds de travail. Suivez ces étapes uniquement si vous avez désactivé NodeLocal DNS ou si vous ajoutez de nouveaux nœuds de travail avec NodeLocal DNS désactivé.
1.34 s de version et versions antérieures
NodeLocal Le DNS est opt-in. Suivez les étapes suivantes pour l'activer sur vos nœuds de travail.

Les étapes suivantes mettent à jour les pods DNS qui s'exécutent sur des noeuds worker particuliers. Vous pouvez également affecter un libellé au pool de noeuds worker pour que de futurs noeuds héritent de ce libellé.

Avant de commencer, mettez à jour toutes les politiques de réseau de sortie DNS concernées par cette fonctionnalité, telles que celles qui s'appuient sur des sélecteurs de pod ou d'espace de noms pour la sortie DNS.

kubectl get networkpolicy --all-namespaces -o yaml
  1. Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  2. Si vous avez personnalisé les domaines de module de remplacement et les serveurs DNS en amont pour CoreDNS, vous devez également personnaliser le cache DNS NodeLocal avec ces domaines de module de remplacement et ces serveurs DNS en amont.

  3. Répertoriez les noeuds présents dans votre cluster. Les pods d'agent de mise en cache DNS NodeLocal font partie d'un ensemble de démons qui s'exécutent sur chaque noeud.

    kubectl get nodes
    
  4. Ajoutez le libellé ibm-cloud.kubernetes.io/node-local-dns-enabled=true au noeud worker. Le libellé démarre le pod d'agent de mise en cache DNS sur le noeud worker.

    1. Ajoutez le libellé à un ou plusieurs noeuds worker.
    2. Vérifiez que le noeud comporte le libellé en vous assurant que la zone NODE-LOCAL-DNS-ENABLED a pour valeur true.
        kubectl get nodes -L "ibm-cloud.kubernetes.io/node-local-dns-enabled"
        ```
        Exemple de sortie
    
        ```sh {: screen}
        NAME          STATUS                      ROLES    AGE   VERSION       NODE-LOCAL-DNS-ENABLED
        10.xxx.xx.xxx Ready,SchedulingDisabled    <none>   28h   v1.35+IKS   true
        ```
    3. Assurez-vous que le pod d'agent de mise en cache DNS s'exécute sur le noeud worker.
    
    ```sh {: pre}
        kubectl get pods -n kube-system -l k8s-app=node-local-dns -o wide
        ```
        Exemple de sortie
    
        ```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. Répétez les étapes précédentes pour chaque noeud worker afin d'activer la mise en cache DNS.

Désactivation du cache DNS NodeLocal

Vous pouvez désactiver le cache DNS NodeLocal pour un ou plusieurs noeuds worker.

1.35 s de version et versions ultérieures

Pour désactiver NodeLocal DNS, qui est activé par défaut, ajoutez l'étiquette ibm-cloud.kubernetes.io/node-local-dns-disabled=true à vos nœuds de travail.

kubectl label node --all --overwrite "ibm-cloud.kubernetes.io/node-local-dns-disabled=true"
1.34 s de version et versions antérieures

Pour désactiver NodeLocal DNS, supprimez l'étiquette ibm-cloud.kubernetes.io/node-local-dns-enabled de vos nœuds de travail.

  1. Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  2. Retirez le libellé ibm-cloud.kubernetes.io/node-local-dns-enabled du noeud worker. Cette action met fin au pod de l'agent de mise en cache DNS sur le noeud worker.

    Pour retirer le libellé de tous les noeuds worker du cluster, exécutez la commande suivante :

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

    Pour retirer le libellé d'un noeud worker en particulier, exécutez la commande suivante :

    kubectl label node <node_name> "ibm-cloud.kubernetes.io/node-local-dns-enabled-"
    
    1. Vérifiez que le libellé est retiré en vous assurant que la zone NODE-LOCAL-DNS-ENABLED est vide.
        kubectl get nodes -L "ibm-cloud.kubernetes.io/node-local-dns-enabled"
        ```
        Exemple de sortie
    
        ```sh {: screen}
        NAME          STATUS                      ROLES    AGE   VERSION       NODE-LOCAL-DNS-ENABLED
        10.xxx.xx.xxx Ready,SchedulingDisabled    <none>   28h   v1.35+IKS   
        ```
    2. Vérifiez que le pod ne s'exécute plus sur le noeud sur lequel le cache DNS est désactivé. La sortie ne contient aucun pod.
    
    ```sh {: pre}
        kubectl get pods -n kube-system -l k8s-app=node-local-dns -o wide
        ```
        Exemple de sortie
    
        ```sh {: screen}
        No resources found.
        ```
    
  3. Répétez les étapes précédentes pour chaque noeud worker afin de désactiver la mise en cache DNS.

Personnalisation du cache DNS NodeLocal

Vous pouvez personnaliser le cache DNS NodeLocal en éditant l'une des deux mappes de configuration.

  • node-local-dns ConfigMap: personnalisez la configuration du cache DNS NodeLocal.
  • node-local-dns-config ConfigMap: étendez la configuration du cache DNS NodeLocal en personnalisant les domaines stub ou les serveurs DNS en amont afin de résoudre les services pointant vers des hôtes externes.

Le cache DNS NodeLocal repose sur CoreDNS pour gérer le cache de la résolution DNS. Conservez en l'état les configurations applicables du cache DNS NodeLocal et de CoreDNS, comme les domaines de module de remplacement, pour garantir la cohérence de la résolution DNS.

Edition de la mappe de configuration node-local-dns pour les mises à jour de configuration générales

Editez la mappe de configuration node-local-dns pour personnaliser la configuration du cache DNS NodeLocal.

Avant de commencer : Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  1. Vérifiez que le démon du cache DNS NodeLocal est disponible.

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

    Exemple de sortie

    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. Editez les paramètres par défaut ou ajouter des fichiers Corefile personnalisés à la mappe de configuration du cache DNS NodeLocal. Chaque fichier Corefile que vous importez doit utiliser le chemin coredns. Pour plus d’informations, consultez la documentation d’ Kubernetes.

    Seul un ensemble limité de plug-ins est pris en charge pour le cache DNS NodeLocal.

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

    Exemple de sortie

    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. Au bout de quelques minutes, les pods de cache DNS NodeLocal récupèrent les modifications de mappe de configuration.

Edition de la mappe de configuration node-local-dns-config pour une extension à l'aide de domaines de module de remplacement ou de serveurs en amont

Editez la mappe de configuration node-local-dns-config pour étendre la configuration du cache DNS NodeLocal, par exemple en personnalisant les domaines de module de remplacement ou les serveurs DNS en amont. Pour plus d’informations, consultez la documentation d’ Kubernetes.

Avant de commencer : Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  1. Vérifiez que le démon du cache DNS NodeLocal est disponible.

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

    Exemple de sortie

    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. Confirmez que le cache DNS NodeLocal comporte une mappe de configuration.

    1. Déterminez si la mappe de configuration du cache DNS NodeLocal existe.
        kubectl get cm -n kube-system node-local-dns-config
        ```
        Exemple de sortie s'il n'existe aucune mappe de configuration
    
        ```sh {: screen}
        Error from server (NotFound): ConfigMaps "node-local-dns-config" not found
        ```
    2. Si la mappe de configuration n'existe pas, créez une mappe de configuration de cache DNS `NodeLocal`.
    
    ```sh {: pre}
        kubectl create cm -n kube-system node-local-dns-config
        ```
        Exemple de sortie
    
        ```sh {: screen}
        configmap/node-local-dns-config created
        ```
    
  3. Editez la mappe de configuration du cache DNS NodeLocal. La mappe de configuration utilise la syntaxe KubeDNS pour personnaliser les domaines de module de remplacement et les serveurs DNS en amont. Pour plus d'informations, consultez la documentation d' Kubernetes.

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

    Exemple de sortie

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: node-local-dns-config
      namespace: kube-system
    data:
      stubDomains: |
          {"abc.com" : ["1.2.3.4"]}
    
  4. Au bout de quelques minutes, les pods de cache DNS NodeLocal récupèrent les modifications de mappe de configuration.

Configuration du service DNS reconnaissant les zones

Configurez le service DNS reconnaissant les zones pour améliorer les performances et la disponibilité DNS de cluster dans votre cluster IBM Cloud Kubernetes Service multizone. Cette configuration étend le cache DNS NodeLocal pour privilégier le passage du trafic DNS de cluster au sein de la même zone.

Par défaut, votre cluster est configuré avec des ressources de service DNS à l'échelle du cluster et non avec des ressources de service DNS reconnaissant les zones. Même après que vous avez configuré le service DNS reconnaissant les zones, les ressources de service DNS à l'échelle du cluster restent en cours d'exécution en tant que service DNS de sauvegarde. Les ressources de service DNS reconnaissant les zones sont distinctes des ressources de service DNS à l'échelle du cluster, et le changement du service DNS reconnaissant les zones n'a aucun impact sur le service DNS à l'échelle du cluster.

N'utilisez pas le libellé de cache DNS lorsque vous utilisez le service DNS reconnaissant les zones dans votre cluster.

Configuration du service DNS reconnaissant les zones

Procédez comme suit pour configurer un serveur de noms de domaine prenant en compte les zones dans votre cluster multizone.

  1. Mettez à jour toutes les politiques de réseau de sortie DNS concernées par le DNS sensible à la zone, telles que les politiques qui s'appuient sur des sélecteurs de pod ou d'espace de noms pour la sortie DNS. Exécutez la commande suivante pour obtenir la liste de vos politiques réseau.

    kubectl get networkpolicy --all-namespaces -o yaml
    
  2. Libellez coredns ConfigMap dans l'espace de nom kube-system avec 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. Actualisez le maître cluster pour déployer les ressources DNS sensibles aux zones.

    ibmcloud ks cluster master refresh -c CLUSTER_NAME_OR_ID
    
  4. Surveillez l'achèvement de l'opération d'actualisation en examinant la zone Santé du maître dans les détails du cluster.

    ibmcloud ks cluster get -c CLUSTER_NAME_OR_ID
    
  5. Si vous avez personnalisé les domaines de module de remplacement et les serveurs DNS en amont pour CoreDNS, vous devez également personnaliser le cache DNS NodeLocal avec ces domaines de module de remplacement et ces serveurs DNS en amont.

  6. Définissez une variable d'environnement pour les zones du cluster.

    ZONES=$(kubectl get nodes --no-headers --ignore-not-found=true -o jsonpath='{range .items[*]}{.metadata.labels.topology\.kubernetes\.io/zone}{"\n"}{end}' | uniq)
    
  7. Démarrez les pods de CoreDNS et du programme de mise à l'échelle automatique de CoreDNS dans toutes les zones.

    for ZONE in ${ZONES}; do
        kubectl scale deployment -n kube-system "coredns-autoscaler-${ZONE}" --replicas=1
    done
    
  8. Vérifiez que les pods de CoreDNS et du programme de mise à l'échelle automatique de CoreDNS sont en cours d'exécution dans toutes les zones.

    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. Démarrez les pods du cache DNS NodeLocal sur tous les noeuds worker.

    kubectl label nodes --all --overwrite "ibm-cloud.kubernetes.io/zone-aware-dns-enabled=true"
    
  10. Vérifiez que les pods du cache DNS NodeLocal sont en cours d'exécution sur tous les noeuds worker.

    for ZONE in ${ZONES}; do
        kubectl get pods -n kube-system -l "k8s-app=node-local-dns-${ZONE}" -o wide
    done
    
  11. Libellez vos pools de noeuds worker de sorte que les futurs noeuds worker héritent du libellé ibm-cloud.kubernetes.io/zone-aware-dns-enabled=true.

Désactivation et suppression du service DNS reconnaissant les zones

Pour retirer le service DNS reconnaissant les zones, vous devez d'abord le désactiver dans chaque zone de votre cluster multizone. Ensuite, vous pouvez supprimer les ressources du service DNS reconnaissant les zones.

  1. Supprimer le. ibm-cloud.kubernetes.io/zone-aware-dns-enabled=trueétiquette de vos pools de travailleurs

  2. Définissez une variable d'environnement pour les zones du cluster.

    ZONES=$(kubectl get nodes --no-headers --ignore-not-found=true -o jsonpath='{range .items[*]}{.metadata.labels.topology\.kubernetes\.io/zone}{"\n"}{end}' | uniq)
    
  3. Arrêtez les pods du cache DNS NodeLocal sur tous les noeuds worker.

    kubectl label nodes --all --overwrite "ibm-cloud.kubernetes.io/zone-aware-dns-enabled-"
    
  4. Arrêtez les pods du programme de mise à l'échelle automatique de CoreDNS dans toutes les zones.

    for ZONE in ${ZONES}; do
        kubectl scale deployment -n kube-system "coredns-autoscaler-${ZONE}" --replicas=0
    done
    
  5. Vérifiez que les pods du programme de mise à l'échelle automatique de CoreDNS ne sont plus en cours d'exécution dans toutes les zones.

    for ZONE in ${ZONES}; do
        kubectl get pods -n kube-system -l "k8s-app=coredns-autoscaler-${ZONE}"
    done
    
  6. Arrêtez les pods de CoreDNS dans toutes les zones.

    for ZONE in ${ZONES}; do
        kubectl scale deployment -n kube-system "coredns-${ZONE}" --replicas=0
    done
    
  7. Retirez le libellé ibm-cloud.kubernetes.io/deploy-zone-aware-dns=true de la mappe de configuration coredns dans l'espace de noms kube-system.

    kubectl label cm -n kube-system coredns --overwrite "ibm-cloud.kubernetes.io/deploy-zone-aware-dns-"
    
  8. Actualisez le maître cluster sur les ressources de service DNS reconnaissant les zones qui sont supprimées.

    ibmcloud ks cluster master refresh --cluster CLUSTER_NAME_OR_ID
    
  9. Surveillez l'achèvement de l'opération d'actualisation en examinant la zone Santé du maître dans les détails du cluster.

    ibmcloud ks cluster get -c CLUSTER_NAME_OR_ID