Cuando en un proyecto, desplegado en google cloud usando GKE, necesitamos presentar unos POD,s a internet con http, lo que necesitamos es crear un ingress que gestione el trafico de http y https, el recurso que nos permite usar google es el crear un ingress del tipo "GCE".
Para poder seguir esta receta usaremos la SHELL que nos presenta la propia plataforama de google Cloud.
Después de seleccionar el proyecto y estar autentificados con nuestra usuario de trabajo habrimos una shell de trabajo. Para poder desplegar dos nodos de trabajo (HOST) donde trabajar con kubernetes.
Seleccionamos la zona de trabajo introducidos estos comando de gcloud:
gcloud config set compute/zone europe-west1-b
Creamos un cluster de kubernetes para nuestro ejemplo:
gcloud container clusters create nginx-tutorial --num-nodes=2
Esperamos a que se arme le sistema con los dos HOST y podremos desplegamos nuestro pod para la demostración.
kubectl run hello-world --replicas=1 --labels="run=load-balancer-example"
-- image=grc.io/google-sapmples/node-hello:1.0 --port=8080
Con esto creamos 1 replicas de los pod hello-world llamado hello-word, que lo podremos ver en la zona de “Workloads” usando las herramientas web de GKE o con el comando:
kubectl get deployments hello-world
A continuación crearemos un servicio interno para conectar con este pod.
kubectl expose deployment hello-world --target-port=8080 --type=NodePort --name=servicio-nodeport
En el menu “Discovery & load Balancing” veremos que se crea un servicio con el nombre antes dado que apunta a el pod configurado y que tenemos en marcha de tipo “NodePort”
Para poder usar el un certificado para el trafico https necesitaremos un certificado en este caso para la práctica sera autofirmado, para el dominio foo.bar.com los pasos en el shell son:
openssl reg -x509 -nodes -day 365 -newkey rsa:2048 -keyout /tmp/tls.key -out /tmp/tls.crt -subj"/CN=foo.bar.com"
Estos certificados se los pasamos a los Secrets de kubernetes para que puedan ser usados con el comando:
kubectl create secret tls foo-secret --key /tmp/tls.key --cert /tmp/tls.crt
Para crear el fichero de configuración del servicio final de tipo ingress crearemos un fichero de configuración ssl.yaml con el siguiente contenido:
kind: Ingress
metadata:
name: ssl-ingress
namespace: default
spec:
tls:
- hosts:
- foo.bar.com
secretName: foo-secret
rules:
- host: foo.bar.com
http:
paths:
- backend:
serviceName: servicio-nodeport
servicePort: 8080
path: /hello
Para que este servicio se aplique usamos:
kubectl apply -f ssl.yaml
Esto aplicara en unos 7 o 10 minutos aproximandamente y nos creara en “Discovery & load balancing” un servicio nuevo llamado ssl-ingress y que no esta vinculada a ningún pod ademas en “Network services” tambien crearía un “Load balancing” y en “VCP network” en “External IP addresses” nos aparece una nueva ip externa marcada para su uso y que podemos ver usando el comando:
$ kubectl get ingress
Podemos listar la ip del ingress asignada:
C NAME HOSTS ADDRESS PORTS AGEssl foo.bar.com 35.186.229.127 80, 443 7m
En mi caso tenemos la 35.186.229.127 como el dominio no existe para probarlo configuramos esta ip en nuestro ordenador local en en /etc/hosts, y cuando nos conectamos aceptamos el uso del certificado autofirmado… ademas podemos ver como funciona el servicio ingress en http y https, los puertos los dos mostrando el programa mas popular "Hola mundo".
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.