Saltar al contenido principal

🕸️ Networking

Esta página explica cómo se comunican los pods entre sí y cómo limitar quién puede hablar con quién.

Existen dos capas de red, y cada una se configura en un lugar:

CapaQué controlaDónde configurar
Fuera del clústerEntrada y salida (IPs flotantes, grupos de seguridad, balanceadores)Panel Nuvion, en Computar
Dentro del clústerComunicación entre pods (DNS, Services, Network Policies)kubectl

En el clúster, cada pod recibe una IP propia y puede hablar con cualquier otro pod, en cualquier node. Por defecto, nada está bloqueado.


🚀 Antes de comenzar​

🚀 1. Ver la red del clúster​

  1. Acceda a Computar > Kubernetes y haga clic en el nombre del clúster.
  2. En la pestaña Descripción general, vea el campo Red. Muestra la red y el rango de IPs de los nodos (por ejemplo, 10.0.0.0/24).

Red del clúster en la Descripción general

🚀 2. Crear un pod y un Service de prueba​

kubectl run web --image=nginx --port=80
kubectl expose pod web --name=web --port=80
kubectl get pod web -o wide

Espere a que el pod esté Running. Anote la IP que recibió.

🚀 3. Acceder desde otro pod por el nombre (DNS)​

El clúster tiene un DNS interno (CoreDNS): todo Service recibe un nombre.

kubectl run cliente --rm -it --image=curlimages/curl --restart=Never -- curl -sS http://web

Aparece la página Welcome to nginx!. El nombre completo del Service es web.default.svc.cluster.local, con el formato service.namespace.svc.cluster.local. Para hablar con un Service de otro namespace, use al menos web.NAMESPACE.

🚀 4. Bloquear el acceso con una Network Policy​

Una Network Policy es una regla de firewall dentro del clúster. Vamos a permitir que el pod web reciba conexiones solo de pods con la etiqueta acesso=permitido.

Cree el archivo web-politica.yaml:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: web-somente-autorizados
spec:
podSelector:
matchLabels:
run: web
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
acesso: permitido
kubectl apply -f web-politica.yaml
kubectl get networkpolicy

run: web es la etiqueta que el comando kubectl run web agrega al pod automáticamente.

🚀 5. Probar la política​

Sin la etiqueta (debe ser bloqueado):

kubectl run cliente-bloqueado --rm -it --image=curlimages/curl --restart=Never -- curl -sS -m 5 http://web

Respuesta esperada: curl: (28) ... timed out

Con la etiqueta (debe funcionar):

kubectl run cliente-ok --rm -it --labels=acesso=permitido --image=curlimages/curl --restart=Never -- curl -sS -m 5 http://web

Respuesta esperada: la página Welcome to nginx!.

🚀 6. Bloquear todo por defecto (opcional)​

Esta política bloquea toda entrada en los pods del namespace, y solo pasa lo que sea liberado por otras políticas:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: negar-tudo
spec:
podSelector: {}
policyTypes:
- Ingress
aviso

Tenga cuidado al usarla en un namespace que recibe tráfico de un Ingress. Después de bloquear todo, necesita crear una política que libere el origen del Ingress Controller, o el sitio queda fuera de línea.

✅ Cómo saber si funcionó​

En el paso 5, el pod sin etiqueta no logra acceder a web, y el pod con etiqueta sí.

❗ Problemas comunes​

SíntomaCausaSolución
El pod sin etiqueta logra accederEl plugin de red del clúster no aplica Network PolicyHable con soporte para confirmar el soporte de políticas
Could not resolve hostProblema en el DNS internoVerifique kubectl get pods -n kube-system y vea si CoreDNS está Running
Connection refusedEl Service apunta al puerto equivocadoVerifique kubectl get svc web y el puerto del contenedor
Timeout sin política creadaService sin podsEjecute kubectl get endpoints web
Falla el acceso desde fuera del clústerPuerto no liberado en el grupo de seguridadVea el paso 5 de la página Services

🧹 Limpieza​

kubectl delete networkpolicy web-somente-autorizados negar-tudo
kubectl delete svc web
kubectl delete pod web

Si no creó la política del paso 6, el comando anterior muestra una advertencia de not found para negar-tudo. Puede ignorarla.

🧠 ¿Dudas?​

¡Hable con nuestro equipo de soporte técnico de SaveinCloud!