Clone
2
Edge Agents
groales edited this page 2025-12-02 19:24:14 +01:00

Edge Agents

Los Edge Agents permiten gestionar entornos Docker remotos que no tienen conectividad directa bidireccional con Portainer Server. Son ideales para:

  • Hosts detrás de firewalls o NAT
  • Dispositivos IoT en ubicaciones remotas
  • Entornos edge computing
  • Sitios con conectividad limitada o intermitente

¿Cómo Funcionan?

A diferencia del Portainer Agent estándar (que requiere puerto 9001 accesible), el Edge Agent:

  1. Inicia la conexión hacia Portainer Server (puerto 8000)
  2. Mantiene un túnel para comunicación bidireccional
  3. Polling periódico cuando la conexión se pierde
  4. Modo async para operaciones cuando está offline

Requisitos

En Portainer Server

  • Puerto 8000 expuesto y accesible desde Internet/red remota
  • Dominio o IP pública (recomendado)
  • Certificado SSL válido (recomendado para producción)

En el Host Remoto

  • Docker instalado
  • Conectividad saliente a Portainer Server (puerto 8000)
  • NO requiere puertos abiertos hacia el host remoto

Habilitar Edge en Portainer Server

1. Exponer Puerto 8000

Edita docker-compose.yml y descomenta el puerto 8000:

services:
  portainer:
    container_name: portainer
    image: portainer/portainer-ce:lts
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    ports:
      - "9443:9443"
      - "8000:8000"  # ← Descomentar para Edge Agents
    networks:
      - portainer_network

2. Reiniciar Portainer

docker compose down
docker compose up -d

3. Verificar Puerto

# Verificar que el puerto está escuchando
sudo netstat -tulpn | grep :8000
# o con ss
ss -tulpn | grep :8000

4. Configurar Firewall

# UFW (Ubuntu/Debian)
sudo ufw allow 8000/tcp

# firewall-cmd (RHEL/CentOS/Fedora)
sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload

# iptables
sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

Desplegar Edge Agent en Host Remoto

Desde la Interfaz de Portainer

  1. Ir a Environments:

    • Click en Environments en el menú lateral
    • Click en Add environment
  2. Seleccionar Tipo:

    • Selecciona Docker Standalone
    • Click en Start Wizard
  3. Elegir Edge Agent:

    • Selecciona la opción Edge Agent
    • Elige tu sistema operativo (Linux / Windows WSL / Windows WCS)
  4. Configurar Opciones:

    • Name: Nombre descriptivo del entorno (ej: produccion-server1)
    • Portainer server URL: https://portainer.tudominio.com o https://IP:9443
    • Edge ID: Se genera automáticamente
    • Polling interval: Frecuencia de sincronización (por defecto 5 segundos)
  5. Copiar Comando:

    Portainer generará un comando similar a este:

    Linux / WSL:

    docker run -d \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v /var/lib/docker/volumes:/var/lib/docker/volumes \
      -v /:/host \
      -v portainer_agent_data:/data \
      --restart always \
      -e EDGE=1 \
      -e EDGE_ID=<tu-edge-id> \
      -e EDGE_KEY=<tu-edge-key> \
      -e EDGE_INSECURE_POLL=0 \
      --name portainer_edge_agent \
      portainer/agent:latest
    

    Windows WCS:

    docker run -d `
      -v \\.\pipe\docker_engine:\\.\pipe\docker_engine `
      -v portainer_agent_data:C:\ProgramData\Portainer `
      --restart always `
      -e EDGE=1 `
      -e EDGE_ID=<tu-edge-id> `
      -e EDGE_KEY=<tu-edge-key> `
      --name portainer_edge_agent `
      portainer/agent:latest
    
  6. Ejecutar en Host Remoto:

    • Conéctate por SSH al host remoto
    • Pega y ejecuta el comando
    • Espera a que el contenedor se descargue e inicie

Verificar Conexión

En el host remoto:

# Ver logs del Edge Agent
docker logs portainer_edge_agent

# Deberías ver mensajes como:
# [INFO] Edge agent started
# [INFO] Polling Portainer server
# [INFO] Successfully connected to Portainer server

En Portainer Server:

  1. Ve a Environments
  2. El nuevo entorno debería aparecer con estado Connected (punto verde)
  3. Click en el entorno para gestionarlo

Configuración Avanzada

Intervalo de Polling Personalizado

docker run -d \
  # ... resto de opciones ...
  -e EDGE_POLL_INTERVAL=10s \  # Cambiar intervalo (default: 5s)
  portainer/agent:latest

⚠️ Nota: Intervalos muy cortos aumentan el tráfico de red.

Edge Agent con Host Management

Para habilitar funciones de gestión del host (CPU, memoria, procesos):

docker run -d \
  # ... resto de opciones ...
  -v /:/host \  # Montar filesystem del host
  portainer/agent:latest

Modo Inseguro (Solo para Desarrollo)

Si usas certificados autofirmados o HTTP:

docker run -d \
  # ... resto de opciones ...
  -e EDGE_INSECURE_POLL=1 \  # ⚠️ NO usar en producción
  portainer/agent:latest

Edge Agent con Docker Compose

Crear docker-compose.yml en el host remoto:

version: '3.8'

services:
  portainer_edge_agent:
    image: portainer/agent:latest
    container_name: portainer_edge_agent
    restart: always
    environment:
      EDGE: "1"
      EDGE_ID: "<tu-edge-id>"
      EDGE_KEY: "<tu-edge-key>"
      EDGE_INSECURE_POLL: "0"
      EDGE_POLL_INTERVAL: "5s"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
      - /:/host
      - portainer_agent_data:/data

volumes:
  portainer_agent_data:

Desplegar:

docker compose up -d

Edge Groups y Tags

Crear Edge Group

Los Edge Groups permiten agrupar múltiples entornos edge para gestión centralizada:

  1. Ir a Edge Groups:

    • Menú lateral → Edge Groups
    • Click Add edge group
  2. Configurar Grupo:

    • Name: Nombre del grupo (ej: iot-devices)
    • Endpoints: Seleccionar entornos edge a incluir
    • Tags: Opcional, para filtrado avanzado
  3. Deploy Stack a Grupo:

    • Puedes desplegar stacks en todos los entornos del grupo simultáneamente
    • Los cambios se sincronizan automáticamente

Edge Stacks

Los Edge Stacks son stacks Docker Compose que se despliegan en múltiples entornos edge:

  1. Crear Edge Stack:

    • Edge ComputeEdge StacksAdd stack
  2. Configurar Stack:

    • Name: Nombre del stack
    • Edge groups: Seleccionar grupos target
    • Compose file: Pegar tu docker-compose.yml
  3. Deployment type:

    • Static: Se despliega una vez
    • Git: Se sincroniza desde un repo Git
  4. Pre-pull images: Descargar imágenes antes de desplegar (recomendado)

Edge Jobs

Ejecutar comandos en múltiples entornos edge:

  1. Crear Edge Job:

    • Edge ComputeEdge JobsAdd edge job
  2. Opciones:

    • Basic: Comando simple
    • Advanced: Scripts complejos
  3. Scheduling:

    • One-off: Se ejecuta una vez
    • Recurring: Programado (cron-like)

Ejemplo:

# Actualizar todos los contenedores en entornos edge
docker compose pull
docker compose up -d

Troubleshooting

Edge Agent No Conecta

  1. Verificar firewall en servidor:

    sudo ufw status | grep 8000
    
  2. Verificar puerto 8000 accesible: Desde el host remoto:

    telnet <portainer-server-ip> 8000
    # o
    nc -zv <portainer-server-ip> 8000
    
  3. Revisar logs:

    docker logs portainer_edge_agent --tail 50
    

Certificado SSL Inválido

Si usas certificados autofirmados, usa EDGE_INSECURE_POLL=1 (solo desarrollo):

docker run -d \
  # ... resto de opciones ...
  -e EDGE_INSECURE_POLL=1 \
  portainer/agent:latest

Edge Agent Se Desconecta Frecuentemente

  1. Aumentar timeout:

    -e EDGE_POLL_TIMEOUT=30s
    
  2. Verificar estabilidad de red:

    ping -c 100 <portainer-server-ip>
    
  3. Revisar recursos del host:

    docker stats portainer_edge_agent
    

Actualizar Edge Agent

# Detener y eliminar contenedor actual
docker stop portainer_edge_agent
docker rm portainer_edge_agent

# Pull nueva imagen
docker pull portainer/agent:latest

# Re-ejecutar comando de despliegue con las mismas variables EDGE_ID y EDGE_KEY

⚠️ Importante: No cambies EDGE_ID o EDGE_KEY, o necesitarás re-agregar el entorno en Portainer.

Seguridad

Recomendaciones

  1. Usar HTTPS con certificados válidos
  2. NO usar EDGE_INSECURE_POLL=1 en producción
  3. Limitar acceso al puerto 8000 con firewall
  4. Rotar Edge Keys periódicamente (re-deploy agent)
  5. Monitorizar logs de conexiones sospechosas

Exponer Solo con VPN (Alternativa Segura)

Si no quieres exponer el puerto 8000 a Internet:

  1. Configurar VPN (WireGuard, OpenVPN, Tailscale)
  2. Conectar hosts remotos a la VPN
  3. Configurar Portainer Server URL con IP privada de VPN
  4. Edge Agents conectan a través del túnel VPN

Recursos adicionales:

Volver a: Página Principal | Instalación Avanzada