You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下Kong开源网关HTTPS配置的CORS问题解决咨询

Kong开源版容器化部署HTTPS Manager的CORS问题

部署背景

已按官方文档完成以下部署步骤:

1. 创建Docker网络

docker network create kong-net

2. 启动PostgreSQL容器

docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kongpass" \
postgres:13

3. 初始化数据库

docker run --rm --network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_PASSWORD=kongpass" \
kong/kong-gateway:3.7.1.2 kong migrations bootstrap

4. 启动Kong网关容器

docker run -d --name kong-gateway \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kongpass" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
-e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
-e KONG_LICENSE_DATA \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
-p 8002:8002 \
-p 8445:8445 \
kong/kong-gateway:3.7.1.2

问题描述

HTTP版Kong Manager(端口8002)可正常访问,但将KONG_ADMIN_GUI_URL改为https://localhost:8445后,通过HTTPS访问Manager时,前端调用Admin API(端口8444)出现CORS错误。尝试移除KONG_ADMIN_GUI_URL参数无效,且认为CORS插件并非正确解决方案。


解决方案

要解决HTTPS环境下的CORS问题,需通过Kong核心配置参数调整Admin API的跨域规则,同时确保Manager与Admin API的HTTPS配置匹配,具体步骤如下:

1. 停止并移除现有Kong容器

docker stop kong-gateway
docker rm kong-gateway

2. 重新启动Kong容器,添加关键配置参数

修改启动命令,补充核心配置以适配HTTPS跨域场景:

docker run -d --name kong-gateway \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kongpass" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
# 配置Admin API同时监听HTTP和HTTPS端口,启用SSL(自动生成自签名证书)
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
# 指定Kong Manager的HTTPS访问地址
-e "KONG_ADMIN_GUI_URL=https://localhost:8445" \
# 允许Manager的HTTPS地址发起跨域请求
-e "KONG_ADMIN_CORS_ALLOW_ORIGINS=https://localhost:8445" \
# 允许跨域请求携带认证凭证
-e "KONG_ADMIN_CORS_ALLOW_CREDENTIALS=true" \
# 放开常用的跨域请求方法
-e "KONG_ADMIN_CORS_ALLOW_METHODS=GET, POST, PUT, PATCH, DELETE, OPTIONS" \
# 允许跨域请求携带的头信息
-e "KONG_ADMIN_CORS_ALLOW_HEADERS=Origin, X-Requested-With, Content-Type, Accept, Authorization" \
-e KONG_LICENSE_DATA \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
-p 8002:8002 \
-p 8445:8445 \
kong/kong-gateway:3.7.1.2

3. 验证配置

  1. 访问https://localhost:8445,确认Kong Manager正常加载
  2. 打开浏览器开发者工具的「网络」面板,检查Admin API请求(如/services)的响应头,应包含:
    • Access-Control-Allow-Origin: https://localhost:8445
    • Access-Control-Allow-Credentials: true
  3. 确认页面无CORS错误提示

关键说明

  • 自签名证书:上述配置使用Kong自动生成的自签名证书,生产环境需通过KONG_SSL_CERT和KONG_SSL_CERT_KEY参数指定自定义SSL证书
  • 开源版适配:若使用纯开源版Kong(非Kong Gateway),需替换镜像为kong/kong:3.7.1,并移除KONG_LICENSE_DATA参数
  • 配置逻辑:通过Kong核心参数配置Admin API的CORS规则,比单独启用CORS插件更适配Manager与Admin API的内部调用场景

内容的提问来源于stack exchange,提问作者docdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:22:04