标签: kong

用Kong认证

我正在寻找Kong来取代我目前手工推出的NodeJS API网关.目前,我有一个用户服务,通过在登录时提供JWT来处理身份验证(用Django编写),然后客户端通过标头传入.我现在的API网关然后拦截任何电话,也确实验证调用返回给用户的服务,并与替换JWT报头X-User-IdX-User-Email.

据我所知,孔可以大致做同样的事情.我试图弄清楚这应该如何在一个完美的世界中发挥作用.我仍然有机会更换大部分基础设施,因此重写一些服务并非完全不可能.

所以,在我看来,会发生以下情况:

  1. 用户在我的网站上注册.然后我在Kong上用他们的用户名/ id创建一个新的消费者
  2. 用户登录.这是我卡住的地方.我是否登录(或者在这种情况下,只是将用户认证为所述用户),向Kong询问此消费者的JWT,然后返回?如果我想在JWT的有效载荷中获得更多数据怎么办?当JWT到期时,Kong会发生什么?
  3. 当用户请求服务时,Kong将从标题中嗅出JWT,替换为X-Consumer-*- 这是正确的吗?

如果我的想法错了,或者有更好的方法来实现这一点,请纠正我.我对整个微服务的事情都很陌生.

authentication django restful-authentication microservices kong

6
推荐指数
1
解决办法
1435
查看次数

NgInx作为Kong的反向代理

我想使用Kong作为我的API网关,在Docker容器中运行.每个请求必须首先通过NgInx服务器,如果请求的uri与example.com/api匹配,则必须生成在Kong内注册的api.

为此,我使用以下命令将我的API添加到Kong:

curl -i -X POST --url ipnumber:8001/apis -d 'name=my-api' -d `enter code here`'upstream_url=http://httpbin.org' -d 'hosts=example.com' -d 'uris=/api/my-api'
Run Code Online (Sandbox Code Playgroud)

通过执行以下命令,我得到了正确的答案,所以我认为Kong正常工作.

curl -i -X GET --url ipnumber:8000/api/my-api --header 'Host: example.com'
Run Code Online (Sandbox Code Playgroud)

我的NgInx配置如下所示:

upstream kong {
  server 127.0.0.1:8000;
}

location /api {
   proxy_pass: http://kong;
}
Run Code Online (Sandbox Code Playgroud)

在我的主机文件中,我使用域example.com配置了NgInx服务器的IP.

问题是:当我浏览example.com/api/my-api甚至是example.com/my-api时,结果是NgInx的404错误页面.

当我浏览到ipnumber:8000/api/my-api时,它会显示一条消息,表示没有与给定值匹配的api,这是正确的,因为主机名不是example.com

我已经很久没看到这个问题,但是我还没能解决它.我也期待https://getkong.org/docs/0.10.x/configuration/#custom-nginx-configuration-embedding-kong但我不确定我是否必须这样做,因为我已经我自己的nginx配置.

提前感谢您的反馈.

nginx kong

6
推荐指数
1
解决办法
3346
查看次数

如何在kong中为API配置ssl

我正在开发 kong 0.13.1。按照文档,我添加了证书,如下所示:

{
    "data": [
        {
            "cert": "certificate is really here", 
            "created_at": 1529667116000, 
            "id": "6ae77f49-a13f-45b1-a370-8d53b35d7bfd", 
            "key": "The key is really here", 
            "snis": [
                "myapp.local", 
                "mockbin.myapp.local"
            ]
        }
    ], 
    "total": 1
}
Run Code Online (Sandbox Code Playgroud)

然后添加了一个与 http 完美配合的 API:

{
    "data": [
        {
            "created_at": 1529590900803, 
            "hosts": [
                "mockbin.myapp.local"
            ], 
            "http_if_terminated": false, 
            "https_only": false, 
            "id": "216c23c5-a1ae-4bef-870b-9c278113f8f8", 
            "name": "mockbin", 
            "preserve_host": false, 
            "retries": 5, 
            "strip_uri": true, 
            "upstream_connect_timeout": 60000, 
            "upstream_read_timeout": 60000, 
            "upstream_send_timeout": 60000, 
            "upstream_url": "http://localhost:3000"
        }
    ], 
    "total": 1
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,Kong 不断向我发送位于 /usr/local/kong/ssl/kong-default.crt

我正在测试它:

openssl s_client -connect …
Run Code Online (Sandbox Code Playgroud)

ssl kong

6
推荐指数
1
解决办法
7858
查看次数

Cert-Manager 证书更新流程 - 如何执行?

我正在使用cert-manager-v0.10.0从其掌舵图安装

我正在使用像入口控制器一样的kong来管理入口操作。

所以我创建了一个ClusterIssuer资源,以便可以通过 kong-ingress 控制器从 Ingress 资源联系它。

ClusterIssuer是:

   apiVersion: certmanager.k8s.io/v1alpha1
   kind: ClusterIssuer
   metadata:
     name: letsencrypt-prod
   spec:
     acme:
       # The ACME server URL
       server: https://acme-v02.api.letsencrypt.org/directory
       # Email address used for ACME registration
       email: username@mydomain.org
       # Name of a secret used to store the ACME account private key
       privateKeySecretRef:
         name: letsencrypt-prod
       # Enable the HTTP-01 challenge provider
       solvers:
       - http01:
           ingress:
             class: kong
Run Code Online (Sandbox Code Playgroud)

我正在使用的入口资源是这个。

你可以在这里看到,根据kubernetes.io/ingress.class: "kong"那里包含的注释,我将它指向之前创建的 ClusterIssuer,并且我将它指向 kong 作为入口控制器:

apiVersion: …
Run Code Online (Sandbox Code Playgroud)

ssl kong kubernetes-ingress cert-manager

6
推荐指数
1
解决办法
5482
查看次数

Kong 是否支持 API 聚合

我们只是在研究几个 API 网关,特别是Kong。查看他们的文档,他们似乎支持请求/响应转换。

但是,如果我理解正确,这似乎仅限于标题。

Kong 是否像Netflix一样支持 API 聚合?

microservices kong

5
推荐指数
1
解决办法
4496
查看次数

api网关后面的keycloak是一个好习惯吗?

有什么好的论据支持在Api网关(Kong)后面使用或不使用Keycloak?

keycloak kong

5
推荐指数
2
解决办法
3559
查看次数

在 Lua 项目中管理开发依赖关系的推荐方法是什么?

我正在构建一个 Lua 库(实际上是一个内部 kong 插件),这是我第一次使用 Lua - 更不用说用它编写生产代码了。

我已经把它变成了luarock。据我所知,它rockspec允许我指定其他库作为依赖项。但似乎不存在开发依赖性的概念。例如,我的测试、模拟等所需的库......我宁愿不让它们成为实际依赖项列表的一部分。

我已经将我的开发依赖项保留在依赖项列表中,但在 git 推送之前将它们注释掉。在生产 Lua 项目中通常如何解决这个问题?管理这些依赖关系的推荐方法是什么?

lua kong

5
推荐指数
1
解决办法
1075
查看次数

Kong v1.0.2的自定义插件已启用但未安装

我有一个用于 Kong 的自定义插件,它在 Kong v0.14.1 上运行良好,但是在我升级到 v.1.0.2 后,它抛出了一个错误。

使用的操作系统:macOS Mojave

kong.conf文件中,我有以下代码:

log_level = debug
plugins=my-custom-plugin
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令启动 Kong:

kong start -c kong.conf
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

错误:/usr/local/share/lua/5.1/kong/cmd/start.lua:50: nginx: [error] init_by_lua
错误:/usr/local/share/lua/5.1/kong/init.lua: 344 : my-custom-plugin 插件已启用但未安装;
未找到模块“kong.plugins.my-custom-plugin.handler”:未找到 kong.plugins.my-custom-plugin.handler 的 LuaRocks 模块,
没有字段 package.preload['kong.plugins.my-custom-plugin. handler']
没有文件 './kong/plugins/kong-my-custom-plugin/handler.lua'...

我使用以下命令安装了插件:

luarocks make
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

my-custom-plugin 1.0-1 is now installed in /usr/local/opt/kong (license: MIT)
Run Code Online (Sandbox Code Playgroud)

不知何故,Kong 似乎无法找到我安装的自定义插件。知道为什么会这样吗?

lua luarocks kong

5
推荐指数
2
解决办法
4814
查看次数

如何增加 nginx 入口控制器和 kong 上的最大请求正文大小

我有一个服务,它接受正文中带有 base64 编码文件的 POST。Error: 413 Request Entity Too Large当我发布大于 1MB 的任何内容时,我目前正在获取 ,否则它工作正常。

我的设置有 kong 代理服务。我通过稳定的 kong helm chart 为代理的入口添加了以下注释:

      kubernetes.io/ingress.class: "nginx"
      ingress.kubernetes.io/ssl-redirect: “true”
      ingress.kubernetes.io/proxy-body-size: 50m
Run Code Online (Sandbox Code Playgroud)

我还将其添加到 kong env 值中:

client_max_body_size: 0

我的理解是这应该更新 nginx.conf

Kong 前面有一个 nginx-ingress,我用稳定的舵图安装了它。对于入口控制器,我设置了:

--set controller.config.proxy-body-size: "50m"
Run Code Online (Sandbox Code Playgroud)

但是,这些设置都不起作用。查看入口控制器的 pod 日志,我看到:

2019/08/02 15:01:34 [warn] 42#42: *810139 a client request body is buffered to a temporary file /tmp/client-body/0000000014, client: 1X.XXX.X0.X, server: example.com, request: "POST /endpoint HTTP/1.1", host: "example.com"
Run Code Online (Sandbox Code Playgroud)

以及kong pod中对应的日志:

2019/08/02 15:01:39 [warn] 33#0: *1147388 a client request …
Run Code Online (Sandbox Code Playgroud)

rest kubernetes kong kubernetes-ingress nginx-ingress

5
推荐指数
1
解决办法
1万
查看次数

如何从keycloak授权服务器获得权限响应决定

我使用kong作为我的api网关并使用插件kong-oidc使用keycloak进行身份验证。身份验证过程顺利且运行良好。现在我想为不同微服务向 kong 发出的请求添加授权。我打算修改kong-oidc插件。我创建了一个confidential client,role-based policies以及resource based permissions一些在 keycloak 中分配了不同角色的用户。如果用户有权访问特定资源,我想授权他。我可以通过以下请求来做到这一点

http://keycloak-url/auth/realms/$realm/protocol/openid-connect/token \
  -H "Authorization: Bearer "$access_token \
  --data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" \
  --data "audience=auth-client" \              
  --data "permission=af-resource" \     
  --data "response_mode=decision"
Run Code Online (Sandbox Code Playgroud)

我很关心permission=af-resource. 在请求期间,我不知道资源的名称,但知道请求的 url。我必须请求再次keycloak给我resource-idrequested-url,然后发送上述请求的决定或者有另一种方式?或者我可以以某种方式使用来自token-introspection端点的信息。

authorization rbac openid-connect keycloak kong

5
推荐指数
0
解决办法
381
查看次数