Hvordan distribuere Nginx på en Kubernetes-klynge


I vår siste artikkel har vi diskutert hvordan du setter opp og kjører en Kubernetes-klynge, la oss diskutere hvordan vi kan distribuere NGINX-tjenesten på klyngen vår.

Jeg vil kjøre denne distribusjonen på en virtuell maskin som drives av en offentlig skyleverandør. Som det er med mange offentlige skytjenester, opprettholder mange generelt en offentlig og privat IP-ordning for sine virtuelle maskiner.

Testmiljø

Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197

Distribuere NGINX på en Kubernetes-klynge

Vi vil kjøre denne distribusjonen fra master-noden.

La oss begynne med å sjekke statusen til klyngen. Alle nodene dine skal være i en KLAR-tilstand.

kubectl get nodes

Vi oppretter en distribusjon av NGINX ved å bruke NGINX-bildet.

kubectl create deployment nginx --image=nginx

Du kan nå se statusen til distribusjonen din.

kubectl get deployments

Hvis du vil se flere detaljer om distribusjonen din, kan du kjøre kommandoen describe. Det er for eksempel mulig å bestemme hvor mange replikaer av distribusjonen som kjører. I vårt tilfelle forventer vi å se en kopi av 1 løpende (dvs. 1/1 replikaer).

kubectl describe deployment nginx

Nå din Nginx-distribusjon er aktiv, kan det være lurt å eksponere NGINX-tjenesten for en offentlig IP tilgjengelig på internett.

Eksponering av Nginx-tjenesten din for offentlig nettverk

Kubernetes tilbyr flere alternativer når du eksponerer tjenesten din basert på en funksjon kalt Kubernetes-tjenestetyper, og de er:

  1. ClusterIP – Denne tjenestetypen eksponerer vanligvis tjenesten på en intern IP, kun tilgjengelig innenfor klyngen, og muligens bare innenfor klyngenodene.
  2. NodePort – Dette er det mest grunnleggende alternativet for å eksponere tjenesten din for å være tilgjengelig utenfor klyngen din, på en bestemt port (kalt NodePort) på hver node i klyngen. Vi vil illustrere dette alternativet snart.
  3. LoadBalancer – Dette alternativet utnytter eksterne lastbalanseringstjenester som tilbys av ulike leverandører for å gi tilgang til tjenesten din. Dette er et mer pålitelig alternativ når du tenker på høy tilgjengelighet for tjenesten din, og har flere funksjoner utover standardtilgang.
  4. ExternalName – Denne tjenesten omdirigerer trafikk til tjenester utenfor klyngen. Som sådan er tjenesten dermed tilordnet et DNS-navn som kan være vert utenfor klyngen din. Det er viktig å merke seg at dette ikke bruker proxying.

Standard tjenestetype er ClusterIP.

I vårt scenario ønsker vi å bruke NodePort Service-type fordi vi har både en offentlig og privat IP-adresse, og vi trenger ikke en ekstern lastbalanser for nå. Med denne tjenestetypen vil Kubernetes tilordne denne tjenesten til porter i 30000+-området.

kubectl create service nodeport nginx --tcp=80:80

Kjør kommandoen get svc for å se et sammendrag av tjenesten og portene som er eksponert.

kubectl get svc

Nå kan du bekrefte at Nginx-siden er tilgjengelig på alle noder ved å bruke curl-kommandoen.

curl master-node:30386
curl node-1:30386
curl node-2:30386

Som du kan se, kan du nå "VELKOMMEN TIL NGINX! "-siden.

Nå flyktige OFFENTLIGE IP-adresser

Som du kanskje har lagt merke til, rapporterer Kubernetes at jeg ikke har noen aktiv offentlig IP registrert, eller snarere ingen EKSTERN IP registrert.

kubectl get svc

La oss kontrollere om det faktisk er sant, at jeg ikke har noen EKSTERN IP knyttet til grensesnittene mine ved hjelp av IP-kommando.

ip a

Ingen offentlig IP som du kan se.

Som nevnt tidligere, kjører jeg for øyeblikket denne distribusjonen på en Virtuell maskin som tilbys av en offentlig skyleverandør. Så selv om det ikke er noe spesielt grensesnitt tildelt en offentlig IP, har VM-leverandøren utstedt en flyktig ekstern IP-adresse.

En flyktig ekstern IP-adresse er en midlertidig IP-adresse som forblir knyttet til VM-en til den virtuelle forekomsten stoppes. Når den virtuelle forekomsten startes på nytt, tildeles en ny ekstern IP. I utgangspunktet er det en enkel måte for tjenesteleverandører å utnytte ledige offentlige IP-er.

Utfordringen her, bortsett fra det faktum at din offentlige IP ikke er statisk, er at Ephemeral Public IP ganske enkelt er en utvidelse (eller proxy) av den Private IP, og av den grunn vil tjenesten kun få tilgang på port 30386. Det betyr at tjenesten vil få tilgang til URL-en , det vil si 104.197.170.99:30386, som hvis du krysser av nettleseren din, bør du kunne se velkomstsiden.

Med det har vi implementert NGINX på vår 3-node Kubernetes-klynge.