Rancher 对接 KeyCloak OIDC

Rancher 支持对接 KeyCloak 进行用户身份认证,此处测试基于 OIDC 协议。

环境信息:

  1. Rancher: v2.9.5-ent
  2. KeyCloak: 26.4.5

OIDC 协议

OIDC 全称为 OpenID Connect,为标识身份验证协议,也是开放授权 OAuth2.0 的扩展,用于用户登录访问应用时进行身份验证和授权的过程。

OAuth2.0 本身是授权协议,只负责让应用拿到资源访问权限,不负责识别用户身份。

而 OIDC 在 OAuth2.0 之上加了一层身份认证,让应用可以知道用户身份并进行登录。

部署 KeyCloak

参考文档部署:https://www.keycloak.org/getting-started/getting-started-kube

部署后,创建一个自签名证书给 KeyCloak Ingress 挂载,可参考文档创建:https://docs.rancher.cn/docs/rancher2.5/installation/resources/advanced/self-signed-ssl/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
kubectl -n keycloak create secret tls keycloak-tls --cert=tls.crt --key=tls.key

cat <<EOF | kubectl -n keycloak apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: keycloak
namespace: keycloak
spec:
rules:
- host: keycloak.warnerchen.com
http:
paths:
- backend:
service:
name: keycloak
port:
number: 8080
path: /
pathType: Prefix
tls:
- hosts:
- keycloak.warnerchen.com
secretName: keycloak-tls
EOF

默认用户名密码为 admin,登陆后需要创建一个新的管理员帐户进行使用。

由于此处 KeyCloak 使用的是自签名证书,Rancher 需要配置信任私有 CA 证书:https://ranchermanager.docs.rancher.com/getting-started/installation-and-upgrade/installation-references/helm-chart-options#additional-trusted-cas

配置 KeyCloak

创建一个 Realm:

在新的 Realm 创建一个 admin 的 role:

创建一个 admin 用户对其进行授权:

前四个 role 权限是为了后续能够在 Rancher 检索到 KeyCloak 的用户和用户组:

创建一个 OIDC Client:

创建完成后,点击对应的 Client -> Client scopes -> https://<rancher_url>/v1-saml/keycloak/saml/metadata-dedicated

点击 Configure a new mapper,创建第一个 Mapper:

点击 Add Mapper -> By Configuration,创建第二个 Mapper:

点击 Add Mapper -> By Configuration,创建第三个 Mapper:

创建完成:

配置 Rancher 对接 KeyCloak

在 Rancher 选择 KeyCloak OIDC:

Client ID/Secret 根据 KeyCloak 创建的 Client 进行填写,Client Secret 可以在对应的 Client -> Credentials 获取:

下面 Endpoints 的部份,由于该版本 Rancher 拼接的 KeyCloak 地址与实际地址不一致,所以需要到 KeyCloak 获取正确的地址:

找到 issuerauthorization_endpoint 即可:

回到 Rancher 完成剩下的配置,点击开启:

随后会跳出一个弹窗,此时通过前面创建的 admin 用户进行登录:

完成认证后,开启成功:

在 KeyCloak 创建一个新用户:

通过 OIDC 登录 Rancher:

登录成功:

进行授权,验证是否可以搜索到该用户:

Author

Warner Chen

Posted on

2025-11-19

Updated on

2025-11-19

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.