promovaweb-devops-review-traefik-stack
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseReview Traefik Stack
Traefik栈审计
Executa uma auditoria completa do arquivo e reporta conformidade, problemas e sugestões.
traefik.yaml对文件执行完整审计,输出合规性结果、问题以及优化建议。
traefik.yamlInstruções de Execução
执行说明
Quando esta skill for invocada, siga exatamente este roteiro:
调用此skill时,请严格遵循以下流程:
Passo 1 — Ler o arquivo
步骤1 — 读取文件
Leia o arquivo completo.
traefik.yaml读取完整的文件。
traefik.yamlPasso 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.mdChecks de Verificação
检查项
1. Imagem
1. 镜像
- Deve usar ou versão superior
traefik:v3 - Alertar se estiver usando sem versão fixada
traefik:latest - 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:
- — deve estar presente
--providers.swarm.endpoint=unix:///var/run/docker.sock - — deve estar presente (atualiza rotas automaticamente)
--providers.swarm.watch=true - — obrigatório por segurança (não expõe todos os serviços por padrão)
--providers.swarm.exposedbydefault=false - — deve corresponder à rede swarm usada pelos outros stacks
--providers.swarm.network=network_swarm_public
检查与provider相关的command参数:
- — 必须存在
--providers.swarm.endpoint=unix:///var/run/docker.sock - — 必须存在(自动更新路由)
--providers.swarm.watch=true - — 安全强制要求(默认不暴露所有服务)
--providers.swarm.exposedbydefault=false - — 需与其他栈使用的swarm网络匹配
--providers.swarm.network=network_swarm_public
3. Entrypoints
3. Entrypoints
Verifique a configuração dos entrypoints:
HTTP (web):
- — deve estar presente
--entrypoints.web.address=:80 - — deve redirecionar para HTTPS
--entrypoints.web.http.redirections.entrypoint.to=websecure - — deve ser
--entrypoints.web.http.redirections.entrypoint.scheme=httpshttps - — redirecionamento 301
--entrypoints.web.http.redirections.entrypoint.permanent=true
HTTPS (websecure):
- — deve estar presente
--entrypoints.websecure.address=:443 - — TLS habilitado por padrão no entrypoint
--entrypoints.websecure.http.tls=true
检查entrypoints配置:
HTTP (web):
- — 必须存在
--entrypoints.web.address=:80 - — 必须重定向到HTTPS
--entrypoints.web.http.redirections.entrypoint.to=websecure - — 必须为
--entrypoints.web.http.redirections.entrypoint.scheme=httpshttps - — 301永久重定向
--entrypoints.web.http.redirections.entrypoint.permanent=true
HTTPS (websecure):
- — 必须存在
--entrypoints.websecure.address=:443 - — entrypoint默认启用TLS
--entrypoints.websecure.http.tls=true
4. Certificados TLS — Let's Encrypt
4. TLS证书 — Let's Encrypt
Verifique a configuração do resolver ACME:
- — deve estar presente
--certificatesresolvers.letsencryptresolver.acme.httpchallenge=true - — deve usar o entrypoint HTTP
--certificatesresolvers.letsencryptresolver.acme.httpchallenge.entrypoint=web - — deve ser um email válido (não
--certificatesresolvers.letsencryptresolver.acme.emailplaceholder)meuemail@gmail.com - — deve corresponder ao volume montado
--certificatesresolvers.letsencryptresolver.acme.storage=/etc/traefik/letsencrypt/acme.json
检查ACME resolver配置:
- — 必须存在
--certificatesresolvers.letsencryptresolver.acme.httpchallenge=true - — 必须使用HTTP entrypoint
--certificatesresolvers.letsencryptresolver.acme.httpchallenge.entrypoint=web - — 必须为有效邮箱(不能是
--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:
- — deve ser
--log.levelouINFOem produção (nãoWARN)DEBUG - Alertar se estiver ativo (alto volume de logs, possível exposição de dados)
--log.level=DEBUG - — formato aceitável
--log.format=common - — verificar se o caminho do arquivo de log é válido
--log.filePath - — recomendado para auditoria
--accesslog=true - — verificar se o caminho é válido
--accesslog.filepath
检查日志配置:
- — 生产环境必须为
--log.level或INFO(不能是WARN)DEBUG - 如果启用需告警(日志量过大,可能泄露数据)
--log.level=DEBUG - — 格式符合要求
--log.format=common - — 检查日志文件路径是否有效
--log.filePath - — 推荐启用以满足审计需求
--accesslog=true - — 检查路径是否有效
--accesslog.filepath
6. Dashboard API
6. Dashboard API
- — verificar se o dashboard está habilitado
--api.dashboard=true - 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
- — 检查dashboard是否启用
--api.dashboard=true - 如果dashboard启用但未配置认证或IP限制需告警
- 检查是否为dashboard配置了带基础认证或IP中间件的Traefik路由
7. Labels do Próprio Traefik (Catchall e Redirects)
7. Traefik自身Labels(全局捕获与重定向)
Verifique as labels do serviço :
traefik- — deve estar presente
traefik.enable=true - — deve estar presente
traefik.swarm.network=network_swarm_public - — middleware de redirect
traefik.http.middlewares.redirect-https.redirectscheme.scheme=https traefik.http.middlewares.redirect-https.redirectscheme.permanent=true- — deve capturar todas as requisições HTTP
traefik.http.routers.http-catchall.rule=HostRegexp(...) - — deve estar no entrypoint web
traefik.http.routers.http-catchall.entrypoints=web - — deve usar o middleware
traefik.http.routers.http-catchall.middlewares=redirect-https@swarm - — prioridade baixa para ser sobreposto por rotas específicas
traefik.http.routers.http-catchall.priority=1
检查服务的labels:
traefik- — 必须存在
traefik.enable=true - — 必须存在
traefik.swarm.network=network_swarm_public - — HTTPS重定向中间件
traefik.http.middlewares.redirect-https.redirectscheme.scheme=https traefik.http.middlewares.redirect-https.redirectscheme.permanent=true- — 必须捕获所有HTTP请求
traefik.http.routers.http-catchall.rule=HostRegexp(...) - — 必须绑定web entrypoint
traefik.http.routers.http-catchall.entrypoints=web - — 必须使用重定向中间件
traefik.http.routers.http-catchall.middlewares=redirect-https@swarm - — 低优先级,可被特定路由覆盖
traefik.http.routers.http-catchall.priority=1
8. Volumes
8. 存储卷
- — deve estar montado como somente leitura (
/var/run/docker.sock:/var/run/docker.sock:ro):ro - — deve ser
vol_certificatese montado emexternal: true/etc/traefik/letsencrypt - Verificar se é declarado mas não usado (pode ser cleanup)
vol_shared - O arquivo deve persistir entre restarts (volume externo)
acme.json
- — 必须以只读模式挂载(
/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 para preservar IP do cliente
mode: host - Porta 443 — deve usar para preservar IP do cliente
mode: host - Alertar se as portas não usarem (Traefik não verá o IP real do cliente)
mode: host
- 80端口 — 必须使用以保留客户端真实IP
mode: host - 443端口 — 必须使用以保留客户端真实IP
mode: host - 如果端口未使用需告警(Traefik无法获取客户端真实IP)
mode: host
10. Configuração de Deploy
10. 部署配置
- — deve incluir
placement.constraintsnode.role == manager - Verificar se há definido (Traefik geralmente tem 1 réplica)
mode: replicated - Verificar se há com
update_config(rollback automático em falha)failure_action: rollback
- — 必须包含
placement.constraintsnode.role == manager - 检查是否设置了(Traefik通常为1个副本)
mode: replicated - 检查是否配置了带的
failure_action: rollback(部署失败时自动回滚)update_config
11. Segurança
11. 安全
- — obrigatório (não expor todos os serviços automaticamente)
--providers.swarm.exposedbydefault=false - — alertar como risco (pode expor informações sensíveis)
--log.level=DEBUG - Email do Let's Encrypt não deve ser (placeholder)
meuemail@gmail.com - Dashboard sem autenticação — risco de exposição de rotas e configurações
- Docker socket montado como — correto (somente leitura)
:ro
- — 强制要求(不自动暴露所有服务)
--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执行完成后,生成结构化报告:
undefinedRelató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)
严重(部署前必须处理)
- ...
- ...
Recomendado
推荐处理
- ...
- ...
Opcional
可选处理
- ...
undefined- ...
undefined