auth.oidc.clusterAccess: token, in-cluster Radar stops impersonating people. Every live Kubernetes call carries the person’s own ID token, issued by your IdP to the hub’s OIDC client. The API server authenticates that token and applies the RBAC you already have on the person’s username and groups.
Use it when your clusters already trust your IdP for kubectl and you want Radar to grant exactly what kubectl grants. Otherwise, Hub roles or IdP groups are simpler: they need no API server change.
Requirements
- Radar Hub 1.12.0 or newer, and Radar 1.18.0 or newer on every cluster.
- OIDC sign-in, with
useRefreshToken: true. Okta and Entra also needoffline_accessinscopes, or sessions end with the first ID token. hub.publicURLonhttpswith a certificate the clusters can verify: notweb.tls.selfSigned, and notlocalCluster. Radar only accepts tokens over a verified tunnel.- Every API server must accept ID tokens from your issuer with the hub’s client ID as the audience. The simplest way: sign the hub in with the same OIDC client
kubectlalready uses.
1. Set up the IdP app
- Microsoft Entra ID
- Other IdPs
- Azure Portal → Microsoft Entra ID → App registrations. Use the app your clusters already trust, or create one.
- Authentication → add a Web platform with the redirect URI
https://<hub host>/api/auth/oidc/callback. - Certificates & secrets → issue a client secret.
- Token configuration:
-
Add groups claim → pick the group types, and tick ID and Access. Groups arrive as object IDs. Pick Groups assigned to the application if users belong to many groups: past 200 groups, Entra leaves the claim out of the token.
To get group names instead of IDs (cloud-only groups), pick Groups assigned to the application, assign the groups under Enterprise applications → Users and groups, and set the groups claim to emit
cloud_displayname(Graph or the app manifest; the portal doesn’t offer it). -
Add optional claim → ID →
email. The username is built from this claim, and users without a mail address can’t sign in to clusters.
-
Add groups claim → pick the group types, and tick ID and Access. Groups arrive as object IDs. Pick Groups assigned to the application if users belong to many groups: past 200 groups, Entra leaves the claim out of the token.
To get group names instead of IDs (cloud-only groups), pick Groups assigned to the application, assign the groups under Enterprise applications → Users and groups, and set the groups claim to emit
- API permissions:
openid,profile,emailandoffline_access(Microsoft Graph, delegated).
groups scope: Entra rejects it with AADSTS70011 and sign-in fails.2. Configure the API servers
Point each API server at the same issuer and client ID. The username must come from theemail claim: the hub sends Radar <username prefix><email>, so Radar’s checks on cached reads match the API server only when both name people the same way.
3. Configure the hub
Add these values to ahelm upgrade --reset-then-reuse-values of the hub, on top of the OIDC values from Settings → Organization → SSO:
Neither prefix may be
- or start with radar:, cloud: or system:.
Settings → Organization → SSO then shows Cluster access: User tokens, read-only.
4. Bind people in Kubernetes
Radar adds no role bindings in this mode. Bind the names the API server sees, as you would forkubectl:
5. Check a person’s identity
Sign in with the hub’s client, then ask the API server who you are:kubectl oidc-login is kubelogin. It listens on http://localhost:8000, so add that redirect URI to the app or pass a port your app already allows. On Entra, add it under the Web platform: kubelogin sends the client secret, which Entra refuses on a public-client redirect.
email or groups is missing, wait and sign in again.
The username must be <k8sUsernamePrefix><email> and the groups <k8sGroupsPrefix><group>. If whoami returns Unauthorized, the API server doesn’t trust the token: check the issuer and client ID. If the names differ, fix the prefixes on the hub or the API server so they match.
6. Connect clusters
-
New clusters: the connect page installs Radar 1.18.0 or newer with
auth.kubernetesCredentials=user-tokenandcloud.defaultRbac.create=false. -
Existing clusters: the hub refuses to open a cluster whose Radar still impersonates, until it’s switched. Settings → Organization → SSO → Switch clusters you already connected has the command for each cluster:
rbac.podExec and rbac.portForward are ignored: shells and port-forwards run on the person’s own token.
AI agents and MCP clients
Personal access tokens can’t make live cluster calls in this mode. MCP clients that sign in with your IdP need the hub to exchange their access token for one the API servers trust: setauth.oidc.mcpOAuth.tokenExchange. See MCP clients.