AWS EKS中用Terraform+Helm部署Kong遇CORS错误求助
解决Kong Admin API的CORS问题
问题根源
你当前的CORS插件配置存在两个核心问题:
- ConfigMap格式错误:插件配置的键名使用了
_config,Kong无法正确识别为CORS插件的配置内容。 - 插件作用范围未覆盖Admin API:Kong默认不会将全局插件应用到Admin API路由,而你的请求是直接访问Admin API域名,需要确保插件作用于Admin API的流量。
修复步骤
1. 修正CORS插件的ConfigMap配置
将kubernetes_config_map中的_config键名改为cors,让Kong能正确加载插件配置:
resource "kubernetes_config_map" "kong_cors_plugin" { metadata { name = "kong-cors-plugin" namespace = "kong" } data = { "cors" = <<-EOT { "origins": ["https://devapi.example.com"], "methods": ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"], "headers": ["Accept", "Authorization", "Content-Type"], "exposed_headers": ["X-Custom-Header"], "credentials": true, "max_age": 3600 } EOT } }
注意:将origins从*改为具体的前端域名https://devapi.example.com,更符合生产环境安全规范,也能避免带凭证请求的CORS问题。
2. 确保CORS插件作用于Admin API
修改Helm Chart的values配置,通过admin.plugins直接为Admin API启用CORS插件:
admin: enabled: true type: NodePort http: enabled: true tls: enabled: false ingress: enabled: true tls: true hostname: adminapi.example.com path: / pathType: ImplementationSpecific annotations: "kubernetes.io/ingress.class": "alb" "alb.ingress.kubernetes.io/scheme": "internal" "alb.ingress.kubernetes.io/group.name": "kong-alb-internal" "alb.ingress.kubernetes.io/group.order": "502" "alb.ingress.kubernetes.io/listen-ports": "[{\"HTTPS\":443}, {\"HTTP\":80}]" "alb.ingress.kubernetes.io/ssl-redirect": "443" "alb.ingress.kubernetes.io/certificate-arn": "arn:*********" # 添加以下配置,为Admin API绑定CORS插件 plugins: configMaps: - pluginName: "cors" name: "kong-cors-plugin"
3. 重新部署配置
执行Terraform命令更新部署:
terraform init terraform plan terraform apply
4. 验证修复
访问https://devapi.example.com/services,检查网络请求的响应头是否包含Access-Control-Allow-Origin: https://devapi.example.com,确认CORS错误消失。
额外检查点
- 确认ALB的SSL重定向配置正确,避免HTTP请求干扰CORS头的传递
- 检查Kong Pod的日志,确认插件已成功加载(无配置错误日志)
- 验证Admin API的Ingress规则正确匹配所有请求路径
内容的提问来源于stack exchange,提问作者jalal zivari
相关产品推荐
相关产品推荐

