Skip to main content
With 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 need offline_access in scopes, or sessions end with the first ID token.
  • hub.publicURL on https with a certificate the clusters can verify: not web.tls.selfSigned, and not localCluster. 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 kubectl already uses.

1. Set up the IdP app

  1. Azure Portal → Microsoft Entra ID → App registrations. Use the app your clusters already trust, or create one.
  2. Authentication → add a Web platform with the redirect URI https://<hub host>/api/auth/oidc/callback.
  3. Certificates & secrets → issue a client secret.
  4. 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.
  5. API permissions: openid, profile, email and offline_access (Microsoft Graph, delegated).
Never add a 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 the email 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.
On EKS, associate an OIDC identity provider with the same values:
Managed integrations that only accept tokens for their own app don’t work here. AKS with Microsoft Entra integration is one: its API server expects tokens for the AKS server app, not for the hub’s app.
Set a groups prefix. Without one, an IdP group named system:masters reaches the API server as that group. The hub logs a warning at startup when k8sGroupsPrefix is empty.

3. Configure the hub

Add these values to a helm 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 for kubectl:

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.
New Entra users and group memberships can take a few minutes to reach tokens. If 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-token and cloud.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:
In this mode the cluster’s ServiceAccount loses its impersonate permission, and 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: set auth.oidc.mcpOAuth.tokenExchange. See MCP clients.

Troubleshooting