1

我有一个问题,我可以通过 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服务器中做了对应的组映射,也验证了组条目被转移。

4

2 回答 2

1

如果您面临与我相同的挑战,并且希望将 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 我希望我可以帮助您进行此配置。如果您有任何问题,请随时问我。

于 2020-11-28T23:44:37.987 回答
0

这是一个社区 wiki 答案,旨在从 Kubernetes 方面解决问题。任何熟悉可能的 Keycloak 组/角色映射解决方案的人都可以随意编辑它。

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

kubectl create clusterrolebinding OIDCrolebinding - -clusterrole=admin - - group=system:serviceaccounts:OIDC

可以ClusterRole:

kubectl create clusterrole OIDC --verb=get,list,watch --resource=replicasets --namespace=default

kubectl create可以在此处找到有关如何在此场景中使用的更多示例。

在这里,您可以找到有关 RBAC 授权的完整官方指南。

编辑:

另外,还请检查您的ClusterRoleBindingfor the"\"oidc:\"<user_name>"是否在"default"命名空间中。

于 2020-11-09T11:09:53.770 回答