Megosztás a következőn keresztül:


A CoreDNS testreszabása Azure Kubernetes Service-szel

Az Azure Kubernetes Service (AKS) a CoreDNS-projektet használja a fürt DNS-kezeléséhez és megoldásához az összes 1.12.x és újabb fürt esetében. A CoreDNS testreszabásával és a Kubernetes szolgáltatással kapcsolatos további információkért tekintse meg a hivatalos felsőbb rétegbeli dokumentációt.

Az AKS egy felügyelt szolgáltatás, így nem módosíthatja a CoreDNS (a CoreFile) fő konfigurációját. Ehelyett egy Kubernetes ConfigMap használatával bírálja felül az alapértelmezett beállításokat. Az alapértelmezett AKS CoreDNS konfigurációtérképek megtekintéséhez használja a kubectl get configmaps --namespace=kube-system coredns -o yaml parancsot.

Ez a cikk bemutatja, hogyan használható a ConfigMaps az AKS alapszintű CoreDNS-testreszabási beállításaihoz. Ez a megközelítés eltér a CoreDNS más környezetekben, például a CoreFile-ban való konfigurálásától.

Feljegyzés

Korábban a kube-dns-t a fürt DNS-kezeléséhez és feloldásához használták, de most már elavult. kube-dns különböző testreszabási lehetőségeket kínált egy Kubernetes konfigurációs térképen keresztül. A CoreDNS nem kompatibilis visszafelé a kube-dns-lel. A korábban használt testreszabásokat frissíteni kell a CoreDNS-hez.

Mielőtt elkezdené

  • Ez a cikk feltételezi, hogy van egy meglévő AKS-fürtje. Ha AKS-fürtre van szüksége, létrehozhat egyet az Azure CLI, az Azure PowerShell vagy az Azure Portal használatával.
  • Ellenőrizze a futtatott CoreDNS-verziót. A konfigurációs értékek a verziók között változhatnak.
  • Amikor az alábbi példákhoz hasonló konfigurációkat hoz létre, az adatszakaszban szereplő neveknek .server vagy .override végződésűnek kell lenniük. Ez az elnevezési konvenció az alapértelmezett AKS CoreDNS ConfigMap-ban van definiálva, amelyet a kubectl get configmaps --namespace=kube-system coredns -o yaml parancs használatával tekinthet meg.

Beépülő modul támogatása

Minden beépített CoreDNS beépülő modul támogatott. A bővítmények/harmadik felek beépülő moduljai nem támogatottak.

DNS átírása

Testre szabhatja a CoreDNS-t az AKS-sel a menet közbeni DNS-névátírások végrehajtásához.

  1. Hozzon létre egy elnevezett corednsms.yaml fájlt, és illessze be a következő példakonfigurációt. Mindenképpen cserélje le <domain to be rewritten> a saját teljes tartománynevét.

    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
        }
    

    Fontos

    Ha átirányít egy DNS-kiszolgálóra, például a CoreDNS szolgáltatás IP-címére, az adott DNS-kiszolgálónak képesnek kell lennie az újraírt tartománynév feloldására.

  2. Hozza létre a ConfigMap-ot a kubectl apply configmap paranccsal, és adja meg a YAML-jegyzék nevét.

    kubectl apply -f corednsms.yaml
    
  3. Ellenőrizze, hogy a testreszabások alkalmazva lettek-e a kubectl get configmaps coredns-custom ConfigMap használatával.

    kubectl get configmaps --namespace=kube-system coredns-custom -o yaml
    
  4. Ha újra szeretné betölteni a konfigurációtérképet, és engedélyezni szeretné, hogy a Kubernetes Scheduler állásidő nélkül indítsa újra a CoreDNS-t, hajtsa végre a működés közbeni újraindítást kubectl rollout restart.

    kubectl -n kube-system rollout restart deployment coredns
    

Egyéni továbbítási kiszolgáló

Ha meg kell adnia egy továbbítási kiszolgálót a hálózati forgalomhoz, létrehozhat egy konfigurációtérképet a DNS testreszabásához.

  1. Hozzon létre egy elnevezett corednsms.yaml fájlt, és illessze be a következő példakonfigurációt. Mindenképpen cserélje le a forward nevet és a címet a saját környezetének értékeire.

    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. Hozza létre a ConfigMap-ot a kubectl apply configmap paranccsal, és adja meg a YAML-jegyzék nevét.

    kubectl apply -f corednsms.yaml
    
  3. Ha újra szeretné betölteni a konfigurációtérképet, és engedélyezni szeretné, hogy a Kubernetes Scheduler állásidő nélkül indítsa újra a CoreDNS-t, hajtsa végre a működés közbeni újraindítást kubectl rollout restart.

    kubectl -n kube-system rollout restart deployment coredns
    

Egyéni tartományok használata

Érdemes lehet olyan egyéni tartományokat konfigurálni, amelyek csak belsőleg oldhatók fel. Előfordulhat például, hogy fel szeretné oldani a puglife.local egyéni tartományt, amely nem érvényes legfelső szintű tartomány. Egyéni tartomány konfigurációtérképe nélkül az AKS-fürt nem tudja feloldani a címet.

  1. Hozzon létre egy új, elnevezett corednsms.yaml fájlt, és illessze be a következő példakonfigurációt. Mindenképpen frissítse az egyéni tartományt és AZ IP-címet a saját környezetének értékeivel.

    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. Hozza létre a ConfigMap-ot a kubectl apply configmap paranccsal, és adja meg a YAML-jegyzék nevét.

    kubectl apply -f corednsms.yaml
    
  3. Ha újra szeretné betölteni a konfigurációtérképet, és engedélyezni szeretné, hogy a Kubernetes Scheduler állásidő nélkül indítsa újra a CoreDNS-t, hajtsa végre a működés közbeni újraindítást kubectl rollout restart.

    kubectl -n kube-system rollout restart deployment coredns 
    

Csonktartományok

A CoreDNS csonktartományok konfigurálására is használható.

  1. Hozzon létre egy elnevezett corednsms.yaml fájlt, és illessze be a következő példakonfigurációt. Mindenképpen frissítse az egyéni tartományokat és IP-címeket a saját környezetének értékeivel.

    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. Hozza létre a ConfigMap-ot a kubectl apply configmap paranccsal, és adja meg a YAML-jegyzék nevét.

    kubectl apply -f corednsms.yaml
    
  3. Ha újra szeretné betölteni a konfigurációtérképet, és engedélyezni szeretné, hogy a Kubernetes Scheduler állásidő nélkül indítsa újra a CoreDNS-t, hajtsa végre a működés közbeni újraindítást kubectl rollout restart.

    kubectl -n kube-system rollout restart deployment coredns
    

Gazdagépek beépülő modul

Minden beépített beépülő modul támogatott, így a CoreDNS gazdagépek beépülő modulja a /etc/hostok testreszabásához is elérhető.

  1. Hozzon létre egy elnevezett corednsms.yaml fájlt, és illessze be a következő példakonfigurációt. Mindenképpen frissítse az IP-címeket és a gazdagépneveket a saját környezetének értékeivel.

    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. Hozza létre a ConfigMap-ot a kubectl apply configmap paranccsal, és adja meg a YAML-jegyzék nevét.

    kubectl apply -f corednsms.yaml
    
  3. Ha újra szeretné betölteni a konfigurációtérképet, és engedélyezni szeretné, hogy a Kubernetes Scheduler állásidő nélkül indítsa újra a CoreDNS-t, hajtsa végre a működés közbeni újraindítást kubectl rollout restart.

    kubectl -n kube-system rollout restart deployment coredns
    

Érvénytelen keresési tartománykiegészítések internal.cloudapp.net és reddog.microsoft.com

Az Azure DNS egyéni DNS-kiszolgálók használatával konfigurálja a virtuális hálózatok alapértelmezett keresési tartományát <vnetId>.<region>.internal.cloudapp.net az Azure DNS-sel és egy nem funkcionális csonkot reddog.microsoft.com a virtuális hálózatokban (további részletekért tekintse meg az erőforrások dokumentációjának névfeloldását). A Kubernetes konfigurálja a pod DNS-beállításait ndots: 5 a fürtszolgáltatás gazdagépnevének megfelelő feloldásához. Ez a két konfiguráció érvénytelen keresési tartománykiteljesítési lekérdezéseket eredményez, amelyek soha nem lesznek sikeresek a felsőbb rétegbeli névkiszolgálóknak, miközben a rendszer a tartománykeresési listán keresztül dolgozik. Ezek az érvénytelen lekérdezések a névfeloldás késleltetését okozzák, és további terhelést okozhatnak a felsőbb rétegbeli DNS-kiszolgálókon.

A v20241025-ös AKS-kiadástól kezdve az AKS úgy konfigurálja a CoreDNS-t, hogy a következő két esetben válaszoljon az NXDOMAIN használatával, hogy megakadályozza az érvénytelen keresési tartománykiegészítési lekérdezések továbbítását a felsőbb rétegbeli DNS-be:

  • A gyökértartomány vagy a tartomány altartományának lekérdezése reddog.microsoft.com.
  • Bármely olyan altartomány lekérdezése internal.cloudapp.net , amelynek hét vagy több címkéje van a tartománynévben.
    • Ez a konfiguráció lehetővé teszi, hogy a virtuális gépek gazdanév szerinti felbontása továbbra is sikeres legyen. A CoreDNS például 6 címkét küld aks12345.myvnetid.myregion.internal.cloudapp.net az Azure DNS-nek, de elutasítja mcr.microsoft.com.myvnetid.myregion.internal.cloudapp.net (8 címke)

Ez a blokk a fürt Corefile alapértelmezett kiszolgálóblokkjában van implementálva. Szükség esetén ez az elutasítási konfiguráció letiltható úgy, hogy egyéni kiszolgálóblokkokat hoz létre a megfelelő tartományhoz, és engedélyezve van a továbbítási beépülő modul:

  1. Hozzon létre egy elnevezett corednsms.yaml fájlt, és illessze be a következő példakonfigurációt. Mindenképpen frissítse az IP-címeket és a gazdagépneveket a saját környezetének értékeivel.

    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
           }
    
  2. Hozza létre a ConfigMap-ot a kubectl apply configmap paranccsal, és adja meg a YAML-jegyzék nevét.

    kubectl apply -f corednsms.yaml
    
  3. Ha újra szeretné betölteni a konfigurációtérképet, és engedélyezni szeretné, hogy a Kubernetes Scheduler állásidő nélkül indítsa újra a CoreDNS-t, hajtsa végre a működés közbeni újraindítást kubectl rollout restart.

    kubectl -n kube-system rollout restart deployment coredns
    

Hibaelhárítás

Az általános CoreDNS-hibaelhárítási lépésekért, például a végpontok ellenőrzéséért vagy a megoldásért tekintse meg a DNS-feloldás hibakeresését.

CoreDNS-pod skálázásának konfigurálása

Az AKS-fürtök DNS-forgalmának hirtelen megugrása gyakori jelenség, mivel az AKS rugalmasságot biztosít a számítási feladatokhoz. Ezek a kiugró csúcsok a CoreDNS-podok memóriahasználatának növekedéséhez vezethetnek. Bizonyos esetekben ez a megnövekedett memóriahasználat problémákat okozhat Out of memory . A probléma előzményeként az AKS-fürtök automatikusan skálázják a CoreDNS-podokat a podonkénti memóriahasználat csökkentése érdekében. Az automatikus skálázási logika alapértelmezett beállításait a coredns-autoscaler ConfigMap tárolja. Megfigyelheti azonban, hogy a CoreDNS-podok alapértelmezett automatikus méretezése nem mindig elég agresszív ahhoz, hogy megelőzze Out of memory a CoreDNS-podok problémáit. Ebben az esetben közvetlenül módosíthatja a coredns-autoscaler konfigurációtérképet. Vegye figyelembe, hogy a CoreDNS-podok számának növelése a probléma kiváltó okának Out of memory kezelése nélkül csak ideiglenes javítást nyújthat. Ha nem áll rendelkezésre elegendő memória azon csomópontokon, ahol a CoreDNS-podok futnak, a CoreDNS-podok számának növelése nem segít. Előfordulhat, hogy további vizsgálatokat kell végeznie, és megfelelő megoldásokat kell implementálnia, például optimalizálnia kell az erőforrás-használatot, módosítania kell az erőforrás-kérelmeket és a korlátokat, vagy több memóriát kell hozzáadnia a csomópontokhoz.

A CoreDNS horizontális fürtarányos automatikus skálázást használ a podok automatikus méretezéséhez. A coredns-autoscaler ConfigMap szerkeszthető a CoreDNS-podok számának méretezési logikájának konfigurálásához. A coredns-autoscaler ConfigMap jelenleg két különböző ConfigMap-kulcsértéket támogat, linear amelyek ladder két támogatott vezérlési módnak felelnek meg. A linear vezérlő számos replikát ad vissza a [min,max] tartományban, amely egyenértékű a következővel max( ceil( cores * 1/coresPerReplica ) , ceil( nodes * 1/nodesPerReplica ) ): . A ladder vezérlő kiszámítja a replikák számát két különböző lépésfüggvény, az egyik a magméretezés, a másik pedig a csomópontok skálázása során, így a két replikaérték maximuma érhető el. A vezérlési módokkal és a ConfigMap formátummal kapcsolatos további információkért tekintse meg a felsőbb réteg dokumentációját.

Fontos

Fürtenként legalább 2 CoreDNS-podreplika ajánlott. Ha legalább 1 CoreDNS-podreplikát konfigurál, az olyan műveletek során meghiúsulhat, amelyek csomópontelvezetést, például fürtfrissítési műveleteket igényelnek.

A coredns-autoscaler ConfigMap lekéréséhez futtassa a kubectl get configmap coredns-autoscaler -n kube-system -o yaml következő parancsot:

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: "..."

DNS-lekérdezés naplózásának engedélyezése

  1. Adja hozzá a következő konfigurációt a coredns-custom ConfigMap-hoz:

    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. Alkalmazza a konfigurációs módosításokat, és kényszerítse a CoreDNS-t a ConfigMap újratöltésére a következő parancsokkal:

    # Apply configuration changes
    kubectl apply -f corednsms.yaml
    
    # Force CoreDNS to reload the ConfigMap
    kubectl -n kube-system rollout restart deployment coredns
    
  3. Tekintse meg a CoreDNS hibakeresési naplózását a kubectl logs paranccsal.

    kubectl logs --namespace kube-system -l k8s-app=kube-dns
    

Következő lépések

Ez a cikk néhány példaforgatókönyvet mutatott be a CoreDNS testreszabásához. A CoreDNS-projektről további információt a CoreDNS felsőbb rétegbeli projektoldalán talál.

Az alapvető hálózati fogalmakkal kapcsolatos további információkért tekintse meg az AKS-alkalmazások hálózati fogalmait.