keycloak - Kong OIDC:发现 url 超时
问题描述
我正在为我的应用程序构建 kong + kong-oidc + keycloak 堆栈。所有这些都部署到 minikube 集群中。
我想要实现的是使用 Google Identity Provider 执行 Open ID Connect。
我指的是这篇博文来设置https://www.jerney.io/secure-apis-kong-keycloak-1/。
唯一的区别是我没有使用 docker-compose,而是使用 minikube 来构建堆栈,并且 keycloak 版本是image: jboss/keycloak:10.0.1
.
以下是我已采取的步骤:
- 设置 Keycloak 暴露为 NodePort
- 创建 keycloak 领域 + 客户端
- 设置金刚
- 安装 kong-oidc
- 定义入口网关
- 使用第 2 步中的 OIDC 配置 + keycloak 客户端的详细信息配置 Kong 入口
当我使用 IP 地址设置它时,一切正常。我管理浏览器我的应用程序,它被重定向到谷歌登录页面。
接下来,当我将我的IP地址与域名+ SSL加密绑定时。kong-oidc 无法访问我的 keycloak 发现 URL。
以下是我从浏览器中得到的错误。由于隐私,我已将所有域更改为example.com
I browsed https://example.com/data
它等待了大约 1 分钟,然后结果显示:
accessing discovery url (https://keycloak.example.com/auth/realms/example/.well-known/openid-configuration) failed: timeout
我有一个域说example.com
,和一个子域keycloak.example.com
。一旦我在 Kong 代理后面设置了 Keycloak,我就删除了 NodePort 设置。
以下是我的入口定义
:example.com
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gateway-api
annotations:
kubernetes.io/tls-acme: "true"
cert-manager.io/cluster-issuer: letsencrypt-prod
konghq.com/plugins: oidc
spec:
tls:
- secretName: gateway-api
hosts:
- example.com
rules:
- host: example.com
http:
paths:
- path: /data
pathType: Prefix
backend:
serviceName: data-service
servicePort: 8080
入口为keycloak.example.com
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gateway-keycloak
annotations:
konghq.com/plugins: transform-function
spec:
rules:
- host: keycloak.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: admin-keycloak
servicePort: 8080
transform-function
用于覆盖默认端口转发,以确保 Keycloak 管理控制台能够通过使用keycloak.example.com
访问https
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: transform-function
disabled: false
config:
functions:
- ngx.var.upstream_x_forwarded_port=443
plugin: post-function
我的 OIDC 插件定义:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: oidc
disabled: false
config:
client_id: <client_id>
client_secret: <client_secret>
ssl_verify: "true"
discovery: https://keycloak.example.com/auth/realms/example/.well-known/openid-configuration
introspection_endpoint: http://admin-keycloak:8080/auth/realms/example/protocol/openid-connect/token/introspect
plugin: oidc
另外,我已经设置了 keycloak 环境PROXY_ADDRESS_FORWARDING: "true"
证书也安装正确,我可以使用 https 浏览器 keycloak 管理控制台。
以下是来自kong pod的日志。
来自容器的日志proxy
2020/05/11 16:12:16 [error] 22#0: *87800 [lua] openidc.lua:483: openidc_discover(): accessing discovery url (https://keycloak.example.com/auth/realms/example/.well-known/openid-configuration) failed: timeout, client: 172.17.0.1, server: kong, request: "GET /data HTTP/2.0", host: "example.com"
172.17.0.1 - - [11/May/2020:16:12:16 +0000] "GET /data HTTP/2.0" 500 130 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
ingress-controller
没有来自容器的错误消息。
我已经没有关于如何解决此错误的想法。有人可以帮忙吗?
解决方案
推荐阅读
- powershell - 有人可以帮助我使用将用户添加到基于他们的 OU 的组的 powershell 脚本吗?
- javascript - 如何配置笑话快照位置
- python - 以最短的方式迭代整个数据集的代码
- graph - 多元图形数据集
- caching - Web.config 中的 DisableCache 在 GoDaddy 上不起作用
- c# - 带有网络凭据的 SSRS 报告的访问级别
- qt5 - 编译 QT 源导致 QMAKE 未知错误
- java - 先用深度遍历矩阵
- python - 如何将 c_uint 的 ctypes 数组转换为 numpy 数组
- javascript - QuerySelectorAll 识别所有但不向所有添加效果