Dostosowywanie serwera CoreDNS w usłudze Azure Kubernetes Service
Usługa Azure Kubernetes Service (AKS) używa projektu CoreDNS do zarządzania klastrem DNS i rozpoznawania ich we wszystkich klastrach 1.12.x i wyższych. Aby uzyskać więcej informacji na temat dostosowywania coreDNS i platformy Kubernetes, zobacz oficjalną dokumentację nadrzędną.
Usługa AKS jest usługą zarządzaną, więc nie można modyfikować głównej konfiguracji coreDNS (a CoreFile). Zamiast tego należy użyć narzędzia Kubernetes ConfigMap , aby zastąpić ustawienia domyślne. Aby wyświetlić domyślne obiekty ConfigMaps usługi AKS CoreDNS, użyj kubectl get configmaps --namespace=kube-system coredns -o yaml
polecenia .
W tym artykule pokazano, jak używać obiektów ConfigMap dla podstawowych opcji dostosowywania CoreDNS w usłudze AKS. Takie podejście różni się od konfigurowania sieci CoreDNS w innych kontekstach, takich jak CoreFile.
Uwaga
Wcześniej usługa kube-dns była używana do zarządzania i rozpoznawania nazw DNS klastra, ale jest teraz przestarzała. kube-dns
oferowane różne opcje dostosowywania za pośrednictwem mapy konfiguracji platformy Kubernetes. CoreDNS nie jest do tyłu zgodny z kube-dns. Wszystkie użyte wcześniej dostosowania muszą zostać zaktualizowane dla usługi CoreDNS.
Zanim rozpoczniesz
- W tym artykule założono, że masz istniejący klaster usługi AKS. Jeśli potrzebujesz klastra usługi AKS, możesz go utworzyć przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal.
- Sprawdź używaną wersję serwera CoreDNS. Wartości konfiguracji mogą ulec zmianie między wersjami.
- Podczas tworzenia konfiguracji, takich jak w poniższych przykładach, nazwy w sekcji danych muszą kończyć się wartością .server lub .override. Ta konwencja nazewnictwa jest definiowana w domyślnej konfiguracji AKS CoreDNS ConfigMap, którą można wyświetlić za pomocą
kubectl get configmaps --namespace=kube-system coredns -o yaml
polecenia .
Obsługa wtyczek
Obsługiwane są wszystkie wbudowane wtyczki CoreDNS. Nie są obsługiwane żadne dodatki/wtyczki innych firm.
Ponowne zapisywanie dns
Możesz dostosować nazwę CoreDNS za pomocą usługi AKS, aby wykonać ponowne zapisywanie nazw DNS na bieżąco.
Utwórz plik o nazwie
corednsms.yaml
i wklej następującą przykładową konfigurację. Pamiętaj, aby zastąpić<domain to be rewritten>
element własną w pełni kwalifikowaną nazwą domeny.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: test.server: | <domain to be rewritten>.com:53 { log errors rewrite stop { name regex (.*)\.<domain to be rewritten>\.com {1}.default.svc.cluster.local answer name (.*)\.default\.svc\.cluster\.local {1}.<domain to be rewritten>.com } forward . /etc/resolv.conf # you can redirect this to a specific DNS server such as 10.0.0.10, but that server must be able to resolve the rewritten domain name }
Ważne
Jeśli nastąpi przekierowanie do serwera DNS, takiego jak adres IP usługi CoreDNS, serwer DNS musi być w stanie rozpoznać przepisaną nazwę domeny.
Utwórz ConfigMap przy użyciu
kubectl apply configmap
polecenia i określ nazwę manifestu YAML.kubectl apply -f corednsms.yaml
Sprawdź, czy dostosowania zostały zastosowane przy użyciu elementu
kubectl get configmaps
i określ element coredns-custom ConfigMap.kubectl get configmaps --namespace=kube-system coredns-custom -o yaml
Aby ponownie załadować narzędzie ConfigMap i włączyć harmonogram Kubernetes w celu ponownego uruchomienia usługi CoreDNS bez przestoju, wykonaj ponowne uruchomienie stopniowe przy użyciu polecenia
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Niestandardowy serwer przekazywania dalej
Jeśli musisz określić serwer przekazywania dla ruchu sieciowego, możesz utworzyć ConfigMap, aby dostosować system DNS.
Utwórz plik o nazwie
corednsms.yaml
i wklej następującą przykładową konfigurację. Pamiętaj, aby zastąpićforward
nazwę i adres wartościami własnego środowiska.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: test.server: | # you may select any name here, but it must end with the .server file extension <domain to be rewritten>.com:53 { forward foo.com 1.1.1.1 }
Utwórz ConfigMap przy użyciu
kubectl apply configmap
polecenia i określ nazwę manifestu YAML.kubectl apply -f corednsms.yaml
Aby ponownie załadować narzędzie ConfigMap i włączyć harmonogram Kubernetes w celu ponownego uruchomienia usługi CoreDNS bez przestoju, wykonaj ponowne uruchomienie stopniowe przy użyciu polecenia
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Używanie domen niestandardowych
Możesz skonfigurować domeny niestandardowe, które można rozpoznać tylko wewnętrznie. Na przykład możesz rozwiązać problem z domeną niestandardową puglife.local, która nie jest prawidłową domeną najwyższego poziomu. Bez niestandardowej domeny ConfigMap klaster usługi AKS nie może rozpoznać adresu.
Utwórz nowy plik o nazwie
corednsms.yaml
i wklej następującą przykładową konfigurację. Pamiętaj, aby zaktualizować domenę niestandardową i adres IP przy użyciu wartości dla własnego środowiska.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: puglife.server: | # you may select any name here, but it must end with the .server file extension puglife.local:53 { errors cache 30 forward . 192.11.0.1 # this is my test/dev DNS server }
Utwórz ConfigMap przy użyciu
kubectl apply configmap
polecenia i określ nazwę manifestu YAML.kubectl apply -f corednsms.yaml
Aby ponownie załadować narzędzie ConfigMap i włączyć harmonogram Kubernetes w celu ponownego uruchomienia usługi CoreDNS bez przestoju, wykonaj ponowne uruchomienie stopniowe przy użyciu polecenia
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Domeny wycinków
CoreDNS można również użyć do konfigurowania domen wycinków.
Utwórz plik o nazwie
corednsms.yaml
i wklej następującą przykładową konfigurację. Pamiętaj, aby zaktualizować domeny niestandardowe i adresy IP przy użyciu wartości dla własnego środowiska.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: test.server: | # you may select any name here, but it must end with the .server file extension abc.com:53 { errors cache 30 forward . 1.2.3.4 } my.cluster.local:53 { errors cache 30 forward . 2.3.4.5 }
Utwórz ConfigMap przy użyciu
kubectl apply configmap
polecenia i określ nazwę manifestu YAML.kubectl apply -f corednsms.yaml
Aby ponownie załadować narzędzie ConfigMap i włączyć harmonogram Kubernetes w celu ponownego uruchomienia usługi CoreDNS bez przestoju, wykonaj ponowne uruchomienie stopniowe przy użyciu polecenia
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Wtyczka hostów
Wszystkie wbudowane wtyczki są obsługiwane, więc wtyczka hostów CoreDNS jest dostępna do dostosowywania /etc/hosts, jak również.
Utwórz plik o nazwie
corednsms.yaml
i wklej następującą przykładową konfigurację. Pamiętaj, aby zaktualizować adresy IP i nazwy hostów przy użyciu wartości dla własnego środowiska.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom # this is the name of the configmap you can overwrite with your changes namespace: kube-system data: test.override: | # you may select any name here, but it must end with the .override file extension hosts { 10.0.0.1 example1.org 10.0.0.2 example2.org 10.0.0.3 example3.org fallthrough }
Utwórz ConfigMap przy użyciu
kubectl apply configmap
polecenia i określ nazwę manifestu YAML.kubectl apply -f corednsms.yaml
Aby ponownie załadować narzędzie ConfigMap i włączyć harmonogram Kubernetes w celu ponownego uruchomienia usługi CoreDNS bez przestoju, wykonaj ponowne uruchomienie stopniowe przy użyciu polecenia
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Nieprawidłowe ukończenie domeny wyszukiwania dla internal.cloudapp.net i reddog.microsoft.com
Usługa Azure DNS konfiguruje domyślną domenę <vnetId>.<region>.internal.cloudapp.net
wyszukiwania w sieciach wirtualnych przy użyciu usługi Azure DNS i niefunkcjonalne łączniki reddog.microsoft.com
w sieciach wirtualnych przy użyciu niestandardowych serwerów DNS (zobacz dokumentację rozpoznawania nazw zasobów, aby uzyskać więcej informacji). Platforma Kubernetes konfiguruje ustawienia dns zasobnika, ndots: 5
aby prawidłowo obsługiwać rozpoznawanie nazw hostów usługi klastra. Te dwie konfiguracje łączą się, aby spowodować nieprawidłowe zapytania uzupełniania domeny wyszukiwania, które nigdy nie powiedzie się wysyłane do nadrzędnych serwerów nazw, podczas gdy system przetwarza za pośrednictwem listy wyszukiwania domen. Te nieprawidłowe zapytania powodują opóźnienia rozpoznawania nazw i mogą powodować dodatkowe obciążenie na nadrzędnych serwerach DNS.
Począwszy od wersji 20241025 AKS usługa AKS konfiguruje uwierzytelnianie CoreDNS do odpowiadania za pomocą serwera NXDOMAIN w następujących dwóch przypadkach, aby zapobiec przesłaniu tych nieprawidłowych zapytań uzupełniania domeny wyszukiwania do nadrzędnego systemu DNS:
- Każde zapytanie dotyczące domeny głównej lub poddomeny .
reddog.microsoft.com
- Każde zapytanie dotyczące poddomeny,
internal.cloudapp.net
która ma siedem lub więcej etykiet w nazwie domeny.- Ta konfiguracja umożliwia rozpoznawanie maszyn wirtualnych według nazwy hosta w dalszym ciągu powodzenie. Na przykład usługa CoreDNS wysyła
aks12345.myvnetid.myregion.internal.cloudapp.net
(6 etykiet) do usługi Azure DNS, ale odrzucamcr.microsoft.com.myvnetid.myregion.internal.cloudapp.net
(8 etykiet)
- Ta konfiguracja umożliwia rozpoznawanie maszyn wirtualnych według nazwy hosta w dalszym ciągu powodzenie. Na przykład usługa CoreDNS wysyła
Ten blok jest implementowany w domyślnym bloku serwera w pliku Corefile klastra. W razie potrzeby tę konfigurację odrzucenia można wyłączyć, tworząc niestandardowe bloki serwera dla odpowiedniej domeny z włączoną wtyczką przesyłania dalej:
Utwórz plik o nazwie
corednsms.yaml
i wklej następującą przykładową konfigurację. Pamiętaj, aby zaktualizować adresy IP i nazwy hostów przy użyciu wartości dla własnego środowiska.apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom # this is the name of the configmap you can overwrite with your changes namespace: kube-system data: override-block.server: internal.cloudapp.net:53 { errors cache 30 forward . /etc/resolv.conf } reddog.microsoft.com:53 { errors cache 30 forward . /etc/resolv.conf }
Utwórz ConfigMap przy użyciu
kubectl apply configmap
polecenia i określ nazwę manifestu YAML.kubectl apply -f corednsms.yaml
Aby ponownie załadować narzędzie ConfigMap i włączyć harmonogram Kubernetes w celu ponownego uruchomienia usługi CoreDNS bez przestoju, wykonaj ponowne uruchomienie stopniowe przy użyciu polecenia
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Rozwiązywanie problemów
Ogólne kroki rozwiązywania problemów z siecią CoreDNS, takie jak sprawdzanie punktów końcowych lub rozpoznawania, zobacz Debugowanie rozpoznawania nazw DNS.
Konfigurowanie skalowania zasobników CoreDNS
Nagłe skoki ruchu DNS w klastrach usługi AKS są typowym wystąpieniem ze względu na elastyczność zapewnianą przez usługę AKS dla obciążeń. Te skoki mogą prowadzić do wzrostu zużycia pamięci przez zasobniki CoreDNS. W niektórych przypadkach zwiększone zużycie pamięci może powodować Out of memory
problemy. Aby wyprzedać ten problem, klastry usługi AKS automatycznie skalują zasobniki CoreDNS w celu zmniejszenia użycia pamięci na zasobnik. Domyślne ustawienia tej logiki automatycznego skalowania są przechowywane w coredns-autoscaler
ConfigMap. Można jednak zauważyć, że domyślne automatyczne skalowanie zasobników CoreDNS nie zawsze jest wystarczająco agresywne, aby zapobiec Out of memory
problemom z zasobnikami CoreDNS. W takim przypadku można bezpośrednio zmodyfikować coredns-autoscaler
ConfigMap. Należy pamiętać, że po prostu zwiększenie liczby zasobników CoreDNS bez rozwiązywania głównej przyczyny problemu Out of memory
może zapewnić tylko tymczasową poprawkę. Jeśli w węzłach, w których są uruchomione zasobniki CoreDNS, za mało pamięci, zwiększenie liczby zasobników CoreDNS nie pomoże. Może być konieczne zbadanie dalszych i zaimplementowanie odpowiednich rozwiązań, takich jak optymalizacja użycia zasobów, dostosowanie żądań zasobów i limitów lub dodanie większej ilości pamięci do węzłów.
W przypadku automatycznego skalowania zasobników coreDNS używana jest funkcja automatycznego skalowania w klastrze poziomym. coredns-autoscaler
ConfigMap można edytować, aby skonfigurować logikę skalowania dla liczby zasobników CoreDNS. Narzędzie coredns-autoscaler
ConfigMap obsługuje obecnie dwie różne wartości klucza ConfigMap: linear
i ladder
odpowiadające dwóm obsługiwanym trybom sterowania. Kontroler linear
zwraca liczbę replik w zakresie [min,max] odpowiadającym max( ceil( cores * 1/coresPerReplica ) , ceil( nodes * 1/nodesPerReplica ) )
. Kontroler ladder
oblicza liczbę replik, konsultując dwie różne funkcje kroków, jedną dla skalowania rdzeni, a drugą dla skalowania węzłów, co daje maksymalną wartość dwóch replik. Aby uzyskać więcej informacji na temat trybów sterowania i formatu ConfigMap, zapoznaj się z dokumentacją nadrzędną.
Ważne
Zalecane jest co najmniej 2 repliki zasobników CoreDNS na klaster. Skonfigurowanie co najmniej 1 repliki zasobnika CoreDNS może spowodować awarie podczas operacji wymagających opróżniania węzłów, takich jak operacje uaktualniania klastra.
Aby pobrać coredns-autoscaler
ConfigMap, możesz uruchomić kubectl get configmap coredns-autoscaler -n kube-system -o yaml
polecenie, które zwróci następujące polecenie:
apiVersion: v1
data:
ladder: '{"coresToReplicas":[[1,2],[512,3],[1024,4],[2048,5]],"nodesToReplicas":[[1,2],[8,3],[16,4],[32,5]]}'
kind: ConfigMap
metadata:
name: coredns-autoscaler
namespace: kube-system
resourceVersion: "..."
creationTimestamp: "..."
Włączanie rejestrowania zapytań DNS
Dodaj następującą konfigurację do niestandardowej konfiguracji coredns-custom ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: log.override: | # you may select any name here, but it must end with the .override file extension log
Zastosuj zmiany konfiguracji i wymuś ponowne załadowanie narzędzia ConfigMap za pomocą następujących poleceń:
# Apply configuration changes kubectl apply -f corednsms.yaml # Force CoreDNS to reload the ConfigMap kubectl -n kube-system rollout restart deployment coredns
Wyświetl rejestrowanie debugowania CoreDNS przy użyciu
kubectl logs
polecenia .kubectl logs --namespace kube-system -l k8s-app=kube-dns
Następne kroki
W tym artykule przedstawiono przykładowe scenariusze dostosowywania coreDNS. Aby uzyskać informacje na temat projektu CoreDNS, zobacz stronę projektu nadrzędnego CoreDNS.
Aby dowiedzieć się więcej na temat podstawowych pojęć dotyczących sieci, zobacz Pojęcia dotyczące sieci dla aplikacji w usłudze AKS.
Azure Kubernetes Service