Keycloak Operator を使用した HA のための Keycloak のデプロイ

Keycloak デプロイメントの構成要素

このガイドでは、ロードテスト済みで、単一の Pod の障害から回復する Kubernetes 向けの高度な Keycloak 構成について説明します。

これらの手順は、マルチサイトデプロイメントのコンセプトガイドで説明されている設定での使用を目的としています。 マルチサイトデプロイメントの構成要素ガイドで概説されている他の構成要素と組み合わせて使用してください。

前提条件

手順

  1. CPU およびメモリリソースのサイジングのコンセプトガイドを使用して、デプロイメントのサイジングを決定します。

  2. Keycloak Operator インストールガイドで説明されているように、Keycloak Operator をインストールします。

  3. 以下の構成ファイルには、複数のアベイラビリティゾーンに AWS Aurora をデプロイするの Aurora データベースへの接続に関連するオプションが含まれていることに注意してください。

  4. 以下の構成ファイルには、Infinispan Operator を使用した HA のための Infinispan のデプロイの Infinispan サーバーへの接続に関連するオプションが含まれていることに注意してください。

  5. Amazon Aurora PostgreSQL データベースでの使用のために準備されたカスタム Keycloak イメージをビルドします。

  6. 最初の手順で計算されたリソースリクエストと制限を使用して、次の値で Keycloak CR をデプロイします。

    apiVersion: k8s.keycloak.org/v2alpha1
    kind: Keycloak
    metadata:
      labels:
        app: keycloak
      name: keycloak
      namespace: keycloak
    spec:
      hostname:
        hostname: <KEYCLOAK_URL_HERE>
      resources:
        requests:
          cpu: "2"
          memory: "1250M"
        limits:
          cpu: "6"
          memory: "2250M"
      db:
        vendor: postgres
        url: jdbc:aws-wrapper:postgresql://<AWS_AURORA_URL_HERE>:5432/keycloak
        poolMinSize: 30 (1)
        poolInitialSize: 30
        poolMaxSize: 30
        usernameSecret:
          name: keycloak-db-secret
          key: username
        passwordSecret:
          name: keycloak-db-secret
          key: password
      image: <KEYCLOAK_IMAGE_HERE> (2)
      startOptimized: false (2)
      features:
        enabled:
          - user-event-metrics
          - multi-site (3)
      transaction:
        xaEnabled: false (4)
      additionalOptions:
    
        - name: log-console-output
          value: json
        - name: metrics-enabled (5)
          value: 'true'
        - name: event-metrics-user-enabled
          value: 'true'
        - name: cache-remote-host
          value: "infinispan.keycloak.svc"
        - name: cache-remote-port
          value: "11222"
        - name: cache-remote-username
          secret:
            name: remote-store-secret
            key: username
        - name: cache-remote-password
          secret:
            name: remote-store-secret
            key: password
        - name: spi-connections-infinispan-quarkus-site-name
          value: keycloak
        - name: db-driver
          value: software.amazon.jdbc.Driver
      http:
        tlsSecret: keycloak-tls-secret
      instances: 3
    1 データベース接続プールの初期サイズ、最大サイズ、および最小サイズは、データベースのステートメントキャッシュを許可するために同一である必要があります。この数値は、システムのニーズに合わせて調整してください。ほとんどのリクエストは Keycloak 組み込みキャッシュのためにデータベースにアクセスしないため、この変更により 1 秒あたり数百のリクエストを処理できます。詳細については、データベース接続プールのコンセプトガイドを参照してください。
    2 カスタム Keycloak イメージへの URL を指定します。イメージが最適化されている場合は、startOptimized フラグを true に設定します。
    3 ロードバランサープローブ /lb-check のように、マルチサイトサポートのための追加機能を有効にします。
    4 XA トランザクションは、Amazon Web Services JDBC Driver ではサポートされていません。
    5 負荷時のシステムを分析できるようにするには、メトリクスエンドポイントを有効にします。この設定のデメリットは、メトリクスが外部 Keycloak エンドポイントで利用可能になるため、エンドポイントが外部から利用できないようにフィルタを追加する必要があることです。Keycloak の前にリバースプロキシを使用して、これらの URL をフィルタリングします。

デプロイメントの検証

Keycloak デプロイメントの準備が完了していることを確認します。

kubectl wait --for=condition=Ready keycloaks.k8s.keycloak.org/keycloak
kubectl wait --for=condition=RollingUpdate=False keycloaks.k8s.keycloak.org/keycloak

オプション: 負荷分散

負荷分散を有効にするには、キューに入れられたリクエストの数を制限します。

最大キュー HTTP リクエスト数による負荷分散
spec:
  additionalOptions:
    - name: http-max-queued-requests
      value: "1000"

すべての上限を超えるリクエストは、HTTP 503 で処理されます。

http-pool-max-threads の値をさらに制限することを検討してください。複数の同時実行スレッドは、要求された CPU 制限に達すると Kubernetes によるスロットリングにつながるためです。

負荷分散の詳細については、スレッドプールの構成のコンセプトガイドを参照してください。

オプション: スティッキーセッションの無効化

OpenShift 上で Keycloak Operator によって提供されるデフォルトのパストゥルー Ingress セットアップとして実行する場合、HAProxy によるロードバランシングは、送信元 IP アドレスに基づくスティッキーセッションを使用して行われます。ロードテストを実行する場合、または HAProxy の前にリバースプロキシがある場合、単一の Keycloak Pod ですべてのリクエストを受信することを避けるために、このセットアップを無効にしたい場合があります。

スティッキーセッションを無効にするには、Keycloak カスタムリソースの spec の下に次の追加構成を追加します。

spec:
  ingress:
    enabled: true
    annotations:
      # When running load tests, disable sticky sessions on the OpenShift HAProxy router
      # to avoid receiving all requests on a single Keycloak Pod.
      haproxy.router.openshift.io/balance: roundrobin
      haproxy.router.openshift.io/disable_cookies: 'true'
このページの内容