我正在 Docker 上运行 Kong 镜像 kong-docker-kong-gateway-docker.bintray.io/kong-enterprise-edition:2.3.2.0-alpine。
我用这些命令初始化了整个环境:
docker network create kong-net
docker run --network=kong-net -it -p 15432:5432 -v kong-datastore:/var/lib/postgresql/data -e POSTGRES_DB=api-gw -e POSTGRES_USER=kong -e POSTGRES_PASSWORD=kongPwd --name kong-db kong-db:1.0
docker run --rm --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-db" -e "KONG_PG_DATABASE=api-gw"-e "KONG_PG_PASSWORD=kongPwd" -e "KONG_PASSWORD=abcde12345" kong:1.0 kong migrations bootstrap
docker run --network=kong-net -it -p 80:80 -p 8000:8000 -p 8001:8001 -p 8443:8443 -p 8444:8444 -p 8002:8002 -p 8445:8445 -p 8003:8003 -p 8004:8004 -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-db" -e "KONG_PG_DATABASE=api-gw"-e "KONG_PG_PASSWORD=kongPwd" -e "KONG_PASSWORD=01Ko1996" kong:1.0
然后,我设法从管理器界面添加服务、路由和插件,可通过 http://localhost:8002 访问
当我尝试编辑插件时(例如:尝试将其设置为禁用[“插件”,选择一个插件,单击“编辑”,关闭“此插件已启用”开关,单击“更新”并确认] ),但是我的浏览器(Chrome)报告以下错误:
Access to XMLHttpRequest at 'http://localhost:8001/default/services/0978929a-595d-427a-938e-44c29bae4f7d/plugins/cb0e382f-9be3-4a17-bde2-d2dc7c40384a' from origin 'http://localhost:8002' has been blocked by CORS policy: Method PATCH is not allowed by Access-Control-Allow-Methods in preflight response.
看起来 PATCH HTTP 谓词被 CORS 策略拒绝,从 localhost:8002 的 UI 界面到 localhost:8001 的 API。
让我强调一下,这个问题并不涉及针对服务/路由的 CORS 配置,而仅涉及 Kong Manager 内部。
我已经尝试过以下操作:
上传镜像中的文件,名为/etc/kong/kong.conf,包含以下配置:
portal_cors_origins = http://localhost:8001, https://localhost:8002, http://localhost:8003, https://localhost:8004
也尝试过这个:
portal_cors_origins = *
使用以下环境变量启动容器(在 docker-compose 的文件中):
KONG_PORTAL_CORS_ORIGINS: http://localhost:8001, https://localhost:8002, http://localhost:8003, https://localhost:8004
也尝试过这个:
KONG_PORTAL_CORS_ORIGINS: "*"
使用以下环境变量启动容器(在 docker-compose 的文件中):
NGINX_PROXY_SET_HEADER: Origin ""
上传镜像中的文件,名为 /usr/local/openresty/nginx/conf/nginx.conf,包含以下配置(以及其他 ngnix 配置):
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
add_header 'Access-Control-Allow-Origin' "*";
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT, PATCH';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
}
Kong Manager应该如何配置以允许CORS并解决这个问题?
您可能已经检查过配置参考:https://docs.konghq.com/enterprise/2.6.x/property-reference/
portal_XXX 设置用于控制开发门户而不是 kong 管理器。尝试更改 /etc/kong/kong.conf 中的这 2 个属性:
admin_gui_url = *
并将主机名添加到监听列表中。对我来说,我在另一台机器(Windows)上使用网络浏览器。
admin_listen = 127.0.0.1:8001 reuseport backlog=16384, 127.0.0.1:8444 http2 ssl reuseport backlog=16384,{host name}:8001 reuseport backlog=16384
设置
admin_gui_url
在Kong 3.x中不再起作用,它会导致以下错误消息:
Error: attempt to concatenate field 'authority' (a nil value)
相反,只需删除
admin_gui_url
属性就可以帮助我解决这个问题。
根据配置文件中的注释,只有提供此属性时才会添加 CORS 标头。