Acceder a un clúster de Kubernetes sin VPN
Dale a tu equipo acceso seguro con kubectl a un clúster K8s privado. Sin API server público, sin appliance VPN, sin pesadillas de split-tunnel.
El problema
Tu API server de Kubernetes está en una subred privada. Los ingenieros necesitan acceso con kubectl desde sus portátiles — en casa, en cafeterías, en la carretera. Las opciones tradicionales son dolorosas:
- Exponer el API server públicamente — riesgo de seguridad inaceptable, incluso con RBAC
- VPN site-to-site — lenta de configurar, da acceso completo a la red, se rompe cuando cambia el NAT
- Bastion host + túnel SSH — frágil, difícil de auditar, una cosa más que mantener
Lo que realmente quieres: dar a usuarios específicos acceso al puerto 6443 del API server, y nada más. Eso es lo que significa Zero Trust en la práctica.
La solución: publisher de WireZTNA en la red del clúster
Instala un publisher de WireZTNA — un binario estático de solo 8 MB — en cualquier máquina que pueda alcanzar el API server de K8s. Puede ser:
- Un nodo del clúster
- Un contenedor sidecar en un pod de utilidad
- Una VM en la misma VPC
- Un DaemonSet (para alta disponibilidad)
El publisher inicia un túnel WireGuard de salida hacia el broker de WireZTNA. No se necesitan puertos de entrada. No hay reglas de firewall que abrir.
Paso 1: Crear un publisher en el panel de administración
En el panel web de WireZTNA, crea un nuevo publisher. Configura los CIDRs expuestos solo con el API server:
Exposed CIDRs: 10.0.1.50/32 # IP de tu API server de K8s
O usa una Published App para un control aún más estricto:
Published App: "K8s API"
Host: 10.0.1.50
Port: 6443
Protocol: TCP
Paso 2: Instalar el publisher
En una máquina con acceso de red al API server:
# Descargar e instalar
curl -fsSL https://your-broker.wireztna.com/api/v1/downloads/publisher/linux/amd64 -o wireztna-publisher
chmod +x wireztna-publisher
# Registrar con el token del panel de administración
./wireztna-publisher enroll --token "pub_xxxxxxxxxxxxxxxx"
# Iniciar (se ejecuta como servicio systemd)
sudo ./wireztna-publisher install
sudo systemctl start wireztna-publisher
Eso es todo. El publisher ahora está conectado al broker y anunciando el CIDR del API server.
Paso 3: Asignar acceso
En el panel de administración, crea un grupo (ej., "Platform Engineers") y vincúlalo al publisher. Añade usuarios al grupo. Cada usuario solo podrá alcanzar los CIDRs o Published Apps específicos que definiste — nada más en la red.
Paso 4: Conectar desde el cliente
Los ingenieros instalan el cliente WireZTNA y se registran:
# Registrarse (una sola vez)
wireztna enroll https://your-broker.wireztna.com/enroll/TOKEN
# Iniciar sesión
wireztna login
# Ahora kubectl funciona directamente
kubectl get pods --server=https://10.0.1.50:6443
El cliente establece un túnel WireGuard al broker, que enruta el tráfico al publisher, que lo reenvía al API server. La máquina del usuario obtiene una entrada split-DNS para que k8s.internal se resuelva a través del túnel.
Por qué esto es mejor que una VPN
- Acceso granular — los usuarios solo pueden alcanzar el puerto 6443 del API server, no hacer SSH a nodos ni acceder a bases de datos
- Sin puertos de entrada — el publisher inicia conexiones de salida; funciona detrás de cualquier firewall o NAT
- Claves por sesión — la PSK rota cada 8 horas por defecto; incluso si se compromete, la ventana es limitada
- Registro de auditoría — ves quién se conectó, cuándo y a qué recursos accedió
- Multi-clúster — añade publishers a cada clúster, asigna diferentes equipos a diferentes clústeres mediante grupos
Despliegue con DaemonSet (HA opcional)
Para clústeres de producción, ejecuta el publisher como DaemonSet para que siempre esté disponible:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: wireztna-publisher
namespace: wireztna
spec:
selector:
matchLabels:
app: wireztna-publisher
template:
metadata:
labels:
app: wireztna-publisher
spec:
hostNetwork: true
containers:
- name: publisher
image: wireztna/publisher:latest
env:
- name: WIREZTNA_TOKEN
valueFrom:
secretKeyRef:
name: wireztna-publisher
key: token
securityContext:
capabilities:
add: ["NET_ADMIN"]
Resumen
Tiempo total de configuración: menos de 10 minutos. Sin appliance VPN, sin reglas de firewall, sin exposición pública. Tus ingenieros obtienen acceso con kubectl desde cualquier lugar, y tú mantienes visibilidad y control total sobre quién accede a qué.