首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes OIDC:没有有效的组映射

Kubernetes OIDC:没有有效的组映射
EN

Stack Overflow用户
提问于 2020-11-04 09:16:39
回答 2查看 790关注 0票数 1

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

基本设置

  • K8s版本: 1.19.0
  • K8s设置:1个主节点+2个工作节点
  • 基于Debian 10虚拟机
  • CNI: Calico
  • Louketo代理作为OIDC代理
  • OIDC: Keycloak服务器(Keycloak X Quarkus)

Configurations

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

kube-apiserver.yaml

代码语言:javascript
复制
- --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:"

ClusterRoleBinding

代码语言:javascript
复制
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代理

代码语言:javascript
复制
/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错误

代码语言:javascript
复制
replicasets.apps is forbidden: User "\"oidc:\"<user_name>" cannot list resource "replicasets" in API group "apps" in the namespace "default"

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

PS:我已经在Keycloak服务器中完成了相应的组映射,并验证了组条目是否已被传输。

EN

回答 2

Stack Overflow用户

发布于 2020-11-28 23:44:37

如果您正面临与我相同的挑战,并且希望将密钥披风集成到您的K8s集群中,共享仪表板并将其连接到密钥披风,您可以在下面找到我的配置。在我的集群中,我使用Louketo代理作为Kubernetes和Keycloak之间的接口。此post中不包括相应的部署配置。

密钥披风

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

在此之后,我创建了两个组成员和受众(由扬声器代理所需)映射器。

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

组成员映射

受众映射

Kubernetes

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

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

代码语言:javascript
复制
- --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:"

RoleBinding

代码语言:javascript
复制
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

ClusterRoleBinding

代码语言:javascript
复制
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希望我能帮助您进行这种配置。如果你有什么问题,可以问我。

票数 1
EN

Stack Overflow用户

发布于 2020-11-09 11:09:53

这是一个社区wiki的答案,目的是从Kubernetes的角度来处理这个问题。任何熟悉密钥披风组/角色映射解决方案的人都可以随意编辑它。

您看到的错误意味着OIDC的服务帐户没有在默认名称空间中列出replicasets的适当权限。最简单的方法是从零开始设置ServiceAccountClusterRoleClusterRoleBinding,并确保它具有适当的权限。例如,您可以创建具有权限“admin”通过执行通过执行

代码语言:javascript
复制
kubectl create clusterrolebinding OIDCrolebinding - -clusterrole=admin - - group=system:serviceaccounts:OIDC

相同的可以做用于ClusterRole

代码语言:javascript
复制
kubectl create clusterrole OIDC --verb=get,list,watch --resource=replicasets --namespace=default

在这个场景中如何使用kubectl create的更多示例可以找到这里

这里你可以找到一个关于RBAC授权的完整的官方指南。

编辑:

此外,还请检查"\"oidc:\"<user_name>""\"oidc:\"<user_name>"是否位于"default"命名空间中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64677173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档