Com implementar Nginx en un clúster de Kubernetes


Al nostre darrer article, hem parlat de com configurar i executar un clúster de Kubernetes, anem a parlar de com podem implementar el servei NGINX al nostre clúster.

Executaré aquest desplegament en una màquina virtual allotjada per un proveïdor de núvol públic. Com passa amb molts serveis al núvol públic, molts mantenen generalment un esquema IP públic i privat per a les seves màquines virtuals.

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

Desplegant NGINX en un clúster de Kubernetes

Executarem aquest desplegament des del node mestre.

Comencem per comprovar l'estat del clúster. Tots els vostres nodes haurien d'estar en l'estat PREPARAT.

# kubectl get nodes

Creem un desplegament de NGINX utilitzant la imatge NGINX.

# kubectl create deployment nginx --image=nginx

Ara podeu veure l'estat del vostre desplegament.

# kubectl get deployments

Si voleu veure més detalls sobre el vostre desplegament, podeu executar l'ordre describe. Per exemple, és possible determinar quantes rèpliques del desplegament s'estan executant. En el nostre cas, esperem veure una rèplica d'1 en funcionament (és a dir, rèpliques 1/1).

# kubectl describe deployment nginx

Ara que el vostre desplegament Nginx està actiu, és possible que vulgueu exposar el servei NGINX a una IP pública accessible a Internet.

Kubernetes ofereix diverses opcions quan exposa el vostre servei basant-se en una característica anomenada Kubernetes Service-types i són:

  1. ClusterIP: aquest tipus de servei generalment exposa el servei en una IP interna, accessible només dins del clúster, i possiblement només dins dels nodes del clúster.
  2. NodePort: aquesta és l'opció més bàsica per exposar el vostre servei perquè sigui accessible fora del vostre clúster, en un port específic (anomenat NodePort) a cada node del clúster. En breu il·lustrarem aquesta opció.
  3. LoadBalancer: aquesta opció aprofita els serveis externs d'equilibri de càrrega que ofereixen diversos proveïdors per permetre l'accés al vostre servei. Aquesta és una opció més fiable quan penseu en l'alta disponibilitat per al vostre servei i té més funcions més enllà de l'accés predeterminat.
  4. ExternalName: aquest servei redirigeix el trànsit a serveis fora del clúster. Com a tal, el servei s'assigna a un nom DNS que es podria allotjar fora del vostre clúster. És important tenir en compte que això no fa servir el proxy.

El tipus de servei predeterminat és ClusterIP.

En el nostre escenari, volem utilitzar el tipus de servei NodePort perquè tenim una adreça IP pública i privada i de moment no necessitem un equilibrador de càrrega extern. Amb aquest tipus de servei, Kubernetes assignarà aquest servei als ports del rang 30.000+.

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

Executeu l'ordre get svc per veure un resum del servei i els ports exposats.

# kubectl get svc

Ara podeu verificar que la pàgina Nginx és accessible a tots els nodes mitjançant l'ordre curl.

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

Com podeu veure, el \BENVINGUTS A NGINX! es pot accedir a la pàgina.

Com haureu notat, Kubernetes informa que no tinc cap IP pública registrada activa, o més aviat cap IP EXTERNA registrada.

# kubectl get svc

Verifiquem si és cert, que no tinc cap IP EXTERNA connectada a les meves interfícies mitjançant l'ordre IP.

# ip a

No hi ha IP pública com podeu veure.

Com s'ha esmentat anteriorment, actualment estic executant aquest desplegament en una màquina virtual que ofereix un proveïdor de núvol públic. Així, tot i que no hi ha cap interfície en particular assignada a una IP pública, el proveïdor de VM ha emès una adreça IP externa efímera.

Una adreça IP externa efímera és una adreça IP temporal que roman connectada a la màquina virtual fins que s'atura la instància virtual. Quan es reinicia la instància virtual, s'assigna una nova IP externa. Bàsicament, és una manera senzilla perquè els proveïdors de serveis aprofitin les IP públiques inactives.

El repte aquí, a part del fet que la vostra IP pública no és estàtica, és que la IP pública efímera és simplement una extensió (o proxy) de la IP privada i, per aquest motiu, només s'accedirà al servei al port 30386. Això vol dir que s'accedirà al servei a l'URL , és a dir 104.197.170.99:30386, que si consulteu el vostre navegador, hauríeu de poder veure la pàgina de benvinguda.

Amb això, hem implementat NGINX amb èxit al nostre clúster Kubernetes de 3 nodes.