Docker下的Kong Gateway Manager:如何为控制台配置CORS

问题描述 投票:0回答:2

我正在 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并解决这个问题?

configuration cors kong
2个回答
1
投票

您可能已经检查过配置参考: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

0
投票

设置

admin_gui_url
在Kong 3.x中不再起作用,它会导致以下错误消息:

Error: attempt to concatenate field 'authority' (a nil value)

相反,只需删除

admin_gui_url
属性就可以帮助我解决这个问题。 根据配置文件中的注释,只有提供此属性时才会添加 CORS 标头。

© www.soinside.com 2019 - 2024. All rights reserved.