From 4544e688978d9bb8ecc70c18a0dce1e59bc7d1f0 Mon Sep 17 00:00:00 2001 From: Roman Martin Gil Date: Fri, 21 Jun 2024 07:21:00 +0200 Subject: [PATCH] Add Keycloak operators quickstarts Signed-off-by: Roman Martin Gil --- operator/README.md | 14 ++ operator/kubernetes/README.md | 119 +++++++++++++++ operator/kubernetes/example-kc.yaml | 28 ++++ operator/kubernetes/example-realm-kc.yaml | 43 ++++++ operator/kubernetes/example-realm-users.png | Bin 0 -> 58714 bytes .../kubernetes/postgres-db-statefulset.yaml | 46 ++++++ operator/openshift/README.md | 135 ++++++++++++++++++ operator/openshift/example-kc.yaml | 25 ++++ operator/openshift/example-realm-kc.yaml | 43 ++++++ operator/openshift/example-realm-users.png | Bin 0 -> 58714 bytes .../keycloak-operator-subscription.yaml | 20 +++ .../openshift/postgres-db-statefulset.yaml | 46 ++++++ 12 files changed, 519 insertions(+) create mode 100644 operator/README.md create mode 100644 operator/kubernetes/README.md create mode 100644 operator/kubernetes/example-kc.yaml create mode 100644 operator/kubernetes/example-realm-kc.yaml create mode 100644 operator/kubernetes/example-realm-users.png create mode 100644 operator/kubernetes/postgres-db-statefulset.yaml create mode 100644 operator/openshift/README.md create mode 100644 operator/openshift/example-kc.yaml create mode 100644 operator/openshift/example-realm-kc.yaml create mode 100644 operator/openshift/example-realm-users.png create mode 100644 operator/openshift/keycloak-operator-subscription.yaml create mode 100644 operator/openshift/postgres-db-statefulset.yaml diff --git a/operator/README.md b/operator/README.md new file mode 100644 index 000000000..c6991c276 --- /dev/null +++ b/operator/README.md @@ -0,0 +1,14 @@ +Examples of Keycloak Operator +=================================================== + +This directory contains some examples to use the Keycloak Operator on Kubernetes and OpenShift. + +They are organized in this repository under different categories (or directories) as follows: + +| Platform | Description | +|------------|----------------------------------------------------------------------------------------------| +| kubernetes | Examples about how to operate Keycloak with the Keycloak Operator on Kubernetes environment. | +| openshift | Examples about how to operate Keycloak with the Keycloak Operator on OpenShift environments. | + +For more details about how to use them, please take a look at the [Keycloak Operator Installation](https://www.keycloak.org/operator/installation) guide, +and other Operator guides. diff --git a/operator/kubernetes/README.md b/operator/kubernetes/README.md new file mode 100644 index 000000000..c26d2c49e --- /dev/null +++ b/operator/kubernetes/README.md @@ -0,0 +1,119 @@ +kubernetes: Keycloak Operator on Kubernetes +=================================================== + +Level: Beginner +Technologies: Keycloak Operator +Summary: Operate Keycloak with Keycloak Operator on Kubernetes +Target Product: Keycloak + +What is it? +----------- + +This quickstart demonstrates how to deploy the Keycloak Operator, and operate a Keycloak instance on Kubernetes environments. + +It tries to focus on the main features provided by the Keycloak Operator, such as: deploy Keycloak instances, +and import a realm with some configuration. + +System Requirements +------------------- + +This quickstart requires to have [Minikube](https://minikube.sigs.k8s.io/docs/start/) installed, ideally with the Ingres addon enabled. + +Starting Minikube +------------------- + +To start minikube: + +```shell +minikube start +``` + +To check if you have the Ingress addon enabled, enter the following command: + +```shell +minikube addons list +``` + +If the Ingress addon is not enabled, enter the following command to enable it: + +```shell +minikube addons enable ingress +``` + +Deploying Keycloak Operator +------------------- + +You can install the Operator on Kubernetes by using `kubectl` commands: + +```shell +kubectl apply -f https://raw.githubusercontent.com/keycloak/keycloak-k8s-resources/22.0.3/kubernetes/keycloaks.k8s.keycloak.org-v1.yml +kubectl apply -f https://raw.githubusercontent.com/keycloak/keycloak-k8s-resources/22.0.3/kubernetes/keycloakrealmimports.k8s.keycloak.org-v1.yml +kubectl apply -f https://raw.githubusercontent.com/keycloak/keycloak-k8s-resources/22.0.3/kubernetes/kubernetes.yml +``` + +Deploying PostgreSQL Database +------------------- + +The Keycloak Operator does not deploy any database, so it is needed to have one before operate any Keycloak instance. + +To deploy a sample PostgreSQL Database execute the command: + +```shell +kubectl apply -f postgres-db-statefulset.yaml +``` + +The following command creates a secret with the database credentials. This secret will be used later by the Keycloak instance +to establish the connection to the database instance. + +```shell +kubectl create secret generic keycloak-db-secret --from-literal=username=admin --from-literal=password=password +``` + +Deploying Keycloak +------------------- + +The Keycloak instance is described using the `Keycloak` CRD. The [example-kc.yaml](./example-kc.yaml) file represents our +instance to be managed by the Keycloak Operator. This instance will disable the hostname and TLS certificates, just only +for this testing purposes, in production environments will require to verify them. + +```shell +kubectl apply -f example-kc.yaml +``` + +Importing a new Realm +------------------- + +Creating a new Realm, and its configuration, uses the `KeycloalRealmImport` CRD. The [my-realm-kc.yaml](my-realm-kc.yaml) file +describes a sample realm. Applying it on Kubernetes with the next command: + +```shell +kubectl apply -f example-realm-kc.yaml +``` + +Accessing the Admin Console +------------------- + +The Keycloak Operator will create a secret with the initial credentials of the `admin` user. These credentials are needed to +access to the Admin Console. To extract the values of these secret: + +```shell +kubectl get secret example-kc-initial-admin -o jsonpath='{.data.password}' | base64 --decode +``` + +The following command will show the ingress created to access the Web console: + +```shell +echo http://$(kubectl get ingress example-kc-ingress -o jsonpath='{.status.loadBalancer.ingress[0].ip}') +``` + +Using the right credentials from the `example-kc-initial-admin` secret, the Keycloak instance will show the `master`, and `example-realm` realms. +The `example-realm` will have some data already created, such as, the users. + +![Users of Example Realm](./example-realm-users.png) + +References +-------------------- + +* [Keycloak Operator Installation](https://www.keycloak.org/operator/installation) +* [Basic Keycloak deployment](https://www.keycloak.org/operator/basic-deployment) +* [Keycloak Realm Import](https://www.keycloak.org/operator/realm-import) diff --git a/operator/kubernetes/example-kc.yaml b/operator/kubernetes/example-kc.yaml new file mode 100644 index 000000000..c59fc244c --- /dev/null +++ b/operator/kubernetes/example-kc.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: k8s.keycloak.org/v2alpha1 +kind: Keycloak +metadata: + name: example-kc +spec: + instances: 1 + db: + vendor: postgres + host: postgres-db + usernameSecret: + name: keycloak-db-secret + key: username + passwordSecret: + name: keycloak-db-secret + key: password + poolInitialSize: 1 + poolMinSize: 1 + poolMaxSize: 10 + http: + # Disabling hostname and TLS verifications + httpEnabled: true + ingress: + enabled: true + hostname: + # Disabling hostname and TLS verifications + strict: false + strictBackchannel: false diff --git a/operator/kubernetes/example-realm-kc.yaml b/operator/kubernetes/example-realm-kc.yaml new file mode 100644 index 000000000..f3d61019b --- /dev/null +++ b/operator/kubernetes/example-realm-kc.yaml @@ -0,0 +1,43 @@ +--- +apiVersion: k8s.keycloak.org/v2alpha1 +kind: KeycloakRealmImport +metadata: + name: example-realm-kc +spec: + keycloakCRName: example-kc + realm: + id: example-realm + realm: example-realm + displayName: Example Realm + enabled: true + users: + - username: admin + credentials: + - type: password + value: password + email: admin@keycloak.org + enabled: true + realmRoles: + - admin + - user + - username: user + credentials: + - type: password + value: user + email: user@keycloak.org + enabled: true + realmRoles: + - user + - username: client + credentials: + - type: password + value: creator + email: client@keycloak.org + enabled: true + clientRoles: + account: + - "manage-account" + realm-management: + - "create-client" + - "manage-realm" + - "manage-clients" diff --git a/operator/kubernetes/example-realm-users.png b/operator/kubernetes/example-realm-users.png new file mode 100644 index 0000000000000000000000000000000000000000..6823c590eb24f2134a2b918fee1d8e370d2dabde GIT binary patch literal 58714 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

Z|} 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

Z6@rk4Wc@0BP8bNM$-u8|i_n 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 BbzA@d literal 0 HcmV?d00001 diff --git a/operator/kubernetes/postgres-db-statefulset.yaml b/operator/kubernetes/postgres-db-statefulset.yaml new file mode 100644 index 000000000..3b2bb1803 --- /dev/null +++ b/operator/kubernetes/postgres-db-statefulset.yaml @@ -0,0 +1,46 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: postgresql-db +spec: + serviceName: postgresql-db-service + selector: + matchLabels: + app: postgresql-db + replicas: 1 + template: + metadata: + labels: + app: postgresql-db + spec: + containers: + - name: postgresql-db + image: postgres:latest + volumeMounts: + - mountPath: /data + name: cache-volume + env: + - name: POSTGRES_USER + value: admin + - name: POSTGRES_PASSWORD + value: password + - name: PGDATA + value: /data/pgdata + - name: POSTGRES_DB + value: keycloak + volumes: + - name: cache-volume + emptyDir: {} +--- +apiVersion: v1 +kind: Service +metadata: + name: postgres-db +spec: + selector: + app: postgresql-db + type: LoadBalancer + ports: + - port: 5432 + targetPort: 5432 diff --git a/operator/openshift/README.md b/operator/openshift/README.md new file mode 100644 index 000000000..607f02e90 --- /dev/null +++ b/operator/openshift/README.md @@ -0,0 +1,135 @@ +openshift: Keycloak Operator on OpenShift +=================================================== + +Level: Beginner +Technologies: Keycloak Operator +Summary: Operate Keycloak with Keycloak Operator on OpenShift +Target Product: Keycloak + +What is it? +----------- + +This quickstart demonstrates how to deploy the Keycloak Operator, and operate a Keycloak instance on OpenShift environments. + +It tries to focus on the main features provided by the Keycloak Operator, such as: deploy Keycloak instances, +and import a realm with some configuration. + +System Requirements +------------------- + +This quickstart requires to have [CRC](https://crc.dev/crc/getting_started/getting_started/introducing/) installed. + +Starting CRC +------------------- + +To start minikube: + +```shell +crc start +``` + +And create a sample project: + +```shell +oc new-project keycloak-quickstart +``` + +Deploying Keycloak Operator +------------------- + +CRC includes the Operator Lifecycle Manager (OLM), that it is the recommended way to install the Keycloak Operator. + +Installing operators using OLM requires to have a user with `cluster-admin` role. This role can be granted in CRC with +the following command: + +```shell +oc adm policy add-cluster-role-to-user cluster-admin developer +``` + +The Keycloak Operator can be installed using the OpenShift Web Console, or create a `Subscription` with the next command: + +```shell +oc apply -f keycloak-operator-subscription.yaml +``` + +Deploying PostgreSQL Database +------------------- + +The Keycloak Operator does not deploy any database, so it is needed to have one before operate any Keycloak instance. + +To deploy a sample PostgreSQL Database execute the command: + +```shell +kubectl apply -f postgres-db-statefulset.yaml +``` + +The following command creates a secret with the database credentials. This secret will be used later by the Keycloak instance +to establish the connection to the database instance. + +```shell +kubectl create secret generic keycloak-db-secret --from-literal=username=admin --from-literal=password=password +``` + +Creating Hostname and TLS Certificate +------------------- + +For a production ready installation, you need a hostname that can be used to contact Keycloak. See [Configuring the hostname](https://www.keycloak.org/server/hostname) +for the available configurations. + +For development purposes, this guide will use `example-kc.apps-crc.testing`. + +For development purposes, you can enter this command to obtain a self-signed certificate: + +```shell +openssl req -subj '/CN=example-kc.apps-crc.testing/O=Test Keycloak./C=US' -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem +``` +You should install it in the cluster namespace as a Secret by entering this command: + +```shell +oc create secret tls example-kc-tls-secret --cert certificate.pem --key key.pem +``` + +Deploying Keycloak +------------------- + +The Keycloak instance is described using the `Keycloak` CRD. The [example-kc.yaml](./example-kc.yaml) file represents our +instance to be managed by the Keycloak Operator. This instance will disable the hostname and TLS certificates, just only +for this testing purposes, in production environments will require to verify them. + +```shell +kubectl apply -f example-kc.yaml +``` + +Importing a new Realm +------------------- + +Creating a new Realm, and its configuration, uses the `KeycloalRealmImport` CRD. The [my-realm-kc.yaml](my-realm-kc.yaml) file +describes a sample realm. Applying it on Kubernetes with the next command: + +```shell +kubectl apply -f example-realm-kc.yaml +``` + +Accessing the Admin Console +------------------- + +The Keycloak Operator will create a secret with the initial credentials of the `admin` user. These credentials are needed to +access to the Admin Console. To extract the values of these secret: + +```shell +kubectl get secret example-kc-initial-admin -o jsonpath='{.data.password}' | base64 --decode +``` + +Open a browser and navigate to `example-kc.apps-crc.testing` and introduce the credentials to log in to Keycloak + +Using the right credentials from the `example-kc-initial-admin` secret, the Keycloak instance will show the `master`, and `example-realm` realms. +The `example-realm` will have some data already created, such as, the users. + +![Users of Example Realm](./example-realm-users.png) + +References +-------------------- + +* [Keycloak Operator Installation](https://www.keycloak.org/operator/installation) +* [Basic Keycloak deployment](https://www.keycloak.org/operator/basic-deployment) +* [Keycloak Realm Import](https://www.keycloak.org/operator/realm-import) diff --git a/operator/openshift/example-kc.yaml b/operator/openshift/example-kc.yaml new file mode 100644 index 000000000..ef325c5b6 --- /dev/null +++ b/operator/openshift/example-kc.yaml @@ -0,0 +1,25 @@ +--- +apiVersion: k8s.keycloak.org/v2alpha1 +kind: Keycloak +metadata: + name: example-kc +spec: + instances: 1 + db: + vendor: postgres + host: postgres-db + usernameSecret: + name: keycloak-db-secret + key: username + passwordSecret: + name: keycloak-db-secret + key: password + poolInitialSize: 1 + poolMinSize: 1 + poolMaxSize: 10 + http: + tlsSecret: example-kc-tls-secret + ingress: + enabled: true + hostname: + hostname: example-kc.apps-crc.testing diff --git a/operator/openshift/example-realm-kc.yaml b/operator/openshift/example-realm-kc.yaml new file mode 100644 index 000000000..f3d61019b --- /dev/null +++ b/operator/openshift/example-realm-kc.yaml @@ -0,0 +1,43 @@ +--- +apiVersion: k8s.keycloak.org/v2alpha1 +kind: KeycloakRealmImport +metadata: + name: example-realm-kc +spec: + keycloakCRName: example-kc + realm: + id: example-realm + realm: example-realm + displayName: Example Realm + enabled: true + users: + - username: admin + credentials: + - type: password + value: password + email: admin@keycloak.org + enabled: true + realmRoles: + - admin + - user + - username: user + credentials: + - type: password + value: user + email: user@keycloak.org + enabled: true + realmRoles: + - user + - username: client + credentials: + - type: password + value: creator + email: client@keycloak.org + enabled: true + clientRoles: + account: + - "manage-account" + realm-management: + - "create-client" + - "manage-realm" + - "manage-clients" diff --git a/operator/openshift/example-realm-users.png b/operator/openshift/example-realm-users.png new file mode 100644 index 0000000000000000000000000000000000000000..6823c590eb24f2134a2b918fee1d8e370d2dabde GIT binary patch literal 58714 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

Z|} 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

Z6@rk4Wc@0BP8bNM$-u8|i_n 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 BbzA@d literal 0 HcmV?d00001 diff --git a/operator/openshift/keycloak-operator-subscription.yaml b/operator/openshift/keycloak-operator-subscription.yaml new file mode 100644 index 000000000..393ef7404 --- /dev/null +++ b/operator/openshift/keycloak-operator-subscription.yaml @@ -0,0 +1,20 @@ +--- +apiVersion: operators.coreos.com/v1 +kind: OperatorGroup +metadata: + name: keycloak-quickstart-og +spec: + targetNamespaces: + - keycloak-quickstart +--- +apiVersion: operators.coreos.com/v1alpha1 +kind: Subscription +metadata: + name: amq-streams +spec: + channel: fast + installPlanApproval: Automatic + name: keycloak-operator + source: community-operators + sourceNamespace: openshift-marketplace + startingCSV: keycloak-operator.v22.0.3 diff --git a/operator/openshift/postgres-db-statefulset.yaml b/operator/openshift/postgres-db-statefulset.yaml new file mode 100644 index 000000000..3b2bb1803 --- /dev/null +++ b/operator/openshift/postgres-db-statefulset.yaml @@ -0,0 +1,46 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: postgresql-db +spec: + serviceName: postgresql-db-service + selector: + matchLabels: + app: postgresql-db + replicas: 1 + template: + metadata: + labels: + app: postgresql-db + spec: + containers: + - name: postgresql-db + image: postgres:latest + volumeMounts: + - mountPath: /data + name: cache-volume + env: + - name: POSTGRES_USER + value: admin + - name: POSTGRES_PASSWORD + value: password + - name: PGDATA + value: /data/pgdata + - name: POSTGRES_DB + value: keycloak + volumes: + - name: cache-volume + emptyDir: {} +--- +apiVersion: v1 +kind: Service +metadata: + name: postgres-db +spec: + selector: + app: postgresql-db + type: LoadBalancer + ports: + - port: 5432 + targetPort: 5432