Přizpůsobení CoreDNS pomocí služby Azure Kubernetes Service
Azure Kubernetes Service (AKS) používá projekt CoreDNS pro správu a překlad DNS clusteru se všemi clustery 1.12.x a vyššími. Další informace o přizpůsobení CoreDNS a Kubernetes najdete v oficiální upstreamové dokumentaci.
AKS je spravovaná služba, takže nemůžete upravit hlavní konfiguraci coreDNS ( CoreFile). Místo toho použijete objekt ConfigMap Kubernetes k přepsání výchozího nastavení. Pokud chcete zobrazit výchozí objekty ConfigMap AKS CoreDNS, použijte kubectl get configmaps --namespace=kube-system coredns -o yaml
tento příkaz.
V tomto článku se dozvíte, jak používat Objekty ConfigMap pro základní možnosti přizpůsobení CoreDNS v AKS. Tento přístup se liší od konfigurace CoreDNS v jiných kontextech, jako je CoreFile.
Poznámka:
Dříve se kube-dns používal ke správě a překladu DNS clusteru, ale už je zastaralý. kube-dns
nabízí různé možnosti přizpůsobení prostřednictvím mapy konfigurace Kubernetes. CoreDNS není zpětně kompatibilní s kube-dns. Všechna vlastní nastavení, která jste použili dříve, se musí aktualizovat pro CoreDNS.
Než začnete
- Tento článek předpokládá, že máte existující cluster AKS. Pokud potřebujete cluster AKS, můžete ho vytvořit pomocí Azure CLI, Azure PowerShellu nebo webu Azure Portal.
- Ověřte verzi CoreDNS, kterou používáte. Hodnoty konfigurace se můžou mezi verzemi měnit.
- Při vytváření konfigurací, jako jsou příklady níže, musí vaše názvy v datové části končit na .server nebo .override. Tato konvence vytváření názvů je definována ve výchozím objektu ConfigMap AKS CoreDNS, který můžete zobrazit pomocí
kubectl get configmaps --namespace=kube-system coredns -o yaml
příkazu.
Podpora modulů plug-in
Podporují se všechny integrované moduly plug-in CoreDNS. Nepodporují se žádné doplňky nebo moduly plug-in třetích stran.
Přepsání DNS
CoreDNS můžete přizpůsobit pomocí AKS, aby se přepsaly místní názvy DNS.
Vytvořte soubor s názvem
corednsms.yaml
a vložte následující ukázkovou konfiguraci. Nezapomeňte nahradit<domain to be rewritten>
vlastním plně kvalifikovaným názvem domény.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 }
Důležité
Pokud přesměrujete na server DNS, například IP adresu služby CoreDNS, musí být tento server DNS schopný přeložit přepsaný název domény.
Pomocí příkazu vytvořte objekt ConfigMap
kubectl apply configmap
a zadejte název manifestu YAML.kubectl apply -f corednsms.yaml
Pomocí objektu
kubectl get configmaps
Coredns-custom ConfigMap ověřte, že se použila vlastní přizpůsobení.kubectl get configmaps --namespace=kube-system coredns-custom -o yaml
Pokud chcete znovu načíst objekt ConfigMap a povolit Plánovač Kubernetes restartování CoreDNS bez výpadků, proveďte postupné restartování pomocí
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Vlastní předávaný server
Pokud potřebujete zadat předávaný server pro síťový provoz, můžete vytvořit objekt ConfigMap pro přizpůsobení DNS.
Vytvořte soubor s názvem
corednsms.yaml
a vložte následující ukázkovou konfiguraci. Nezapomeňte nahraditforward
název a adresu hodnotami pro vaše vlastní prostředí.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 }
Pomocí příkazu vytvořte objekt ConfigMap
kubectl apply configmap
a zadejte název manifestu YAML.kubectl apply -f corednsms.yaml
Pokud chcete znovu načíst objekt ConfigMap a povolit Plánovač Kubernetes restartování CoreDNS bez výpadků, proveďte postupné restartování pomocí
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Použití vlastních domén
Možná budete chtít nakonfigurovat vlastní domény, které se dají vyřešit jenom interně. Můžete například chtít přeložit vlastní doménu puglife.local, což není platná doména nejvyšší úrovně. Bez objektu ConfigMap vlastní domény nemůže cluster AKS tuto adresu přeložit.
Vytvořte nový soubor s názvem
corednsms.yaml
a vložte následující ukázkovou konfiguraci. Nezapomeňte aktualizovat vlastní doménu a IP adresu hodnotami pro vaše vlastní prostředí.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 }
Pomocí příkazu vytvořte objekt ConfigMap
kubectl apply configmap
a zadejte název manifestu YAML.kubectl apply -f corednsms.yaml
Pokud chcete znovu načíst objekt ConfigMap a povolit Plánovač Kubernetes restartování CoreDNS bez výpadků, proveďte postupné restartování pomocí
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Domény zástupných procedur
CoreDNS lze také použít ke konfiguraci domén zástupných procedur.
Vytvořte soubor s názvem
corednsms.yaml
a vložte následující ukázkovou konfiguraci. Nezapomeňte aktualizovat vlastní domény a IP adresy hodnotami pro vaše vlastní prostředí.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 }
Pomocí příkazu vytvořte objekt ConfigMap
kubectl apply configmap
a zadejte název manifestu YAML.kubectl apply -f corednsms.yaml
Pokud chcete znovu načíst objekt ConfigMap a povolit Plánovač Kubernetes restartování CoreDNS bez výpadků, proveďte postupné restartování pomocí
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Modul plug-in Hostitelé
Podporují se všechny integrované moduly plug-in, takže modul plug-in hostitelů CoreDNS je k dispozici i pro přizpůsobení /etc/hosts.
Vytvořte soubor s názvem
corednsms.yaml
a vložte následující ukázkovou konfiguraci. Nezapomeňte aktualizovat IP adresy a názvy hostitelů hodnotami pro vaše vlastní prostředí.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 }
Pomocí příkazu vytvořte objekt ConfigMap
kubectl apply configmap
a zadejte název manifestu YAML.kubectl apply -f corednsms.yaml
Pokud chcete znovu načíst objekt ConfigMap a povolit Plánovač Kubernetes restartování CoreDNS bez výpadků, proveďte postupné restartování pomocí
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Neplatné dokončování domény vyhledávání pro internal.cloudapp.net a reddog.microsoft.com
Azure DNS nakonfiguruje výchozí doménu <vnetId>.<region>.internal.cloudapp.net
vyhledávání ve virtuálních sítích pomocí Azure DNS a nefunkční zástupný proceduru reddog.microsoft.com
ve virtuálních sítích pomocí vlastních serverů DNS (další podrobnosti najdete v dokumentaci k překladu názvů prostředků). Kubernetes nakonfiguruje nastavení DNS podů tak ndots: 5
, aby správně podporovalo překlad názvů hostitelů služby clusteru. Tyto dvě konfigurace se kombinují tak, aby výsledkem byly neplatné dotazy na dokončení domény vyhledávání, které nikdy neuspěly odesílání na nadřazené názvové servery, zatímco systémové procesy procházejí seznamem hledání domény. Tyto neplatné dotazy způsobují zpoždění překladu názvů a můžou na nadřazených serverech DNS zatížit další zatížení.
Od verze AKS v20241025 nakonfiguruje AKS CoreDNS tak, aby reagoval s NXDOMAIN v následujících dvou případech, aby zabránilo přeposílání těchto neplatných dotazů na dokončování domény vyhledávání do upstreamového DNS:
- Jakýkoli dotaz na kořenovou doménu nebo subdoménu .
reddog.microsoft.com
- Jakýkoli dotaz na subdoménu
internal.cloudapp.net
, která má v názvu domény sedm nebo více popisků.- Tato konfigurace umožňuje, aby překlad virtuálních počítačů podle názvu hostitele stále proběhl úspěšně. CoreDNS například odesílá
aks12345.myvnetid.myregion.internal.cloudapp.net
(6 popisků) do Azure DNS, ale odmítnemcr.microsoft.com.myvnetid.myregion.internal.cloudapp.net
(8 popisků).
- Tato konfigurace umožňuje, aby překlad virtuálních počítačů podle názvu hostitele stále proběhl úspěšně. CoreDNS například odesílá
Tento blok se implementuje ve výchozím bloku serveru v souboru Corefile pro cluster. V případě potřeby je možné tuto konfiguraci zamítnutí zakázat vytvořením vlastních bloků serveru pro příslušnou doménu s povoleným modulem plug-in pro předávání:
Vytvořte soubor s názvem
corednsms.yaml
a vložte následující ukázkovou konfiguraci. Nezapomeňte aktualizovat IP adresy a názvy hostitelů hodnotami pro vaše vlastní prostředí.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 }
Pomocí příkazu vytvořte objekt ConfigMap
kubectl apply configmap
a zadejte název manifestu YAML.kubectl apply -f corednsms.yaml
Pokud chcete znovu načíst objekt ConfigMap a povolit Plánovač Kubernetes restartování CoreDNS bez výpadků, proveďte postupné restartování pomocí
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Řešení problému
Obecné kroky řešení potíží se službou CoreDNS, jako je kontrola koncových bodů nebo překladu, najdete v tématu Ladění překladu DNS.
Konfigurace škálování podů CoreDNS
Náhlé špičky provozu DNS v clusterech AKS jsou běžným výskytem kvůli elasticitě, kterou AKS poskytuje pro úlohy. Tyto špičky můžou vést ke zvýšení spotřeby paměti pody CoreDNS. V některých případech může tato zvýšená spotřeba paměti způsobit Out of memory
problémy. Aby se tento problém zkrátil, clustery AKS automaticky škálují pody CoreDNS, aby se snížilo využití paměti na pod. Výchozí nastavení této logiky automatického škálování jsou uložena v objektu coredns-autoscaler
ConfigMap. Můžete ale pozorovat, že výchozí automatické škálování podů CoreDNS není vždy dostatečně agresivní, aby se zabránilo Out of memory
problémům s pody CoreDNS. V tomto případě můžete přímo upravit coredns-autoscaler
objekt ConfigMap. Upozorňujeme, že jednoduše zvýšení počtu podů CoreDNS bez vyřešení původní příčiny Out of memory
problému může poskytnout pouze dočasnou opravu. Pokud v uzlech, na kterých běží pody CoreDNS, není k dispozici dostatek paměti, zvýšení počtu podů CoreDNS nepomůže. Možná budete muset prozkoumat další a implementovat vhodná řešení, jako je optimalizace využití prostředků, úprava požadavků na prostředky a omezení nebo přidání další paměti do uzlů.
CoreDNS používá pro automatické škálování podů horizontální proporcionální automatické škálování clusteru. Konfigurační coredns-autoscaler
mapu je možné upravit tak, aby konfigurovala logiku škálování pro počet podů CoreDNS. Objekt coredns-autoscaler
ConfigMap aktuálně podporuje dvě různé hodnoty klíče ConfigMap: linear
a ladder
které odpovídají dvěma podporovaným režimům řízení. Kontroler linear
poskytuje řadu replik v rozsahu [min,max] ekvivalentního rozsahu max( ceil( cores * 1/coresPerReplica ) , ceil( nodes * 1/nodesPerReplica ) )
. ladder
Kontroler vypočítá počet replik konzultacem se dvěma různými krokovými funkcemi, jednou pro škálování jádra a druhou pro škálování uzlu, a tím maximální hodnotu dvou replik. Další informace o režimech ovládacích prvků a formátu ConfigMap najdete v upstreamové dokumentaci.
Důležité
Doporučuje se minimálně 2 repliky podů CoreDNS na cluster. Konfigurace minimálně 1 repliky podu CoreDNS může způsobit selhání během operací, které vyžadují vyprazdňování uzlů, jako jsou operace upgradu clusteru.
Chcete-li načíst coredns-autoscaler
objekt ConfigMap, můžete spustit kubectl get configmap coredns-autoscaler -n kube-system -o yaml
příkaz, který vrátí následující příkaz:
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: "..."
Povolení protokolování dotazů DNS
Do objektu ConfigMap pro coredns-custom přidejte následující konfiguraci:
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
Použijte změny konfigurace a vynuťte, aby coreDNS znovu načítá ConfigMap pomocí následujících příkazů:
# Apply configuration changes kubectl apply -f corednsms.yaml # Force CoreDNS to reload the ConfigMap kubectl -n kube-system rollout restart deployment coredns
Pomocí příkazu zobrazte protokolování
kubectl logs
ladění CoreDNS.kubectl logs --namespace kube-system -l k8s-app=kube-dns
Další kroky
Tento článek ukázal několik ukázkových scénářů pro přizpůsobení CoreDNS. Informace o projektu CoreDNS najdete na stránce upstreamového projektu CoreDNS.
Další informace o základních konceptech sítě najdete v tématu Koncepty sítě pro aplikace v AKS.
Azure Kubernetes Service