Desplegar el agente en Kubernetes
Antes de empezar
Section titled “Antes de empezar”Necesitas:
- Un clúster de Kubernetes operativo con
kubectlconfigurado. - Un token de túnel desde el panel de Nubulus en Tunnels → Nuevo túnel.
- Salida UDP en el puerto
51820desde los pods hacia internet.
Secret para el token
Section titled “Secret para el token”Guarda el token como un Secret de Kubernetes para no exponerlo en los manifiestos:
kubectl create secret generic nubulus-tunnel-token \ --from-literal=TUNNEL_TOKEN="tun_xxxxxxxxxxxxxxxxxxxxxxxxx"Verifica que se ha creado:
kubectl get secret nubulus-tunnel-tokenDeployment del agente
Section titled “Deployment del agente”Crea el fichero tunnel-deployment.yaml:
apiVersion: apps/v1kind: Deploymentmetadata: name: nubulus-tunnel labels: app: nubulus-tunnelspec: replicas: 1 selector: matchLabels: app: nubulus-tunnel template: metadata: labels: app: nubulus-tunnel spec: containers: - name: tunnel-agent image: code.as210469.net/nubulusnetworkopensource/tunnel:latest envFrom: - secretRef: name: nubulus-tunnel-token env: - name: LOG_LEVEL value: "info" resources: requests: cpu: "50m" memory: "64Mi" limits: cpu: "200m" memory: "128Mi"El agente no necesita privilegios ni capabilities adicionales. Aplica el manifiesto:
kubectl apply -f tunnel-deployment.yamlApuntar rutas a servicios del clúster
Section titled “Apuntar rutas a servicios del clúster”El agente resuelve los destinos de las rutas por DNS interno del clúster. En el panel de Nubulus configura el upstream apuntando al nombre DNS del Service:
- Mismo namespace:
http://mi-app:8080 - Namespace diferente:
http://mi-app.otro-namespace.svc.cluster.local:8080
Ejemplo: exponer un servicio backend
Section titled “Ejemplo: exponer un servicio backend”apiVersion: v1kind: Servicemetadata: name: mi-appspec: selector: app: mi-app ports: - port: 8080 targetPort: 8080Ruta a configurar en el panel:
| Tipo | Hostname | Path | Upstream host | Upstream port |
|---|---|---|---|---|
host | mi-dominio.com | / | mi-app | 8080 |
Verificar el despliegue
Section titled “Verificar el despliegue”Comprueba que el pod está corriendo:
kubectl get pods -l app=nubulus-tunnelRevisa los logs para confirmar que el túnel está activo:
kubectl logs -l app=nubulus-tunnel --followDeberías ver:
{"level":"info","message":"túnel activo"}{"level":"info","message":"túnel conectado"}Actualizar el token
Section titled “Actualizar el token”Para rotar el token sin modificar el Deployment, actualiza el Secret y reinicia el pod:
kubectl create secret generic nubulus-tunnel-token \ --from-literal=TUNNEL_TOKEN="tun_yyyyyyyyyyyyyyyyyyyyy" \ --dry-run=client -o yaml | kubectl apply -f -
kubectl rollout restart deployment/nubulus-tunnelConsideraciones de red
Section titled “Consideraciones de red”| Escenario | Solución |
|---|---|
| Servicio en el mismo namespace | http://mi-app:puerto |
| Servicio en otro namespace | http://mi-app.otro-namespace.svc.cluster.local:puerto |
| Servicio fuera del clúster | IP o hostname externo accesible desde los pods |
| Clúster con NetworkPolicies | Añadir una NetworkPolicy que permita egreso UDP en puerto 51820 desde el pod del agente |