我在管理孔的形象
kongkonggatewaydocker.bintray.io/kong企业版:2.3.2.0-alpine
在Docker上。
我用这些命令初始化了整个环境:
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
然后,我设法从Manager界面添加了服务、路由和插件,该界面可在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并解决此问题?