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.
-
Ü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-autoscalerBeispielausgabe
NAME READY UP-TO-DATE AVAILABLE AGE coredns-autoscaler 1/1 1 1 69d -
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-autoscalerBeispielausgabe
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.
-
Ü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 corednsBeispielausgabe
NAME READY UP-TO-DATE AVAILABLE AGE coredns 3/3 3 3 69d -
Bearbeiten Sie die Standardeinstellungen für die CoreDNS--Konfigurationszuordnung. Verwenden Sie eine Corefile im Abschnitt
datader Konfigurationszuordnung, um Stub-Domänen und vorgeordnete Namensserver (Upstream-Namensserver) anzupassen. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes.Das CoreDNS-Plug-in
proxywird nicht mehr verwendet und wird durch das Plug-inforwardersetzt. Stellen Sie beim Aktualisieren der CoreDNS-Konfigurationszuordnung sicher, dass alle Instanzen vonproxydurchforwardersetzt werden.kubectl edit configmap -n kube-system corednsCoreDNS-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 } -
Optional: Fügen Sie angepasste Corefiles zur CoreDNS-Konfigurationszuordnung hinzu. Fügen Sie im folgenden Beispiel den Abschnitt in
import <MyCoreFile>dendata.CorefileAbschnitt ein und vervollständigen Sie den Abschnittdata.<MyCorefile>mit Ihren individuellen Corefile-Informationen. Weitere Informationen finden Sie in der Dokumentation zum Corefile-Import.Das CoreDNS-Plug-in
proxywird nicht mehr verwendet und wird durch das Plug-inforwardersetzt. Stellen Sie beim Aktualisieren der CoreDNS-Konfigurationszuordnung sicher, dass alle Instanzen vonproxydurchforwardersetzt werden.kubectl edit configmap -n kube-system corednsBeispielausgabe 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 } -
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
NodeLocalDNS-Cache ist opt-in. Sie müssen sie manuell aktivieren, indem Sie das Labelibm-cloud.kubernetes.io/node-local-dns-enabled=truezu den Arbeitsknoten hinzufügen.- Versionen 1.35 und höher
NodeLocalDer 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 Labelibm-cloud.kubernetes.io/node-local-dns-disabled=trueauf 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
-
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. -
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 -
Fügen Sie die Bezeichnung
ibm-cloud.kubernetes.io/node-local-dns-enabled=truezum Workerknoten hinzu. Die Bezeichnung startet den Pod des DNS-Caching-Agenten auf dem Workerknoten.- 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"
-
- Überprüfen Sie, ob der Knoten mit der Bezeichnung versehen wurde, indem Sie prüfen, ob für das Feld
NODE-LOCAL-DNS-ENABLEDder Werttruefestgelegt 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> ``` - Fügen Sie die Bezeichnung zu einem oder mehreren Workerknoten hinzu.
-
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=truezu 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-enabledvon Ihren Worker Nodes.
-
Entfernen Sie die Bezeichnung
ibm-cloud.kubernetes.io/node-local-dns-enabledaus 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-"- Überprüfen Sie, dass die Bezeichnung entfernt wurde, indem Sie prüfen, ob das Feld
NODE-LOCAL-DNS-ENABLEDleer 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. ``` - Überprüfen Sie, dass die Bezeichnung entfernt wurde, indem Sie prüfen, ob das Feld
-
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.
- Konfigurationszuordnung
node-local-dns: Anpassen derNodeLocal-DNS-Cachekonfiguration. - ** Konfigurationszuordnung
node-local-dns-config**: Erweitern derNodeLocal-DNS-Cachekonfiguration durch Anpassen von Stubdomänen oder Upstream-DNS-Servern, um Services aufzulösen, die auf externe Hosts verweisen.
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.
-
Überprüfen Sie, ob die Dämongruppe (DaemonSet) des DNS-Cache
NodeLocalverfügbar ist.kubectl get ds -n kube-system node-local-dnsBeispielausgabe
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 -
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 Pfadcorednsverwenden. Weitere Informationen finden Sie in der Dokumentation zu Kubernetes.Für den
NodeLocalDNS-Cache wird nur eine begrenzte Anzahl von Plug-ins unterstützt.kubectl edit configmap -n kube-system node-local-dnsBeispielausgabe
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 ... -
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.
-
Überprüfen Sie, ob die Dämongruppe (DaemonSet) des DNS-Cache
NodeLocalverfügbar ist.kubectl get ds -n kube-system node-local-dnsBeispielausgabe
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 -
Stellen Sie sicher, dass der
NodeLocal-DNS-Cache eine Konfigurationszuordnung (Configmap) besitzt.- 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 ``` - Stellen Sie fest, ob die Konfigurationszuordnung (Configmap) für den
-
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-configBeispielausgabe
apiVersion: v1 kind: ConfigMap metadata: name: node-local-dns-config namespace: kube-system data: stubDomains: | {"abc.com" : ["1.2.3.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.
-
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 -
Beschriften Sie die
corednsConfigMap im Namensbereichkube-systemmitibm-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" -
Aktualisieren Sie den Cluster-Master, um die zonenbasierten DNS-Ressourcen bereitzustellen.
ibmcloud ks cluster master refresh -c CLUSTER_NAME_OR_ID -
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 -
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. -
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) -
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 -
Ü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 -
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" -
Ü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 -
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.
-
Entfernen Sie das.
ibm-cloud.kubernetes.io/zone-aware-dns-enabled=trueBezeichnung aus Ihren Worker-Pools -
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) -
Stoppen Sie die Pods des
NodeLocal-DNS-Cache auf allen Workerknoten.kubectl label nodes --all --overwrite "ibm-cloud.kubernetes.io/zone-aware-dns-enabled-" -
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 -
Ü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 -
Stoppen Sie die CoreDNS-Pods in allen Zonen.
for ZONE in ${ZONES}; do kubectl scale deployment -n kube-system "coredns-${ZONE}" --replicas=0 done -
Entfernen Sie die Bezeichnung
ibm-cloud.kubernetes.io/deploy-zone-aware-dns=trueaus der Konfigurationszuordnungcorednsim Namensbereichkube-system.kubectl label cm -n kube-system coredns --overwrite "ibm-cloud.kubernetes.io/deploy-zone-aware-dns-" -
Aktualisieren Sie den Cluster-Master, um die zonenorientierten DNS-Ressourcen zu löschen.
ibmcloud ks cluster master refresh --cluster CLUSTER_NAME_OR_ID -
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