reverse proxy minikube - juancamilocc/virtual_resources GitHub Wiki

Reverse Proxy with Minikube

El escenario general se muestra a continuación.

Escenario general

Se tiene un dev-machine el cual vamos a comunicar por medio de un proxy reverso con el host-minikube para hacer uso de sus servicios del cluster de kubernetes.

Prerequisitos del dev-machine.

  • Docker
  • Kubectl
  • Helm

Prerequisitos del host-minikube.

  • Docker
  • Minikube-docker
  • Kubectl
  • Nginx

Instalamos Docker y Kubectl en ambas máquinas.

Instalación de Docker.

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release software-properties-common net-tools
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Una vez instalado Docker, se ejecuta el siguiente comando para evitar el uso de sudo y hacer más sencillo su uso.

sudo groupadd docker
sudo usermod -aG docker $USER
exec "$SHELL"

NOTA: Para que el anterior cambio tenga efecto es necesario reiniciar la sesión.

Instalación de Kubectl.

sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

Para verificar funcionamiento deberia mostrar algo parecido.

kubectl version -o yaml
#clientVersion:
#  buildDate: "2022-12-08T19:58:30Z"
#  compiler: gc
#  gitCommit: b46a3f887ca979b1a5d14fd39cb1af43e7e5d12d
#  gitTreeState: clean
#  gitVersion: v1.26.0
#  goVersion: go1.19.4
#  major: "1"
#  minor: "26"
#  platform: linux/amd64
#kustomizeVersion: v4.5.7

Instalamos Helm en dev-machine.

curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

Verificamos la instalación.

helm version --short
#v3.10.2+g50f003e

Instalamos minikube en la minikube-host.

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start --driver=docker

Para verificar funcionamiento.

minikube status
#minikube
#type: Control Plane
#host: Running
#kubelet: Running
#apiserver: Running
#kubeconfig: Configured

Por último se instala Nginx tambien en la minikube-host.

sudo apt install nginx

En la dev-machine creamos la carpeta que contendrá las credenciales del cluster de kubernetes al cual queremos acceder, en este caso al host-minikube, realizamos lo siguiente.

mkdir ~/.kube
cd ~/.kube
touch config

En la minikube-host entramos a configurar el nginx.

cd /etc/nginx
sudo vim nginx.conf

Dentro del archivo nginx.conf agregamos las siguientes lineas al final.

 stream {
        server {
                listen <ip_host>:51999;
                #TCP traffic will be forwarded to the specified server
                proxy_pass <ip_minikube>:8443;
        }        
 }

Puede verificar su <ip_host> con ifconfig.

Se valida que la configuración del nginx sea correcta.

sudo nginx -t
#nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
#nginx: configuration file /etc/nginx/nginx.conf test is successful

Se reinicia el servicio.

sudo service nginx restart

Después nos dirijimos a la host-minikube e ingresamos a la configuración del cluster.

minikube ssh
cd /etc/kubernetes

Copiamos todo el contenido de admin.conf.

sudo cat admin.conf

En la dev-machine en el archivo config que creamos en la ruta ~/.kube le pegamos todo el contenido y modificamos lo siguiente.

    certificate-authority: /home/juan-camilo/.minikube/ca.crt #Se elimina esta linea
    insecure-skip-tls-verify: true #Se agrega esta linea
    server: https://<ip_host_proxy>:51999
  name: mk
contexts:
- context:
    cluster: mk
    user: kubernetes-admin
  name: kubernetes-admin@mk
current-context: kubernetes-admin@mk
kind: Config
preferences: {}
users:
- name: kubernetes-admin

Por último verificamos el acceso al cluster de minikube desde la dev-machine, verificamos visualizando los recursos, como ejemplo los namespaces.

kubectl get namespaces -A
NAME                 STATUS   AGE
colorado-namespace   Active   24h
default              Active   2d1h
kube-node-lease      Active   2d1h
kube-public          Active   2d1h
kube-system          Active   2d1h

Y vemos que podemos acceder sin problema.

⚠️ **GitHub.com Fallback** ⚠️