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. 验证配置
- 访问
https://localhost:8445,确认Kong Manager正常加载 - 打开浏览器开发者工具的「网络」面板,检查Admin API请求(如
/services)的响应头,应包含:Access-Control-Allow-Origin: https://localhost:8445Access-Control-Allow-Credentials: true
- 确认页面无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
相关产品推荐
相关产品推荐

