首页 > 解决方案 > Kubernetes OIDC:没有有效的组映射

问题描述

我有一个问题,我可以通过 OIDC 登录到我的仪表板,但是没有正确映射 oidc 组信息,我无法访问相应的资源。

基本设置

配置

我已经使用这些参数配置了 K8s apiserver。

kube-apiserver.yaml

- --oidc-issuer-url=https://test.test.com/auth/realms/Test
- --oidc-client-id=test
- --oidc-username-claim=preferred_username
- --oidc-username-prefix="oidc:"
- --oidc-groups-claim=groups
- --oidc-groups-prefix="oidc:"

集群角色绑定

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: "test-cluster-admin"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: "Test"

我使用了以下louketo参数

卢克托代理

/usr/bin/louketo-proxy --discovery-url=$OIDC_DISCOVERY_URL --client-id=$OIDC_CLIENT_ID --client-secret=$OIDC_CLIENT_SECRET  -listen=$OIDC_LISTEN_URL --encryption-key=$OIDC_ENCRYPTION_KEY --redirection-url=$OIDC_REDIRECTION_KEY --enable-refresh-tokens=true --upstream-url=$OIDC_UPSTREAM_URL --enable-metrics

我在仪表板中收到以下错误消息。 K8s 错误

replicasets.apps is forbidden: User "\"oidc:\"<user_name>" cannot list resource "replicasets" in API group "apps" in the namespace "default"

我希望你能帮助我解决这个问题,我已经尝试了互联网上的大部分手册,但还没有找到解决方案。

PS:我已经在Keycloak服务器中做了对应的组映射,也验证了组条目被转移。

标签: kuberneteskeycloakopenid-connectkube-apiserver

解决方案


如果您面临与我相同的挑战,并且希望将 Keycloak 集成到您的 K8s 集群中,共享仪表板并将其连接到 Keycloak,您可以在下面找到我的配置。在我的集群中,我使用 Louketo Proxy 作为 Kubernetes 和 Keycloak 之间的接口。部署的相应配置未包含在本文中。

钥匙斗篷

我想从Keycloak的配置开始。在第一步中,我创建了一个具有以下设置的相应客户端。 Keycloak 客户端配置

之后,我创建了两个组成员和受众(louketo 代理需要)映射器。 Keycloak Kubernetes 映射器

映射器的确切设置可以从这两个图像中获取。

组成员映射

组成员映射 受众映射

受众映射

Kubernetes

在第二步中,我必须更新 api 服务器清单并在 Kubernetes 集群中创建RoleBinding和。ClusterRoleBinding

Api 服务器清单 ( default path: /etc/kubernetes/manifests/kube-apiserver.yaml)

- --oidc-issuer-url=https://test.test.com/auth/realms/Test
- --oidc-client-id=test
- --oidc-username-claim=preferred_username
- --oidc-username-prefix="oidc:"
- --oidc-groups-claim=groups
- --oidc-groups-prefix="oidc:"

角色绑定

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: "test"
namespace: "kubernetes-dashboard"
subjects:
- kind: User
  name: "\"oidc:\"Test"
  namespace: "kube-system"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin

集群角色绑定

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: "test"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: "\"oidc:\"Test"

@Community 我希望我可以帮助您进行此配置。如果您有任何问题,请随时问我。


推荐阅读