CoreDNS aanpassen met Azure Kubernetes Service
Azure Kubernetes Service (AKS) maakt gebruik van het CoreDNS-project voor cluster-DNS-beheer en -resolutie met alle clusters 1.12.x en hoger. Zie de officiële upstream-documentatie voor meer informatie over CoreDNS-aanpassing en Kubernetes.
AKS is een beheerde service, dus u kunt de hoofdconfiguratie voor CoreDNS (een CoreFile) niet wijzigen. In plaats daarvan gebruikt u een Kubernetes ConfigMap om de standaardinstellingen te overschrijven. Gebruik de opdracht om de kubectl get configmaps --namespace=kube-system coredns -o yaml
standaard AKS CoreDNS ConfigMaps te zien.
In dit artikel wordt beschreven hoe u ConfigMaps gebruikt voor basisopties voor CoreDNS-aanpassing in AKS. Deze benadering verschilt van het configureren van CoreDNS in andere contexten, zoals CoreFile.
Notitie
Voorheen werd kube-dns gebruikt voor cluster-DNS-beheer en -resolutie, maar deze is nu afgeschaft. kube-dns
verschillende aanpassingsopties aangeboden via een Kubernetes-configuratiekaart. CoreDNS is niet achterwaarts compatibel met kube-dns. Aanpassingen die u eerder hebt gebruikt, moeten worden bijgewerkt voor CoreDNS.
Voordat u begint
- In dit artikel wordt ervan uitgegaan dat u een bestaand AKS-cluster hebt. Als u een AKS-cluster nodig hebt, kunt u er een maken met behulp van Azure CLI, Azure PowerShell of Azure Portal.
- Controleer de versie van CoreDNS die u gebruikt. De configuratiewaarden kunnen tussen versies veranderen.
- Wanneer u configuraties zoals de onderstaande voorbeelden maakt, moeten uw namen in de gegevenssectie eindigen op .server of .override. Deze naamconventie wordt gedefinieerd in de standaard AKS CoreDNS ConfigMap, die u kunt weergeven met behulp van de
kubectl get configmaps --namespace=kube-system coredns -o yaml
opdracht.
Ondersteuning voor invoegtoepassingen
Alle ingebouwde CoreDNS-invoegtoepassingen worden ondersteund. Er worden geen invoegtoepassingen/invoegtoepassingen van derden ondersteund.
DNS herschrijven
U kunt CoreDNS aanpassen met AKS om on-the-fly DNS-naam opnieuw te schrijven.
Maak een bestand met de naam
corednsms.yaml
en plak de volgende voorbeeldconfiguratie. Zorg ervoor dat u vervangt door<domain to be rewritten>
uw eigen volledig gekwalificeerde domeinnaam.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 }
Belangrijk
Als u omleidt naar een DNS-server, zoals het IP-adres van de CoreDNS-service, moet die DNS-server de herschreven domeinnaam kunnen omzetten.
Maak de ConfigMap met behulp van de
kubectl apply configmap
opdracht en geef de naam van uw YAML-manifest op.kubectl apply -f corednsms.yaml
Controleer of de aanpassingen zijn toegepast met behulp van de
kubectl get configmaps
en geef uw coredns-custom ConfigMap op.kubectl get configmaps --namespace=kube-system coredns-custom -o yaml
Als u de ConfigMap opnieuw wilt laden en Kubernetes Scheduler wilt inschakelen om CoreDNS zonder uitvaltijd opnieuw op te starten, voert u een rolling herstart uit met behulp van
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Aangepaste doorstuurserver
Als u een doorstuurserver voor uw netwerkverkeer moet opgeven, kunt u een ConfigMap maken om DNS aan te passen.
Maak een bestand met de naam
corednsms.yaml
en plak de volgende voorbeeldconfiguratie. Zorg ervoor dat u deforward
naam en het adres vervangt door de waarden voor uw eigen omgeving.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 }
Maak de ConfigMap met behulp van de
kubectl apply configmap
opdracht en geef de naam van uw YAML-manifest op.kubectl apply -f corednsms.yaml
Als u de ConfigMap opnieuw wilt laden en Kubernetes Scheduler wilt inschakelen om CoreDNS zonder uitvaltijd opnieuw op te starten, voert u een rolling herstart uit met behulp van
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Aangepaste domeinen gebruiken
Mogelijk wilt u aangepaste domeinen configureren die alleen intern kunnen worden omgezet. U kunt bijvoorbeeld het aangepaste domein puglife.local omzetten. Dit is geen geldig domein op het hoogste niveau. Zonder een aangepast domeinConfigMap kan het AKS-cluster het adres niet omzetten.
Maak een nieuw bestand met de naam
corednsms.yaml
en plak de volgende voorbeeldconfiguratie. Zorg ervoor dat u het aangepaste domein en IP-adres bijwerkt met de waarden voor uw eigen omgeving.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 }
Maak de ConfigMap met behulp van de
kubectl apply configmap
opdracht en geef de naam van uw YAML-manifest op.kubectl apply -f corednsms.yaml
Als u de ConfigMap opnieuw wilt laden en Kubernetes Scheduler wilt inschakelen om CoreDNS zonder uitvaltijd opnieuw op te starten, voert u een rolling herstart uit met behulp van
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Stub-domeinen
CoreDNS kan ook worden gebruikt om stub-domeinen te configureren.
Maak een bestand met de naam
corednsms.yaml
en plak de volgende voorbeeldconfiguratie. Zorg ervoor dat u de aangepaste domeinen en IP-adressen bijwerkt met de waarden voor uw eigen omgeving.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 }
Maak de ConfigMap met behulp van de
kubectl apply configmap
opdracht en geef de naam van uw YAML-manifest op.kubectl apply -f corednsms.yaml
Als u de ConfigMap opnieuw wilt laden en Kubernetes Scheduler wilt inschakelen om CoreDNS zonder uitvaltijd opnieuw op te starten, voert u een rolling herstart uit met behulp van
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Invoegtoepassing Hosts
Alle ingebouwde invoegtoepassingen worden ondersteund, dus de CoreDNS-hosts-invoegtoepassing is ook beschikbaar om /etc/hosts aan te passen.
Maak een bestand met de naam
corednsms.yaml
en plak de volgende voorbeeldconfiguratie. Zorg ervoor dat u de IP-adressen en hostnamen bijwerkt met de waarden voor uw eigen omgeving.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 }
Maak de ConfigMap met behulp van de
kubectl apply configmap
opdracht en geef de naam van uw YAML-manifest op.kubectl apply -f corednsms.yaml
Als u de ConfigMap opnieuw wilt laden en Kubernetes Scheduler wilt inschakelen om CoreDNS zonder uitvaltijd opnieuw op te starten, voert u een rolling herstart uit met behulp van
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Ongeldige voltooiingen van zoekdomeinen voor internal.cloudapp.net en reddog.microsoft.com
Azure DNS configureert een standaardzoekdomein van in virtuele netwerken met behulp van <vnetId>.<region>.internal.cloudapp.net
Azure DNS en een niet-functionele stub reddog.microsoft.com
in virtuele netwerken met behulp van aangepaste DNS-servers (zie de naamomzetting voor bronnendocumentatie voor meer informatie). Kubernetes configureert DNS-instellingen voor pods om ndots: 5
hostnaamomzetting van de clusterservice correct te ondersteunen. Deze twee configuraties combineren om te resulteren in ongeldige query's voor het voltooien van zoekdomeinen die nooit naar upstream-naamservers worden verzonden terwijl het systeem via de zoeklijst van het domein wordt verwerkt. Deze ongeldige query's veroorzaken vertragingen bij naamomzetting en kunnen extra belasting op upstream-DNS-servers plaatsen.
Vanaf de release van v20241025 AKS configureert AKS CoreDNS om te reageren met NXDOMAIN in de volgende twee gevallen om te voorkomen dat deze ongeldige query's voor het voltooien van zoekdomeinen worden doorgestuurd naar upstream DNS:
- Elke query voor het hoofddomein of een subdomein van
reddog.microsoft.com
. - Elke query voor een subdomein met
internal.cloudapp.net
zeven of meer labels in de domeinnaam.- Met deze configuratie kan de oplossing van virtuele machines op hostnaam nog steeds slagen. CoreDNS verzendt
aks12345.myvnetid.myregion.internal.cloudapp.net
bijvoorbeeld (6 labels) naar Azure DNS, maar weigertmcr.microsoft.com.myvnetid.myregion.internal.cloudapp.net
(8 labels)
- Met deze configuratie kan de oplossing van virtuele machines op hostnaam nog steeds slagen. CoreDNS verzendt
Dit blok wordt geïmplementeerd in het standaardserverblok in het Corefile voor het cluster. Indien nodig kan deze afwijzingsconfiguratie worden uitgeschakeld door aangepaste serverblokken te maken voor het juiste domein waarvoor een doorstuurinvoegtoepassing is ingeschakeld:
Maak een bestand met de naam
corednsms.yaml
en plak de volgende voorbeeldconfiguratie. Zorg ervoor dat u de IP-adressen en hostnamen bijwerkt met de waarden voor uw eigen omgeving.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 }
Maak de ConfigMap met behulp van de
kubectl apply configmap
opdracht en geef de naam van uw YAML-manifest op.kubectl apply -f corednsms.yaml
Als u de ConfigMap opnieuw wilt laden en Kubernetes Scheduler wilt inschakelen om CoreDNS zonder uitvaltijd opnieuw op te starten, voert u een rolling herstart uit met behulp van
kubectl rollout restart
.kubectl -n kube-system rollout restart deployment coredns
Probleemoplossing
Zie Foutopsporing voor DNS-omzetting voor algemene Stappen voor het oplossen van problemen met CoreDNS, zoals het controleren van de eindpunten of resolutie.
CoreDNS-podschalen configureren
Plotselinge pieken in DNS-verkeer binnen AKS-clusters komen vaak voor vanwege de elasticiteit die AKS biedt voor workloads. Deze pieken kunnen leiden tot een toename van het geheugenverbruik door CoreDNS-pods. In sommige gevallen kan dit verhoogde geheugenverbruik problemen veroorzaken Out of memory
. Als u dit probleem wilt voorbereiden, worden CoreDNS-pods automatisch geschaald door AKS-clusters om het geheugengebruik per pod te verminderen. De standaardinstellingen voor deze logica voor automatisch schalen worden opgeslagen in de coredns-autoscaler
ConfigMap. U kunt echter merken dat de standaard automatisch schalen van CoreDNS-pods niet altijd agressief genoeg is om problemen voor uw CoreDNS-pods te voorkomen Out of memory
. In dit geval kunt u de coredns-autoscaler
ConfigMap rechtstreeks wijzigen. Houd er rekening mee dat het aantal CoreDNS-pods wordt verhoogd zonder de hoofdoorzaak van het Out of memory
probleem aan te pakken, mogelijk alleen een tijdelijke oplossing biedt. Als er onvoldoende geheugen beschikbaar is op de knooppunten waarop de CoreDNS-pods worden uitgevoerd, helpt het verhogen van het aantal CoreDNS-pods niet. Mogelijk moet u de juiste oplossingen onderzoeken en implementeren, zoals het optimaliseren van resourcegebruik, het aanpassen van resourceaanvragen en limieten of het toevoegen van meer geheugen aan de knooppunten.
CoreDNS maakt gebruik van horizontale automatische schaalaanpassing van clusters voor automatische schaalaanpassing van pods. De coredns-autoscaler
ConfigMap kan worden bewerkt om de schaallogica voor het aantal CoreDNS-pods te configureren. De coredns-autoscaler
ConfigMap ondersteunt momenteel twee verschillende ConfigMap-sleutelwaarden: linear
en ladder
die overeenkomen met twee ondersteunde besturingsmodi. De linear
controller levert een aantal replica's op in het bereik [min,max] dat gelijk is aan max( ceil( cores * 1/coresPerReplica ) , ceil( nodes * 1/nodesPerReplica ) )
. De ladder
controller berekent het aantal replica's door twee verschillende stapfuncties te raadplegen, één voor het schalen van kernen en een andere voor het schalen van knooppunten, wat het maximum van de twee replicawaarden oplevert. Raadpleeg de upstream-documentatie voor meer informatie over de besturingsmodi en de ConfigMap-indeling.
Belangrijk
Minimaal 2 CoreDNS-podreplica's per cluster wordt aanbevolen. Het configureren van minimaal 1 CoreDNS-podreplica kan leiden tot fouten tijdens bewerkingen waarvoor knooppuntafvoer is vereist, zoals upgradebewerkingen voor clusters.
Als u de coredns-autoscaler
ConfigMap wilt ophalen, kunt u de kubectl get configmap coredns-autoscaler -n kube-system -o yaml
opdracht uitvoeren die het volgende retourneert:
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: "..."
Logboekregistratie van DNS-query's inschakelen
Voeg de volgende configuratie toe aan uw 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
Pas de configuratiewijzigingen toe en forceer CoreDNS om de ConfigMap opnieuw te laden met behulp van de volgende opdrachten:
# Apply configuration changes kubectl apply -f corednsms.yaml # Force CoreDNS to reload the ConfigMap kubectl -n kube-system rollout restart deployment coredns
Bekijk de coreDNS-foutopsporingslogboekregistratie met behulp van de
kubectl logs
opdracht.kubectl logs --namespace kube-system -l k8s-app=kube-dns
Volgende stappen
In dit artikel zijn enkele voorbeeldscenario's getoond voor CoreDNS-aanpassing. Zie de upstream-projectpagina CoreDNS voor informatie over het CoreDNS-project.
Zie Netwerkconcepten voor toepassingen in AKS voor meer informatie over basisnetwerkconcepten.
Azure Kubernetes Service