- Kubernetes. Servicio motionEye en Kubernetes. Servicio publicado con NodePort.
- Kubernetes. Servicio motionEye en Kubernetes. Servicio publicado con LoadBalancer.
- Kubernetes. Servicio motionEye en Kubernetes. Servicio publicado con Ingress.
En el anterior Post, cree un DEPLOYMENT con la imagen de motioneye además del SERVICE que publicaba el POD. Este servicio (NodePort) expone el Deployment en un puerto del rango 30000-32767 en todos los nodos. Esta solución, aunque funcional no es la más adecuada.
Para mejorar el desarrollo voy a cambiar el service por un LoadBalancer, y así exponer el service con una única IP de entrada. El LoadBalancer lo proporciona normalmente un proveedor de nube, pero en este caso es necesario implementarlo en infraestructura propia.
En la guía de k0s se describe el proceso, que es muy sencillo y no va más allá de aplicar tres ficheros .yaml
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/namespace.yaml
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml
Los apply anteriores crean un NAMESPACE propio junto a los recursos necesarios. El tercer apply es un CONFIGMAP que describe el pool de IPs disponibles para MetalLB.
$ kubectl apply -f metallb-configmap.yaml
$ cat metallb-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.2.210-192.168.2.215
El SERVICE modificado quedaría tal que así. He cambiado el tipo a LoadBalancer indicándole además la IP que debe utilizar. Al tener identificada está IP ya podemos además publicarla siendo destino de una regla NAT.
apiVersion: v1
kind: Service
metadata:
name: motioneye
namespace: motioneye
labels:
app: motioneye
spec:
type: LoadBalancer
loadBalancerIP: 192.168.2.210
ports:
- port: 8765
targetPort: 8765
selector:
app: motioneye
Si consultamos los recursos que se han creado se puede ver.
$ kubectl get all -n metallb-system
NAME READY STATUS RESTARTS AGE
pod/controller-6bfbdc89d9-78rjz 1/1 Running 5 (2d1h ago) 17d
pod/speaker-fgj6t 1/1 Running 4 (2d1h ago) 17d
pod/speaker-xhvtn 1/1 Running 4 (2d1h ago) 17d
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/speaker 2 2 2 2 2 kubernetes.io/os=linux 17dNAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/controller 1/1 1 1 17d
NAME DESIRED CURRENT READY AGE
replicaset.apps/controller-6bfbdc89d9 1 1 1 17d
$