Apache Traffic Control en Kubernetes

El CDN Open Source

Adrian Ramos
Publicado el 14 de diciembre de 2021

Apache Traffic Control es una plataforma de código abierto que permite construir y gestionar redes de entrega de contenido (CDN) a gran escala. Diseñada para ser altamente distribuida, escalable y redundante, satisface las necesidades de operadores de cualquier tamaño, desde startups hasta grandes proveedores de servicios.

Es una solución integral para desplegar CDNs modernas, basada en Apache Traffic Server como sistema de caché. Su arquitectura modular incluye componentes clave que permiten una gestión eficiente y automatizada del tráfico.

  • Traffic Ops: API RESTful para la configuración y gestión centralizada de todos los elementos de la CDN.
  • Traffic Router: Redirige a los usuarios al mejor caché disponible mediante DNS o HTTP 302, optimizando el rendimiento y la disponibilidad.
  • Traffic Monitor: Supervisa la salud de los servidores de caché en tiempo real, asegurando decisiones de enrutamiento basadas en el estado actual de la red.
  • Traffic Stats: Recopila y almacena métricas en tiempo real para análisis y alertas, utilizando InfluxDB.
  • Traffic Portal: Interfaz web intuitiva para la administración y monitoreo de la CDN.

Beneficios clave

  • Reducción de latencia: Al acercar el contenido al usuario final, se disminuye el tiempo de respuesta.
  • Ahorro en costos de ancho de banda: El almacenamiento en caché reduce la carga en los servidores de origen y en los enlaces de red.
  • Mejora en la experiencia del usuario: Una entrega de contenido más rápida y confiable eleva la satisfacción del cliente.
  • Escalabilidad y redundancia: Diseñada para crecer horizontalmente y mantener alta disponibilidad incluso ante fallos.([trafficcontrol.apache.org][1])

Confianza de la industria

Empresas líderes como Comcast, Cisco, Cox y Qwilt utilizan Apache Traffic Control para distribuir más de 30 petabytes de contenido diariamente, demostrando su capacidad y confiabilidad en entornos de producción exigentes.

Despliegue de Apache Traffic Control en Kubernetes

1. Prerrequisitos

Antes de comenzar, asegúrate de tener instalado y configurado lo siguiente:

  • Un clúster de Kubernetes operativo.
  • Helm 3 instalado para la gestión de paquetes en Kubernetes.
  • Acceso a la línea de comandos kubectl con permisos adecuados.
  • Conexión a un repositorio de contenedores que contenga las imágenes necesarias de ATC.

2. Despliegue de los componentes de ATC

Apache Traffic Control consta de varios componentes que trabajan en conjunto. A continuación, se describen los pasos para desplegarlos:

a. Traffic Ops

Traffic Ops es el componente central de ATC, proporcionando una API RESTful para la configuración y gestión de la CDN.

Archivo traffic-ops-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: traffic-ops
spec:
  replicas: 1
  selector:
    matchLabels:
      app: traffic-ops
  template:
    metadata:
      labels:
        app: traffic-ops
    spec:
      containers:
      - name: traffic-ops
        image: apache/traffic_ops:latest
        ports:
        - containerPort: 443
        env:
        - name: TO_DB_SERVER
          value: "traffic-ops-db"
        - name: TO_DB_USER
          value: "trafficops"
        - name: TO_DB_PASSWORD
          value: "password"
        - name: TO_DB_NAME
          value: "traffic_ops"
---
apiVersion: v1
kind: Service
metadata:
  name: traffic-ops
spec:
  selector:
    app: traffic-ops
  ports:
  - protocol: TCP
    port: 443
    targetPort: 443

Aplica el archivo con:

kubectl apply -f traffic-ops-deployment.yaml

b. Traffic Ops Database

Traffic Ops requiere una base de datos PostgreSQL.

Archivo traffic-ops-db-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: traffic-ops-db
spec:
  replicas: 1
  selector:
    matchLabels:
      app: traffic-ops-db
  template:
    metadata:
      labels:
        app: traffic-ops-db
    spec:
      containers:
      - name: traffic-ops-db
        image: postgres:15
        env:
        - name: POSTGRES_USER
          value: "trafficops"
        - name: POSTGRES_PASSWORD
          value: "password"
        - name: POSTGRES_DB
          value: "traffic_ops"
        ports:
        - containerPort: 5432
---
apiVersion: v1
kind: Service
metadata:
  name: traffic-ops-db
spec:
  selector:
    app: traffic-ops-db
  ports:
  - protocol: TCP
    port: 5432
    targetPort: 5432

Aplica el archivo con:

kubectl apply -f traffic-ops-db-deployment.yaml

c. Traffic Portal

Traffic Portal proporciona una interfaz web para la gestión de la CDN.

Archivo traffic-portal-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: traffic-portal
spec:
  replicas: 1
  selector:
    matchLabels:
      app: traffic-portal
  template:
    metadata:
      labels:
        app: traffic-portal
    spec:
      containers:
      - name: traffic-portal
        image: apache/traffic_portal:latest
        ports:
        - containerPort: 443
        env:
        - name: TP_TO_URL
          value: "https://traffic-ops"
---
apiVersion: v1
kind: Service
metadata:
  name: traffic-portal
spec:
  selector:
    app: traffic-portal
  ports:
  - protocol: TCP
    port: 443
    targetPort: 443

Aplica el archivo con:

kubectl apply -f traffic-portal-deployment.yaml

d. Traffic Router

Traffic Router dirige a los usuarios al mejor servidor de caché disponible.

Archivo traffic-router-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: traffic-router
spec:
  replicas: 2
  selector:
    matchLabels:
      app: traffic-router
  template:
    metadata:
      labels:
        app: traffic-router
    spec:
      containers:
      - name: traffic-router
        image: apache/traffic_router:latest
        ports:
        - containerPort: 80
        - containerPort: 443
        env:
        - name: TR_TO_URL
          value: "https://traffic-ops"
---
apiVersion: v1
kind: Service
metadata:
  name: traffic-router
spec:
  selector:
    app: traffic-router
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  - protocol: TCP
    port: 443
    targetPort: 443

Aplica el archivo con:

kubectl apply -f traffic-router-deployment.yaml

e. Traffic Monitor

Traffic Monitor supervisa la salud de los servidores de caché.

Archivo traffic-monitor-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: traffic-monitor
spec:
  replicas: 1
  selector:
    matchLabels:
      app: traffic-monitor
  template:
    metadata:
      labels:
        app: traffic-monitor
    spec:
      containers:
      - name: traffic-monitor
        image: apache/traffic_monitor:latest
        ports:
        - containerPort: 80
        env:
        - name: TM_TO_URL
          value: "https://traffic-ops"
---
apiVersion: v1
kind: Service
metadata:
  name: traffic-monitor
spec:
  selector:
    app: traffic-monitor
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Aplica el archivo con:

kubectl apply -f traffic-monitor-deployment.yaml

3. Configuración de Ingress

Para exponer los servicios de ATC externamente, puedes utilizar un controlador Ingress. A continuación, se muestra un ejemplo utilizando NGINX Ingress Controller:

Archivo traffic-control-ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: traffic-control-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: traffic-control.example.com
    http:
      paths:
      - path: /portal
        pathType: Prefix
        backend:
          service:
            name: traffic-portal
            port:
              number: 443
      - path: /ops
        pathType: Prefix
        backend:
          service:
            name: traffic-ops
            port:
              number: 443

Aplica el archivo con:

kubectl apply -f traffic-control-ingress.yaml

Asegúrate de que el controlador Ingress esté instalado y configurado correctamente en tu clúster.

4. Verificación del despliegue

Verifica que todos los pods estén en estado Running:

kubectl get pods

Accede a la interfaz web de Traffic Portal mediante el dominio configurado en el recurso Ingress (por ejemplo, https://traffic-control.example.com/portal).

Recursos adicionales

Otro contenido relacionado y muy interesante

Si continúas navegando consideramos que aceptas la política del sitio. Más información X Cerrar