keycloak-scim/operator
Václav Muzikář 0846181809
Use only plain hostname in Ingress (#30345)
Closes #30332

Signed-off-by: Václav Muzikář <vmuzikar@redhat.com>
2024-06-12 08:54:54 +02:00
..
overlays/default-namespace switching the operator role to clusterrole for ingresses config (#23641) 2023-10-03 12:31:23 +02:00
scripts Use Maven wrapper instead of platform dependent Maven version (#29988) 2024-06-03 15:45:39 +02:00
src Use only plain hostname in Ingress (#30345) 2024-06-12 08:54:54 +02:00
.gitignore
assembly.xml Build the operator container via Dockerfile (#19642) 2023-04-21 08:32:29 +02:00
Dockerfile OpenJDK 21 support (#28518) 2024-06-03 14:17:28 +02:00
olm-assembly.xml Use quarkus-operator-sdk-bundle-generator for OLM YAMLs 2023-06-20 15:01:44 -03:00
pom.xml fix: add / clean labels on community images (#28760) 2024-04-25 11:48:13 +02:00
README.md fix: change from operator. to kc.operator. keys (#26414) 2024-02-08 15:03:20 +01:00

Keycloak on Quarkus

The module holds the codebase to build the Keycloak Operator on top of Quarkus. Using the Quarkus Operator SDK.

Also see Operator guides

Activating the Module

When build from the project root directory, this module is only enabled if the installed JDK is 11 or newer.

Building

Ensure you have JDK 11 (or newer) installed.

Build the Docker image with:

mvn clean package -Dquarkus.container-image.build=true

This will build a container image from Dockerfile, using docker by default. podman is also supported if you do these steps beforehand:

  • Follow this guide to enable the podman user socket
  • Set the DOCKER_HOST environment variable to point at this user socket. For example: DOCKER_HOST=unix:///run/user/1000/podman/podman.sock.
  • You may also have to set QUARKUS_DOCKER_EXECUTABLE_NAME=podman

Configuration

The Keycloak image can be configured, when starting the operator, using the Java property:

kc.operator.keycloak.image

And the imagePullPolicy with:

kc.operator.keycloak.image-pull-policy

Contributing

Quick start on Minikube

Enable the Minikube Docker daemon:

eval $(minikube -p minikube docker-env)

Compile the project and generate the Docker image with JIB:

mvn clean package -Dquarkus.kubernetes.image-pull-policy=IfNotPresent -Dquarkus.container-image.build=true

Install the CRD definition and the operator in the cluster in the keycloak namespace:

kubectl create namespace keycloak
kubectl apply -k target

to install in the default namespace:

kubectl apply -k overlays/default-namespace

Remove the created resources with:

kubectl delete -k <previously-used-folder>

Testing

Testing allows 2 methods specified in the property test.operator.deployment : local & remote.

local : resources will be deployed to the local cluster and the operator will run out of the cluster

remote : same as local test but an image for the operator will be generated and deployed run inside the cluster

mvn clean verify \
  -Dquarkus.container-image.build=true \
  -Dquarkus.container-image.tag=test \
  -Dquarkus.kubernetes.image-pull-policy=IfNotPresent \
  -Dtest.operator.deployment=remote

To run tests on Mac with minikube and the docker driver you should run minikube tunnel in a separate shell and configure the Java properties as follows:

-Dtest.operator.kubernetes.ip=localhost

On Linux or on Mac using minikube on a VM, instead you should enable ingress:

minikube addons enable ingress

To avoid skipping tests that are depending on custom Keycloak images, you need to build those first:

./build-testing-docker-images.sh [SOURCE KEYCLOAK IMAGE TAG] [SOURCE KEYCLOAK IMAGE]

And run the tests passing an extra Java property:

-Dtest.kc.operator.custom.image=custom-keycloak:latest

Testing using a pre-built operator image from a remote registry

You can run the testsuite using an already built operator image from a remote image registry.

To do this, you need to set quarkus.container-image.build=false and specify the desired image you want to use by setting quarkus.container-image.image=<your-image>:<your-tag>

Example:

 mvn clean verify \
      -Dquarkus.container-image.build=false \
      -Dquarkus.container-image.image=quay.io/keycloak/keycloak-operator:nightly \
      -Dtest.operator.deployment=remote