Share via


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 standaardconfiguratie van AKS CoreDNS te zien Kaarten.

In dit artikel leest u hoe u Config Kaarten 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-dnsverschillende 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.

  1. 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.

  2. 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
    
  3. 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
    
  4. 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.

  1. Maak een bestand met de naam corednsms.yaml en plak de volgende voorbeeldconfiguratie. Zorg ervoor dat u de forward 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
        }
    
  2. 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
    
  3. 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.

  1. 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
        }
    
  2. 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
    
  3. 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.

  1. 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
        }
    
    
  2. 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
    
  3. 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.

  1. 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
              }
    
  2. 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
    
  3. 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
    

Problemen oplossen

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

  1. 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
    
  2. 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
    
  3. 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.