Ook interessant Op zoek naar AI-certificering? Bezoek ons zusje-platform Route-to-AI.com
⏱ 10 min. lezen SSO OpenShift LDAP OIDC inrichten

SSO in OpenShift: uitleg, inrichting en realisatie

Hoe werkt Single Sign-On binnen OpenShift, welke identity providers worden ondersteund, en hoe richt je LDAP of OIDC daadwerkelijk in — inclusief group sync, RBAC-koppeling en SSO doortrekken naar je eigen applicaties.

Single Sign-On (SSO) betekent dat gebruikers zich één keer authenticeren bij een centrale identity provider, en daarna zonder opnieuw in te loggen toegang krijgen tot meerdere systemen — de OpenShift-console, oc login, en eventueel de eigen applicaties die op het cluster draaien. Dit artikel legt uit hoe OpenShift dit inricht, en hoe je het realiseert.

De basis: OpenShift heeft al een ingebouwde OAuth-server

In tegenstelling tot vanilla Kubernetes (waar je zelf authenticatie moet optuigen) heeft OpenShift een ingebouwde OAuth-server. Deze regelt zelf geen wachtwoorden — hij delegeert authenticatie naar een of meer geconfigureerde identity providers, en geeft na een geslaagde login een OpenShift-token terug waarmee de gebruiker verder kan.

2026-07-17T06:14:40.146248 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/
De OAuth-server is de tussenlaag: hij authenticeert zelf niets, maar delegeert naar de geconfigureerde identity provider.

Welke identity providers ondersteunt OpenShift?

Identity providerMeest geschikt voor
HTPasswdAlleen test-/demo-omgevingen — statisch wachtwoordbestand, niet voor productie
LDAPEnterprise-omgevingen met een bestaande Active Directory/LDAP-directory
OpenID Connect (OIDC)Moderne identity providers: Keycloak/Red Hat SSO, Azure AD, Okta, Google
GitHub / GitLabDevelopment-teams die al GitHub/GitLab-organisaties gebruiken voor toegang
Request HeaderWanneer authenticatie al door een voorliggende proxy/gateway is afgehandeld
KeystoneOpenStack-omgevingen met een bestaande Keystone-identiteitsdienst

Praktisch: LDAP integreren

Dit is de meest gebruikte keuze in enterprise-omgevingen. De configuratie gebeurt via de clusterbrede OAuth custom resource:

ldap-oauth.yaml
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
    - name: bedrijfs-ldap
      mappingMethod: claim
      type: LDAP
      ldap:
        attributes:
          id: ["dn"]
          email: ["mail"]
          name: ["cn"]
          preferredUsername: ["uid"]
        bindDN: "cn=admin,dc=voorbeeld,dc=nl"
        bindPassword:
          name: ldap-bind-wachtwoord
        ca:
          name: ldap-ca-bundel
        insecure: false
        url: "ldaps://ldap.voorbeeld.nl/ou=gebruikers,dc=voorbeeld,dc=nl?uid"
Het bind-wachtwoord als Secret aanmaken
oc create secret generic ldap-bind-wachtwoord \n  --from-literal=bindPassword='HetWachtwoord' \n  -n openshift-config
Praktijktip: Gebruik altijd ldaps:// (versleuteld) in productie, nooit kaal ldap:// — en zorg dat het CA-certificaat van je LDAP-server als ConfigMap beschikbaar is (via ca: name: ldap-ca-bundel), anders weigert OpenShift de verbinding met een certificaatfout.

Praktisch: OIDC integreren (Keycloak, Azure AD, Okta)

Voor moderne identity providers via het OpenID Connect-protocol:

oidc-oauth.yaml
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
    - name: bedrijfs-oidc
      mappingMethod: claim
      type: OpenID
      openID:
        clientID: "openshift-console"
        clientSecret:
          name: oidc-client-secret
        issuer: "https://sso.voorbeeld.nl/realms/productie"
        claims:
          preferredUsername: ["preferred_username"]
          name: ["name"]
          email: ["email"]
Het client secret aanmaken
oc create secret generic oidc-client-secret \n  --from-literal=clientSecret='HetClientSecret' \n  -n openshift-config

De issuer-URL moet exact overeenkomen met wat de identity provider zelf publiceert onder /.well-known/openid-configuration — een veelgemaakte fout is een afwijkend pad of een ontbrekende trailing slash.

Groepen synchroniseren voor RBAC

Alleen inloggen is niet genoeg — voor zinvolle autorisatie wil je LDAP/OIDC-groepen automatisch vertalen naar OpenShift-groepen, zodat RBAC-rollen aan hele teams gekoppeld kunnen worden in plaats van individuele gebruikers.

LDAP group sync configuratie (groep-sync.yaml)
kind: LDAPSyncConfig
apiVersion: v1
url: ldaps://ldap.voorbeeld.nl
bindDN: "cn=admin,dc=voorbeeld,dc=nl"
bindPassword: "HetWachtwoord"
insecure: false
ca: /pad/naar/ca.crt
groupUIDNameMapping:
  "cn=platformteam,ou=groepen,dc=voorbeeld,dc=nl": platformteam
rfc2307:
  groupsQuery:
    baseDN: "ou=groepen,dc=voorbeeld,dc=nl"
    scope: sub
    filter: "(objectClass=groupOfNames)"
  groupUIDAttribute: dn
  groupNameAttributes: [ cn ]
  groupMembershipAttributes: [ member ]
  usersQuery:
    baseDN: "ou=gebruikers,dc=voorbeeld,dc=nl"
    scope: sub
  userUIDAttribute: dn
  userNameAttributes: [ uid ]
Synchronisatie uitvoeren
oc adm groups sync --sync-config=groep-sync.yaml --confirm
Praktijktip: Draai group sync eerst zónder --confirm — dat toont een dry-run van wat er zou gebeuren, zodat je een mapping-fout ontdekt vóórdat groepslidmaatschap daadwerkelijk wordt aangepast.

RBAC koppelen aan de gesynchroniseerde groepen

RoleBinding op basis van een gesynchroniseerde groep
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: platformteam-admin
  namespace: productie-app
subjects:
  - kind: Group
    name: platformteam
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: admin
  apiGroup: rbac.authorization.k8s.io

SSO uitbreiden naar je eigen applicaties: het oauth-proxy-patroon

Tot nu toe ging het over inloggen bij OpenShift zelf (console, oc-CLI). Wil je dat een eigen applicatie die op het cluster draait ook meelift op dezelfde SSO, zonder zelf authenticatielogica te bouwen? Zet een oauth-proxy-sidecar vóór de applicatie:

2026-07-17T06:14:40.186470 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/
De sidecar onderschept inkomend verkeer, valideert via de OpenShift OAuth-server, en laat pas geauthenticeerd verkeer door naar de applicatie.
Fragment van een Deployment met oauth-proxy-sidecar
spec:
  containers:
    - name: oauth-proxy
      image: quay.io/openshift/origin-oauth-proxy:latest
      args:
        - --https-address=:8443
        - --provider=openshift
        - --upstream=http://localhost:8080
        - --cookie-secret=SECRET
        - --openshift-service-account=mijn-app
      ports:
        - containerPort: 8443
    - name: mijn-app
      image: voorbeeld/mijn-app:latest
      ports:
        - containerPort: 8080

De applicatiecontainer zelf hoeft niets van authenticatie te weten — hij ontvangt alleen al gevalideerd verkeer via localhost:8080. Dit is hetzelfde principe als de Secretless Broker bij secrets management: verantwoordelijkheid weghouden bij de applicatiecode zelf.

Testen en verifiëren

Inloggen testen vanaf de CLI
oc login https://api.cluster.voorbeeld.nl:6443

Kies bij een geslaagde configuratie nu de nieuwe identity provider in het inlogscherm. Controleer daarna of groepslidmaatschap correct is doorgekomen:

Groepslidmaatschap controleren
oc get groupsnoc describe group platformteam

Veelgemaakte valkuilen

  • Ontbrekend of verkeerd CA-certificaat — de meest voorkomende oorzaak van een mislukte LDAP/OIDC-verbinding, vooral bij zelfondertekende certificaten.
  • mappingMethod verkeerd gekozenclaim is meestal correct (gebruikt de identiteit uit de provider als naam); add kan ongewenst meerdere identity providers aan hetzelfde account koppelen als namen toevallig overeenkomen.
  • Group sync niet herhaald — group sync is geen doorlopend proces, maar een commando dat je periodiek (bijvoorbeeld via een CronJob) opnieuw moet uitvoeren om wijzigingen in de directory door te laten komen.
  • Testen met een account dat toevallig al cluster-admin is — verifieer SSO altijd ook met een account dat bewust beperkte rechten hoort te hebben, om autorisatiefouten niet te missen.

Verder lezen