Intensiv DevOps-uddannelse · Lektion

DNS og service discovery

Forstå, hvordan Pods finder hinanden ved hjælp af Kubernetes' indbyggede DNS, og hvordan service discovery fungerer under overfladen

Lektion 4 af 413 trin

DNS og service discovery er en gratis Intensiv DevOps-uddannelse-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Intensiv DevOps-uddannelse, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Intensiv DevOps-uddannelse-kurset indeholder 4 lektioner i alt.

Problemet med tjenesteopdagelse

Pods kommer og går, og deres IP-adresser ændrer sig hele tiden. Hårdkodning af IP-adresser ville gå i stykker med det samme. Kubernetes løser dette med DNS-baseret tjenesteopdagelse.

I stedet for en IP-adresse kommunikerer du med et stabilt navn.

Klyngens DNS

Alle klynger kører en DNS-tjeneste (som regel CoreDNS). Den opretter automatisk DNS-poster for Services og Pods, så navne opløses til den rigtige ClusterIP.

DNS-navne for tjenester

En Service får et DNS-navn efter et forudsigeligt mønster:

service-name.namespace.svc.cluster.local

I det samme navnerum kan du nøjes med det korte service-name.

# from a Pod in the same namespace
curl http://payment-service:8080

# fully qualified, from any namespace
curl http://payment-service.shop.svc.cluster.local:8080

Navnerum og navngivning

Navnerummet er en del af navnet. Hvis du vil nå en Service i et andet navnerum, skal du medtage det: service.namespace.

# Pod in 'frontend' namespace calling 'backend' namespace
curl http://api.backend.svc.cluster.local

Test DNS fra en pod

Du kan starte en midlertidig Pod, som du kasserer bagefter, for at teste navneopslag.

kubectl run dnstest --image=busybox:1.36 --rm -it --restart=Never -- nslookup payment-service

Sådan slår CoreDNS navne op

Når en Pod forespørger på et navn, sendes anmodningen til CoreDNS. Den slår den tilsvarende Service op og returnerer dens ClusterIP. For headless Services returnerer den Pod'ernes IP-adresser direkte.

Headless Services

En headless Service (clusterIP: None) springer den enkelte virtuelle IP over. DNS returnerer i stedet de individuelle Pod-IP-adresser, hvilket er afgørende for tilstandsfulde apps, der adresserer Pods direkte.

apiVersion: v1
kind: Service
metadata:
  name: db
spec:
  clusterIP: None
  selector:
    app: db
  ports:
  - port: 5432

DNS-poster for pods

Med en headless Service kan hver bagvedliggende Pod også få sin egen DNS-post, hvilket er nyttigt for StatefulSets, hvor Pods har stabile identiteter som db-0, db-1.

# stable per-Pod name in a StatefulSet
curl http://db-0.db.default.svc.cluster.local:5432

Kontrollér Pod'ens resolv.conf

Kubernetes indsætter DNS-konfiguration i hver Pod. Søgedomænerne gør, at korte navne opløses korrekt.

kubectl exec -it mypod -- cat /etc/resolv.conf
# nameserver 10.96.0.10
# search default.svc.cluster.local svc.cluster.local cluster.local

Miljøvariabler kontra DNS

Kubernetes indsætter også oplysninger om Service-forbindelser som miljøvariabler, men kun for Services, der eksisterede, da Pod'en startede. DNS foretrækkes, fordi det altid afspejler den aktuelle tilstand.

Almindelige faldgruber ved DNS

  • Glemme navnerummet ved kald på tværs af navnerum
  • Forvente DNS for en Service uden matchende Pods (ingen endepunkter)
  • Cache forældede IP-adresser i appen i stedet for at slå navnet op igen

Hurtig kontrol

Vælg det korrekte format for et DNS-navn.

Opsummering

Du har lært, at Kubernetes bruger CoreDNS til at give Services stabile DNS-navne efter mønstret service.namespace.svc.cluster.local. Korte navne fungerer inden for et navnerum, headless Services eksponerer de enkelte Pod-IP-adresser, og DNS afspejler altid klyngens aktuelle tilstand.

Gratis at komme i gang

Lær Intensiv DevOps-uddannelse med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
142
Lektioner
568

Ofte stillede spørgsmål

Er lektionen “DNS og service discovery” gratis?

Ja — alle 3 lektioner i læringssporet Intensiv DevOps-uddannelse, inklusive “DNS og service discovery”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Intensiv DevOps-uddannelse-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “DNS og service discovery”?

Forstå, hvordan Pods finder hinanden ved hjælp af Kubernetes' indbyggede DNS, og hvordan service discovery fungerer under overfladen Du øver dig i Intensiv DevOps-uddannelse med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Intensiv DevOps-uddannelse?

Der kræves ingen tidligere erfaring. Intensiv DevOps-uddannelse på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “DNS og service discovery”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Intensiv DevOps-uddannelse-lektion?

Ja. Alle Intensiv DevOps-uddannelse-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Gør apps tilgængelige med Services
  2. Service-typer: ClusterIP, NodePort, LoadBalancer
  3. Ingress til ekstern adgang
  4. DNS og service discovery
← Tilbage til Intensiv DevOps-uddannelse