Inicio > Cursos > Docker & Kubernetes > Services y Networking en Kubernetes
Docker & KubernetesKubernetes FundamentosLección 8 de 12

Services y Networking en Kubernetes

Los Pods son efimeros — se crean y destruyen constantemente. Un Service proporciona una IP estable y un nombre DNS para acceder a un grupo de Pods.

Tipos de Service:

• ClusterIP (default): Solo accesible dentro del cluster. Ideal para comunicacion entre microservicios. • NodePort: Expone el servicio en un puerto fijo (30000-32767) en cada nodo. Accesible desde fuera del cluster. • LoadBalancer: Crea un load balancer externo (en cloud providers como AWS/GCP/Azure). La forma estandar de exponer apps al internet. • ExternalName: Alias DNS a un servicio externo.

# service-clusterip.yaml
apiVersion: v1
kind: Service
metadata:
  name: api-service
spec:
  type: ClusterIP
  selector:
    app: mi-app    # selecciona pods con label app=mi-app
  ports:
    - port: 80          # puerto del Service
      targetPort: 3000   # puerto del contenedor
      protocol: TCP

---
# service-loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
  name: api-public
spec:
  type: LoadBalancer
  selector:
    app: mi-app
  ports:
    - port: 80
      targetPort: 3000
# ingress.yaml — routing avanzado de trafico HTTP
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mi-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: api.midominio.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: api-service
                port:
                  number: 80
    - host: web.midominio.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: frontend-service
                port:
                  number: 80
# network-policy.yaml — restringir trafico entre pods
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-solo-desde-api
spec:
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: mi-app
      ports:
        - protocol: TCP
          port: 5432
# Solo pods con label app=mi-app pueden conectarse a postgres:5432
# Comandos para Services
kubectl get services
kubectl get svc              # alias corto

# Ver endpoints (pods reales detras del service)
kubectl get endpoints api-service

# DNS interno: desde cualquier pod puedes acceder a:
# api-service.default.svc.cluster.local
# o simplemente: api-service (mismo namespace)

# Probar conectividad desde un pod temporal
kubectl run debug --rm -it --image=busybox -- sh
# Dentro del pod:
# wget -qO- http://api-service:80

# Ver Ingress
kubectl get ingress
kubectl describe ingress mi-ingress
ConsejoUsa ClusterIP para servicios internos (DB, cache, APIs internas). Usa LoadBalancer o Ingress solo para lo que necesita acceso externo. Menos exposicion = mas seguridad.
← Pods y Deployments en profundidadConfigMaps, Secrets y Volumes →

Practica esta lección

Resuelve los ejercicios del curso de Docker & Kubernetes en la app, gratis y con corrección automática.

Empezar a practicar