kubernetes - Kubernetes OIDC:没有有效的组映射
问题描述
我有一个问题,我可以通过 OIDC 登录到我的仪表板,但是没有正确映射 oidc 组信息,我无法访问相应的资源。
基本设置
- K8s 版本:1.19.0
- K8s 设置:1 个主节点 + 2 个工作节点
- 基于 Debian 10 虚拟机
- CNI:印花布
- Louketo 代理作为 OIDC 代理
- OIDC:Keycloak 服务器(Keycloak X [Quarkus])
配置
我已经使用这些参数配置了 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服务器中做了对应的组映射,也验证了组条目被转移。
解决方案
如果您面临与我相同的挑战,并且希望将 Keycloak 集成到您的 K8s 集群中,共享仪表板并将其连接到 Keycloak,您可以在下面找到我的配置。在我的集群中,我使用 Louketo Proxy 作为 Kubernetes 和 Keycloak 之间的接口。部署的相应配置未包含在本文中。
钥匙斗篷
我想从Keycloak的配置开始。在第一步中,我创建了一个具有以下设置的相应客户端。
之后,我创建了两个组成员和受众(louketo 代理需要)映射器。
映射器的确切设置可以从这两个图像中获取。
组成员映射
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 我希望我可以帮助您进行此配置。如果您有任何问题,请随时问我。
推荐阅读
- angular - NgxPermissions hasPermission 检查在 Angular 6 中的 Observable 方法中
- java - 读取数据时套接字损坏或超时
- typescript - 由 Typescript 中的泛型函数生成器生成时无法分配的函数返回类型
- angular - Ionic 4 - Angular 6:如何控制 Ionic 路由器历史记录以停止缓存视图组件?
- python - Pandas read_csv low_memory 和 dtype 选项。TypeError:无法根据规则“安全”将数组从 dtype('O') 转换为 dtype('float64')
- c - 在 linux 内核中请求相对较大的大小时,无法从 `flex_array_alloc` 分配内存
- php - 如何根据 PHP 数据库中的结果在 jQuery 日期选择器上禁用一周中的某些天
- google-apps-script - Google Apps 脚本错误:服务在一天内使用了过多的计算机时间
- sql-server - 微软 SQL 服务器。varchar(非 nvarchar)数据类型列中的越南语符号
- spring - 使用 RedisQueueInboundGateway 进行多线程处理