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.
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.
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
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
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.
Hozzon létre egy elnevezett
corednsms.yaml
fájlt, és illessze be a következő példakonfigurációt. Mindenképpen cserélje le aforward
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 }
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
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.
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 }
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
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ó.
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 }
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
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ő.
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 }
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
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ítjamcr.microsoft.com.myvnetid.myregion.internal.cloudapp.net
(8 címke)
- 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
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:
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 }
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
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
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
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
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.
Azure Kubernetes Service