reverse proxy minikube - juancamilocc/virtual_resources GitHub Wiki
El escenario general se muestra a continuación.
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.