Kubernetes上にhelmでKeycloakをデプロイする


シングルサインオンのKeycloakをデプロイしてみます。
helmはv2.14.3を使用します。
https://github.com/codecentric/helm-charts/tree/master/charts/keycloak

※minikube上で検証した内容になります。minikube.devドメインを用いてアクセスできるようにするため
superbrothers様の記事を参考に事前設定をしています。必要に応じて作業をしてください。
https://qiita.com/superbrothers/items/13d8ce012ef23e22cb74

1. values.yamlファイルを作成する

管理者ユーザとingressの有効化の設定をします。

values.yaml
keycloak:
  username: admin
  password: Passw0rd
  ingress:
    enabled: true
    path: /
    hosts:
      - keycloak.minikube.dev

2. デプロイする

helm repo add codecentric https://codecentric.github.io/helm-charts
helm upgrade --install keycloak codecentric/keycloak --namespace keycloak --values ./values.yaml

3. Keycloakが動作していることを確認

http://keycloak.minikube.dev にアクセスすることでKeyclaokのトップページが表示されることを確認します。
Administration Consoleから先ほど指定した管理者ユーザの情報でログインし、Keyclaokの管理などを行うことができます。

その他

DBの設定について

デフォルトではH2というデータベースが使われるようになっていますが、Keycloakをシャットダウンした際にデータが消えてしまいます。
データを永続化するために外部データベースに保存することが可能です。
https://github.com/codecentric/helm-charts/tree/master/charts/keycloak#database-setup

外部データベースにPostgreSQLを指定した場合の設定例

values.yaml
keycloak:
  username: admin
  password: Passw0rd
  ingress:
    enabled: true
    path: /
    hosts:
      - keycloak.minikube.dev
persistence:
  dbVendor: postgres
  dbName: keycloak
  dbHost: mykeycloak
  dbPort: 5432
  dbUser: keycloak
  dbPassword: keycloakPassword

ingressの前段にL7LBが存在する場合の設定について

今回の環境ではminikubeを利用していますが、自分がkeycloakを使っている環境ではL7LBがKubernetesクラスタの前段にいます。
その場合、Keycloakのログイン画面に遷移すると Invalid parameter: redirect_uri と表示されログインができません。
このような構成の場合、 PROXY_ADDRESS_FORWARDING=true という値を別途設定する必要があります。
ハマりどころです。
https://github.com/keycloak/keycloak-containers/blob/master/server/README.md#enabling-proxy-address-forwarding

ingress(k8sクラスタ)の前段にL7LBが存在する場合の設定例

values.yaml
keycloak:
  username: admin
  password: Passw0rd
  ingress:
    enabled: true
    path: /
    hosts:
      - keycloak.minikube.dev
  extraEnv: |
    - name: PROXY_ADDRESS_FORWARDING
      value: "true"