1. 项目背景与核心价值
在当今企业数字化转型浪潮中,API经济已成为不可忽视的技术架构模式。n8n作为一款开源的自动化工作流工具,其灵活性和可扩展性使其在企业级应用中大放异彩。而Kong作为业界领先的API网关解决方案,在流量管理、安全控制和监控分析方面有着不可替代的作用。
将n8n与Kong集成,本质上是在自动化工作流引擎前加装了一个智能流量调度器。这种架构组合解决了几个关键痛点:
- 工作流API的集中管控难题
- 不同业务系统间的认证统一问题
- 自动化任务的流量配额管理
- 敏感操作的审计追踪需求
我在金融科技公司的实践中发现,当n8n工作流数量超过50个时,直接暴露工作流端点会带来严重的管理混乱。通过Kong网关的介入,我们实现了:
- 所有/n8n前缀的API请求统一路由
- JWT令牌的自动验证
- 基于消费者(Consumer)的访问控制
- 请求限流和熔断保护
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 集成架构设计解析
2.1 系统拓扑设计
典型的集成架构采用分层设计:
code复制客户端 → Kong网关 → n8n服务 → 业务系统
关键组件说明:
- Kong节点:建议至少2个实例组成集群,采用数据库模式(PostgreSQL)存储配置
- n8n服务:部署为无状态服务,关闭自带的基础认证
- 数据库层:n8n使用独立数据库,与Kong的配置存储隔离
2.2 网络流量路径
原始HTTP请求经过以下处理流程:
- 客户端发送请求到
api.company.com/n8n/workflow - Kong匹配
/n8n路由规则 - 执行JWT插件验证令牌
- 应用速率限制策略
- 代理转发到内部
n8n-server:5678 - n8n处理完成后返回响应
重要提示:生产环境必须为Kong配置TLS终止,n8n服务可运行在内部网络
3. 详细配置实操指南
3.1 Kong基础配置
首先添加n8n的上游服务:
bash复制curl -X POST http://localhost:8001/upstreams \
--data "name=n8n-upstream"
curl -X POST http://localhost:8001/upstreams/n8n-upstream/targets \
--data "target=n8n-server:5678" \
--data "weight=100"
然后创建路由规则:
bash复制curl -X POST http://localhost:8001/services \
--data "name=n8n-service" \
--data "host=n8n-upstream" \
--data "path=/"
curl -X POST http://localhost:8001/services/n8n-service/routes \
--data "paths[]=/n8n" \
--data "strip_path=false"
3.2 JWT认证配置
启用JWT插件并配置:
bash复制curl -X POST http://localhost:8001/services/n8n-service/plugins \
--data "name=jwt" \
--data "config.claims_to_verify=exp" \
--data "config.run_on_preflight=true"
创建消费者并关联凭证:
bash复制curl -X POST http://localhost:8001/consumers \
--data "username=automation-team"
curl -X POST http://localhost:8001/consumers/automation-team/jwt \
-H "Content-Type: application/x-www-form-urlencoded"
3.3 速率限制配置
针对不同团队设置分级限流:
bash复制# 基础限流
curl -X POST http://localhost:8001/services/n8n-service/plugins \
--data "name=rate-limiting" \
--data "config.minute=30" \
--data "config.policy=local"
# 高优先级团队
curl -X POST http://localhost:8001/consumers/automation-team/plugins \
--data "name=rate-limiting" \
--data "config.minute=100"
4. n8n服务适配改造
4.1 安全配置调整
修改n8n配置(.env文件):
code复制N8N_BASIC_AUTH_ACTIVE=false
N8N_JWT_AUTH_ACTIVE=false
EXECUTIONS_PROCESS=main
N8N_HOST=0.0.0.0
4.2 工作流暴露策略
建议采用以下命名规范:
- 公共API:
/n8n/public/workflow-name - 内部API:
/n8n/internal/workflow-name - 管理API:
/n8n/admin/workflow-name
在Kong中对应设置不同的路由前缀和访问策略。
5. 高级功能实现
5.1 请求转换与参数映射
使用Kong的Request Transformer插件:
bash复制curl -X POST http://localhost:8001/services/n8n-service/plugins \
--data "name=request-transformer" \
--data "config.add.headers[1]=X-Authenticated-User:$(consumer.username)" \
--data "config.remove.querystring[1]=auth_token"
5.2 基于Keycloak的联合认证
集成Keycloak作为JWT签发方:
bash复制curl -X POST http://localhost:8001/services/n8n-service/plugins \
--data "name=jwt" \
--data "config.uri=https://keycloak.example.com/auth/realms/master/protocol/openid-connect/certs"
5.3 监控与告警配置
Prometheus监控示例配置:
yaml复制scrape_configs:
- job_name: 'kong'
metrics_path: '/metrics'
static_configs:
- targets: ['kong:8001']
- job_name: 'n8n'
static_configs:
- targets: ['n8n:5678']
6. 生产环境注意事项
6.1 性能调优建议
Kong节点资源配置基准:
- 每个CPU核心处理约2000 RPS
- 1GB内存可支持500个活跃插件
- 建议启用数据库缓存:
code复制kong.conf: db_cache_ttl=3600 db_cache_neg_ttl=30
6.2 高可用部署方案
推荐架构:
code复制 → Kong Node1
Load Balancer → → Kong Node2 → n8n Cluster
→ Kong Node3
关键配置:
- 使用PostgreSQL集群作为配置存储
- 为Kong配置健康检查端点
- n8n采用Redis作为队列后端
6.3 常见故障排查
问题1:JWT验证失败
- 检查令牌有效期(exp claim)
- 验证签名密钥是否匹配
- 确认Kong时间同步(NTP服务)
问题2:速率限制不生效
- 检查插件是否绑定到正确路由
- 确认策略类型(local/cluster)
- 查看Kong错误日志中的限流计数器
问题3:请求头丢失
- 检查nginx_proxy_*相关配置
- 验证header传输白名单
- 测试直接访问n8n服务对比行为
7. 安全加固实践
7.1 网络层防护
建议配置:
- Kong管理API仅限内网访问
- n8n服务不暴露公网端口
- 启用双向TLS认证:
bash复制curl -X POST http://localhost:8001/services/n8n-service/plugins \ --data "name=mtls-auth" \ --data "config.ca_certificates=123e4567-e89b-12d3-a456-426614174000"
7.2 审计日志配置
启用File Log插件:
bash复制curl -X POST http://localhost:8001/services/n8n-service/plugins \
--data "name=file-log" \
--data "config.path=/var/log/kong/n8n-audit.log" \
--data "config.reopen=true"
日志字段建议包含:
- 消费者ID
- 请求时间戳
- 工作流名称
- HTTP状态码
- 处理时长
7.3 密钥管理方案
推荐采用Hashicorp Vault集成:
bash复制curl -X POST http://localhost:8001/services/n8n-service/plugins \
--data "name=vault-auth" \
--data "config.vault_addr=https://vault.example.com" \
--data "config.kv_paths=kong/creds"
8. 扩展应用场景
8.1 多租户隔离实现
通过Kong的标签功能实现:
bash复制curl -X POST http://localhost:8001/services \
--data "name=n8n-tenant-a" \
--data "tags=tenant-a" \
--data "host=n8n-upstream"
curl -X POST http://localhost:8001/services/n8n-tenant-a/plugins \
--data "name=acl" \
--data "config.allow=group-a"
8.2 工作流版本控制
利用Kong的蓝绿发布功能:
bash复制# 创建v1上游
curl -X POST http://localhost:8001/upstreams/n8n-upstream/targets \
--data "target=n8n-v1:5678" \
--data "weight=100"
# 添加v2测试节点
curl -X POST http://localhost:8001/upstreams/n8n-upstream/targets \
--data "target=n8n-v2:5678" \
--data "weight=10"
8.3 自动化证书管理
集成Let's Encrypt:
bash复制curl -X POST http://localhost:8001/plugins \
--data "name=acme" \
--data "config.account_email=admin@example.com" \
--data "config.tos_accepted=true" \
--data "config.domains[]=api.example.com"
在实际部署中,我们发现当QPS超过500时,需要特别注意Kong的worker进程配置。建议设置worker数量为CPU核心数的1.5倍,并启用共享字典缓存。对于长时间运行的工作流,可以在n8n侧配置执行超时时间,与Kong的upstream_timeout保持协调。
