promovaweb-devops-review-traefik-stack

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Review Traefik Stack

Traefik栈审计

Executa uma auditoria completa do arquivo
traefik.yaml
e reporta conformidade, problemas e sugestões.
traefik.yaml
文件执行完整审计,输出合规性结果、问题以及优化建议。

Instruções de Execução

执行说明

Quando esta skill for invocada, siga exatamente este roteiro:
调用此skill时,请严格遵循以下流程:

Passo 1 — Ler o arquivo

步骤1 — 读取文件

Leia o arquivo
traefik.yaml
completo.
读取完整的
traefik.yaml
文件。

Passo 2 — Executar todos os checks abaixo

步骤2 — 执行所有以下检查项

Execute cada bloco de verificação e registre os resultados (✅ OK / ⚠️ Atenção / ❌ Erro).
逐一执行每个检查模块,记录结果(✅ 正常 / ⚠️ 注意 / ❌ 错误)。

Passo 3 — Gravar o resultado

步骤3 — 保存结果

Grave o relatório completo em um arquivo chamado traefik.audit.md.

将完整报告写入名为
traefik.audit.md
的文件。

Checks de Verificação

检查项

1. Imagem

1. 镜像

  • Deve usar
    traefik:v3
    ou versão superior
  • Alertar se estiver usando
    traefik:latest
    sem versão fixada
  • Alertar se estiver usando versão v2 (v3 tem mudanças significativas no provider Docker Swarm)

  • 必须使用
    traefik:v3
    或更高版本
  • 如果使用未固定版本的
    traefik:latest
    需告警
  • 如果使用v2版本需告警(v3在Docker Swarm provider上有重大变更)

2. Configuração do Provider Swarm

2. Swarm Provider配置

Verifique os parâmetros de command relacionados ao provider:
  • --providers.swarm.endpoint=unix:///var/run/docker.sock
    — deve estar presente
  • --providers.swarm.watch=true
    — deve estar presente (atualiza rotas automaticamente)
  • --providers.swarm.exposedbydefault=false
    obrigatório por segurança (não expõe todos os serviços por padrão)
  • --providers.swarm.network=network_swarm_public
    — deve corresponder à rede swarm usada pelos outros stacks

检查与provider相关的command参数:
  • --providers.swarm.endpoint=unix:///var/run/docker.sock
    — 必须存在
  • --providers.swarm.watch=true
    — 必须存在(自动更新路由)
  • --providers.swarm.exposedbydefault=false
    — 安全强制要求(默认不暴露所有服务)
  • --providers.swarm.network=network_swarm_public
    — 需与其他栈使用的swarm网络匹配

3. Entrypoints

3. Entrypoints

Verifique a configuração dos entrypoints:
HTTP (web):
  • --entrypoints.web.address=:80
    — deve estar presente
  • --entrypoints.web.http.redirections.entrypoint.to=websecure
    — deve redirecionar para HTTPS
  • --entrypoints.web.http.redirections.entrypoint.scheme=https
    — deve ser
    https
  • --entrypoints.web.http.redirections.entrypoint.permanent=true
    — redirecionamento 301
HTTPS (websecure):
  • --entrypoints.websecure.address=:443
    — deve estar presente
  • --entrypoints.websecure.http.tls=true
    — TLS habilitado por padrão no entrypoint

检查entrypoints配置:
HTTP (web):
  • --entrypoints.web.address=:80
    — 必须存在
  • --entrypoints.web.http.redirections.entrypoint.to=websecure
    — 必须重定向到HTTPS
  • --entrypoints.web.http.redirections.entrypoint.scheme=https
    — 必须为
    https
  • --entrypoints.web.http.redirections.entrypoint.permanent=true
    — 301永久重定向
HTTPS (websecure):
  • --entrypoints.websecure.address=:443
    — 必须存在
  • --entrypoints.websecure.http.tls=true
    — entrypoint默认启用TLS

4. Certificados TLS — Let's Encrypt

4. TLS证书 — Let's Encrypt

Verifique a configuração do resolver ACME:
  • --certificatesresolvers.letsencryptresolver.acme.httpchallenge=true
    — deve estar presente
  • --certificatesresolvers.letsencryptresolver.acme.httpchallenge.entrypoint=web
    — deve usar o entrypoint HTTP
  • --certificatesresolvers.letsencryptresolver.acme.email
    — deve ser um email válido (não
    meuemail@gmail.com
    placeholder)
  • --certificatesresolvers.letsencryptresolver.acme.storage=/etc/traefik/letsencrypt/acme.json
    — deve corresponder ao volume montado

检查ACME resolver配置:
  • --certificatesresolvers.letsencryptresolver.acme.httpchallenge=true
    — 必须存在
  • --certificatesresolvers.letsencryptresolver.acme.httpchallenge.entrypoint=web
    — 必须使用HTTP entrypoint
  • --certificatesresolvers.letsencryptresolver.acme.email
    — 必须为有效邮箱(不能是
    meuemail@gmail.com
    占位符)
  • --certificatesresolvers.letsencryptresolver.acme.storage=/etc/traefik/letsencrypt/acme.json
    — 需与挂载的存储卷路径匹配

5. Logging

5. 日志配置

Verifique a configuração de logs:
  • --log.level
    — deve ser
    INFO
    ou
    WARN
    em produção (não
    DEBUG
    )
  • Alertar se
    --log.level=DEBUG
    estiver ativo (alto volume de logs, possível exposição de dados)
  • --log.format=common
    — formato aceitável
  • --log.filePath
    — verificar se o caminho do arquivo de log é válido
  • --accesslog=true
    — recomendado para auditoria
  • --accesslog.filepath
    — verificar se o caminho é válido

检查日志配置:
  • --log.level
    — 生产环境必须为
    INFO
    WARN
    (不能是
    DEBUG
  • 如果启用
    --log.level=DEBUG
    需告警(日志量过大,可能泄露数据)
  • --log.format=common
    — 格式符合要求
  • --log.filePath
    — 检查日志文件路径是否有效
  • --accesslog=true
    — 推荐启用以满足审计需求
  • --accesslog.filepath
    — 检查路径是否有效

6. Dashboard API

6. Dashboard API

  • --api.dashboard=true
    — verificar se o dashboard está habilitado
  • Alertar se o dashboard estiver habilitado sem autenticação ou restrição de IP
  • Verificar se há rota Traefik configurada para o dashboard com autenticação básica ou middleware de IP

  • --api.dashboard=true
    — 检查dashboard是否启用
  • 如果dashboard启用但未配置认证或IP限制需告警
  • 检查是否为dashboard配置了带基础认证或IP中间件的Traefik路由

7. Labels do Próprio Traefik (Catchall e Redirects)

7. Traefik自身Labels(全局捕获与重定向)

Verifique as labels do serviço
traefik
:
  • traefik.enable=true
    — deve estar presente
  • traefik.swarm.network=network_swarm_public
    — deve estar presente
  • traefik.http.middlewares.redirect-https.redirectscheme.scheme=https
    — middleware de redirect
  • traefik.http.middlewares.redirect-https.redirectscheme.permanent=true
  • traefik.http.routers.http-catchall.rule=HostRegexp(...)
    — deve capturar todas as requisições HTTP
  • traefik.http.routers.http-catchall.entrypoints=web
    — deve estar no entrypoint web
  • traefik.http.routers.http-catchall.middlewares=redirect-https@swarm
    — deve usar o middleware
  • traefik.http.routers.http-catchall.priority=1
    — prioridade baixa para ser sobreposto por rotas específicas

检查
traefik
服务的labels:
  • traefik.enable=true
    — 必须存在
  • traefik.swarm.network=network_swarm_public
    — 必须存在
  • traefik.http.middlewares.redirect-https.redirectscheme.scheme=https
    — HTTPS重定向中间件
  • traefik.http.middlewares.redirect-https.redirectscheme.permanent=true
  • traefik.http.routers.http-catchall.rule=HostRegexp(...)
    — 必须捕获所有HTTP请求
  • traefik.http.routers.http-catchall.entrypoints=web
    — 必须绑定web entrypoint
  • traefik.http.routers.http-catchall.middlewares=redirect-https@swarm
    — 必须使用重定向中间件
  • traefik.http.routers.http-catchall.priority=1
    — 低优先级,可被特定路由覆盖

8. Volumes

8. 存储卷

  • /var/run/docker.sock:/var/run/docker.sock:ro
    — deve estar montado como somente leitura (
    :ro
    )
  • vol_certificates
    — deve ser
    external: true
    e montado em
    /etc/traefik/letsencrypt
  • Verificar se
    vol_shared
    é declarado mas não usado (pode ser cleanup)
  • O arquivo
    acme.json
    deve persistir entre restarts (volume externo)

  • /var/run/docker.sock:/var/run/docker.sock:ro
    — 必须以只读模式挂载(
    :ro
  • vol_certificates
    — 必须设置为
    external: true
    ,且挂载到
    /etc/traefik/letsencrypt
    路径
  • 检查是否声明了
    vol_shared
    但未使用(可清理)
  • acme.json
    文件必须在重启后持久化保留(需使用外部存储卷)

9. Portas Expostas

9. 暴露端口

  • Porta 80 — deve usar
    mode: host
    para preservar IP do cliente
  • Porta 443 — deve usar
    mode: host
    para preservar IP do cliente
  • Alertar se as portas não usarem
    mode: host
    (Traefik não verá o IP real do cliente)

  • 80端口 — 必须使用
    mode: host
    以保留客户端真实IP
  • 443端口 — 必须使用
    mode: host
    以保留客户端真实IP
  • 如果端口未使用
    mode: host
    需告警(Traefik无法获取客户端真实IP)

10. Configuração de Deploy

10. 部署配置

  • placement.constraints
    — deve incluir
    node.role == manager
  • Verificar se há
    mode: replicated
    definido (Traefik geralmente tem 1 réplica)
  • Verificar se há
    update_config
    com
    failure_action: rollback
    (rollback automático em falha)

  • placement.constraints
    — 必须包含
    node.role == manager
  • 检查是否设置了
    mode: replicated
    (Traefik通常为1个副本)
  • 检查是否配置了带
    failure_action: rollback
    update_config
    (部署失败时自动回滚)

11. Segurança

11. 安全

  • --providers.swarm.exposedbydefault=false
    — obrigatório (não expor todos os serviços automaticamente)
  • --log.level=DEBUG
    — alertar como risco (pode expor informações sensíveis)
  • Email do Let's Encrypt não deve ser
    meuemail@gmail.com
    (placeholder)
  • Dashboard sem autenticação — risco de exposição de rotas e configurações
  • Docker socket montado como
    :ro
    — correto (somente leitura)

  • --providers.swarm.exposedbydefault=false
    — 强制要求(不自动暴露所有服务)
  • --log.level=DEBUG
    — 需告警为风险项(可能泄露敏感信息)
  • Let's Encrypt邮箱不能是
    meuemail@gmail.com
    占位符
  • 未配置认证的dashboard — 存在路由和配置泄露风险
  • Docker socket以
    :ro
    模式挂载 — 符合安全要求(只读)

Formato do Relatório de Saída

输出报告格式

Ao final, produza um relatório estruturado:
undefined
执行完成后,生成结构化报告:
undefined

Relatório de Auditoria — traefik.yaml

审计报告 — traefik.yaml

Data: <data atual>
日期: <当前日期>

Resumo

摘要

  • Total de checks: X
  • ✅ OK: X
  • ⚠️ Atenções: X
  • ❌ Erros: X
  • 检查项总数: X
  • ✅ 正常: X
  • ⚠️ 注意项: X
  • ❌ 错误项: X

Resultados por Categoria

各分类结果

1. Imagem

1. 镜像

✅ traefik:v3: versão major fixada ...
✅ traefik:v3: 主版本已固定 ...

2. Provider Swarm

2. Swarm Provider

✅ exposedbydefault=false: segurança ok ✅ network=network_swarm_public: rede correta ...
✅ exposedbydefault=false: 安全配置正常 ✅ network=network_swarm_public: 网络配置正确 ...

3. Entrypoints

3. Entrypoints

✅ web: redireciona para websecure com 301 ✅ websecure: TLS habilitado ...
✅ web: 301重定向到websecure ✅ websecure: 已启用TLS ...

4. TLS / Let's Encrypt

4. TLS / Let's Encrypt

❌ Email ACME: meuemail@gmail.com é placeholder — configure email real ✅ httpchallenge: entrypoint web configurado ...
❌ ACME邮箱: meuemail@gmail.com为占位符 — 请配置真实邮箱 ✅ httpchallenge: 已配置web entrypoint ...

5. Logging

5. 日志配置

⚠️ log.level=DEBUG: em produção use INFO ou WARN ...
⚠️ log.level=DEBUG: 生产环境请使用INFO或WARN ...

6. Dashboard

6. Dashboard

⚠️ api.dashboard=true sem autenticação configurada — risco de exposição ...
⚠️ api.dashboard=true未配置认证 — 存在暴露风险 ...

7. Labels Catchall

7. 全局捕获Labels

✅ redirect-https middleware: configurado ✅ http-catchall: captura todo tráfego HTTP ...
✅ redirect-https中间件: 已配置 ✅ http-catchall: 已捕获所有HTTP流量 ...

8. Volumes

8. 存储卷

✅ docker.sock montado como :ro ✅ vol_certificates: volume externo para acme.json ...
✅ docker.sock已按:ro模式挂载 ✅ vol_certificates: acme.json使用外部存储卷 ...

9. Portas

9. 端口

✅ 80: mode host configurado ✅ 443: mode host configurado ...
✅ 80: 已配置host模式 ✅ 443: 已配置host模式 ...

10. Deploy

10. 部署

✅ node.role == manager: placement correto ...
✅ node.role == manager: 调度配置正确 ...

11. Segurança

11. 安全

❌ Email ACME é placeholder ⚠️ Dashboard sem autenticação ✅ Docker socket somente leitura ...
❌ ACME邮箱为占位符 ⚠️ Dashboard未配置认证 ✅ Docker socket为只读模式 ...

Ações Recomendadas (por prioridade)

推荐操作(按优先级排序)

Crítico (fazer antes do deploy)

严重(部署前必须处理)

  1. ...
  1. ...

Recomendado

推荐处理

  1. ...
  1. ...

Opcional

可选处理

  1. ...
undefined
  1. ...
undefined