First Realm
Create Your First Realm
This guide walks you through creating a complete Keycloak realm with a client and user.
Prerequisites
Step 1: Create a Realm
apiVersion: realm.keycloak.crossplane.io/v1alpha1
kind: Realm
metadata:
name: my-app-realm
spec:
forProvider:
realm: "my-app"
enabled: true
displayName: "My Application"
providerConfigRef:
name: keycloak-provider-configApply and verify:
kubectl apply -f realm.yaml
kubectl get realm my-app-realmWait for the realm to become READY:
kubectl wait realm my-app-realm --for=condition=Ready --timeout=60sStep 2: Create a Client
apiVersion: openidclient.keycloak.crossplane.io/v1alpha1
kind: Client
metadata:
name: my-web-app
spec:
forProvider:
clientId: my-web-app
realmId: my-app
accessType: public
standardFlowEnabled: true
validRedirectUris:
- "http://localhost:3000/callback"
providerConfigRef:
name: keycloak-provider-configStep 3: Create a User
apiVersion: user.keycloak.crossplane.io/v1alpha1
kind: User
metadata:
name: demo-user
spec:
forProvider:
realmId: "my-app"
username: "demo"
email: "demo@example.com"
firstName: "Demo"
lastName: "User"
enabled: true
providerConfigRef:
name: keycloak-provider-configStep 4: Verify
# Check all resources are ready
kubectl get realm,client,user -l crossplane.io/provider=provider-keycloakAll resources should show READY: True and SYNCED: True.
How Reconciliation Works
The provider continuously reconciles your desired state (the YAML manifests) with the actual state in Keycloak:
- Create: When you apply a manifest, the provider creates the resource in Keycloak
- Update: If you modify the manifest, the provider updates Keycloak accordingly
- Drift Detection: If someone changes Keycloak directly (e.g., via the admin console), the provider detects the drift and corrects it
- Delete: When you delete the Kubernetes resource, the provider removes it from Keycloak (unless
deletionPolicy: Orphanis set)