kubernetes - 如何使用 keycloak-gatekeeper 保护 Kibana 仪表板?
问题描述
电流:
传入请求 (/sso-kibana) --> Envoy 代理 --> /sso-kibana
预期流量:
传入请求 (/sso-kibana) --> Envoy 代理 --> keycloak-gatekeeper --> keycloak
--> 如果未登录 --> keycloak 登录页面 --> /sso-kibana
--> 如果已经登录 --> /sso-kibana
我将 keycloak-gatekeeper 部署为具有以下配置的 k8s 集群:
keycloak-gatekeeper.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: keycloak-gatekeeper
name: keycloak-gatekeeper
spec:
selector:
matchLabels:
app: keycloak-gatekeeper
replicas: 1
template:
metadata:
labels:
app: keycloak-gatekeeper
spec:
containers:
- image: keycloak/keycloak-gatekeeper
imagePullPolicy: Always
name: keycloak-gatekeeper
ports:
- containerPort: 3000
args:
- "--config=/keycloak-proxy-poc/keycloak-gatekeeper/gatekeeper.yaml"
- "--enable-logging=true"
- "--enable-json-logging=true"
- "--verbose=true"
volumeMounts:
-
mountPath: /keycloak-proxy-poc/keycloak-gatekeeper
name: secrets
volumes:
- name: secrets
secret:
secretName: gatekeeper
看门人.yaml
discovery-url: https://keycloak/auth/realms/MyRealm
enable-default-deny: true
listen: 0.0.0.0:3000
upstream-url: https://kibana.k8s.cluster:5601
client-id: kibana
client-secret: d62e46c3-2a65-4069-b2fc-0ae5884a4952
特使.yaml
- name: kibana
hosts: [{ socket_address: { address: keycloak-gatekeeper, port_value: 3000}}]
问题:
我可以在 /Kibana 上调用 keycloak 登录,但登录后用户不会去 /Kibana url,即 Kibana 仪表板没有加载。
注意: Kibana 也作为 k8s 集群运行。
https://medium.com/stakater/proxy-injector-enabling-sso-with-keycloak-on-kubernetes-a1012c3d9f8d
更新 1:
我可以在 /sso-kibana 上调用 keycloak 登录,但在输入凭据后它会给出 404。流程如下:
Step 1.点击http://something/sso-kibana
Step 2. Keycloak 登录页面打开https://keycloak/auth/realms/THXiRealm/protocol/openid-connect/auth ?...
Step 3.进入后凭据重定向到此 URL https://something/sso-kibana/oauth/callback?state=890cd02c-f ...
步骤 4. 404
更新 2:
在 Envoy.yaml 中添加新路由后,404 错误得到解决
特使.yaml
- match: { prefix: /sso-kibana/oauth/callback }
route: { prefix_rewrite: "/", cluster: kibana.k8s.cluster }
因此,预期流程(如下所示)现在工作正常。
传入请求 (/sso-kibana) --> Envoy 代理 --> keycloak-gatekeeper --> keycloak
--> 如果未登录 --> keycloak 登录页面 --> /sso-kibana
--> 如果已经登录 --> /sso-kibana
解决方案
在您的配置中,您明确启用enable-default-deny
了文档中解释为:
对所有请求启用默认拒绝,您必须明确说明允许的内容(推荐)
启用该功能后,您将需要通过resources
[1] 中所示的条目或命令行参数 [2] 指定 url、方法等。对于 Kibana,您可以从以下内容开始:
resources:
- uri: /app/*
[1] https://www.keycloak.org/docs/latest/securing_apps/index.html#example-usage-and-configuration
[2] https://www.keycloak.org/docs/latest/securing_apps/index.html#http-routing
推荐阅读
- javascript - 在 z-index 上使用 setInterval 一张一张地显示图像
- asp.net-core - 使用授权重写 URL
- git - Git推送提交而不更新远程分支参考
- c# - Windows 服务 (.NET) 无法加载文件或程序集
- ios - 带有分组分隔符的字符串中的 Numberformatter 数字
- html - Selenium 找不到元素
- python - 如何将带有 if 语句的嵌套 for 循环转换为列表理解?
- linux - 如何制作用于日志收集的负载均衡器?
- amazon-web-services - AWS EC2 ssh 连接超时
- npm - 未找到模块:无法解决 Swiper React JS scss