AWS Route 53 (ロードバランサー) for ROSA

このガイドでは、特定のサイトで障害が発生した場合に、Keycloak デプロイメントで自動クライアントフェイルオーバーを達成する方法について説明します。

クライアントフェイルオーバーのための Route 53

クライアントフェイルオーバーを提供するために、プライマリサイトがダウンした場合にトラフィックを自動的に再ルーティングするために、AWS Route 53DNS フェイルオーバー 機能を利用できます。AWS のヘルスチェックは、サイトが応答しているかどうかを 30 秒ごとにチェックし、クライアントから見た DNS はそれに応じて更新されます。

このスクリプトは、ルートドメイン keycloak-benchmark.com 用に、3 つの追加ホストエントリを持つサブドメイン名を生成します。

primary.<生成されたサブドメイン>.keycloak-benchmark.com

Keycloak サイト 1 のサブドメイン

backup.<生成されたサブドメイン>.keycloak-benchmark.com

Keycloak サイト 2 のサブドメイン

client.<生成されたサブドメイン>.keycloak-benchmark.com

Keycloak クライアントによって使用されるサブドメイン。障害発生時に 1 から 2 に自動的にフェイルオーバーします。

これらの DNS エントリは OpenShift クラスターに登録され、これらのホスト名へのリクエストに応答します。セットアップ後、Keycloak デプロイメントは新しいホスト名を使用するように更新されます。

新しく作成された要素(緑)と更新された要素(黄)については、以下を参照してください。

route 53 configuration.dio

障害が発生したプライマリサイトがユーザーの入力なしに正常とマークされないようにするため(例えば、ROSA クラスターの自動再起動が発生した場合など)、プライマリヘルスチェックが失敗するたびにイベントを発行する AWS SNS トピックを作成します。このトピックは、存在しないエンドポイント /lb-check-failed-over を指すようにヘルスチェックを更新する AWS Lambda 関数をトリガーするために使用されます。バックアップからプライマリークラスターにフェイルバックするには、ヘルスチェックを手動で /lb-check に更新する必要があります。

新しい Route 53 フェイルオーバーのセットアップ

前提条件

keycloak-benchmark.com のホストゾーンは既に存在します。

手順

  1. 2 つの ROSA クラスターを作成します。

  2. サブドメインレコードとヘルスチェックを作成します。

    PRIMARY_CLUSTER=<name-rosa-cluster> \
    BACKUP_CLUSTER=<name-of-rosa_cluster> \
    ./provision/aws/route53/route53_create.sh

    以降の手順のために、スクリプトによって生成されたドメインと URL を書き留めてください。生成されたサブドメイン名の部分は、異なるクラスター内の複数の Keycloak インスタンスを可能にします。

    Domain: <generated-subdomain>.keycloak-benchmark.com
    Client Site URL: client.<generated-subdomain>.keycloak-benchmark.com
    Primary Site URL: primary.<generated-subdomain>.keycloak-benchmark.com
    Backup Site URL: backup.<generated-subdomain>.keycloak-benchmark.com
  3. Keycloak を通常どおりデプロイしますが、次の環境変数を設定します。

    1. プライマリークラスター

      KC_HOSTNAME_OVERRIDE=client.<generated-subdomain>.keycloak-benchmark.com # Hostname used by clients
      KC_HEALTH_HOSTNAME=primary.<generated-subdomain>.keycloak-benchmark.com # Hostname used by AWS health checks
    2. バックアップクラスター

      KC_HOSTNAME_OVERRIDE=client.<generated-subdomain>.keycloak-benchmark.com # Hostname used by clients
      KC_HEALTH_HOSTNAME=backup.<generated-subdomain>.keycloak-benchmark.com # Hostname used by AWS health checks

フェイルオーバーのテスト

プライマリサイトからバックアップサイトへのフェイルオーバーをテストするには、次の手順を実行します。

  1. client.<生成されたサブドメイン>.keycloak-benchmark.com がプライマリに接続することを確認します。

    ./provision/aws/route53/route53_test_primary_used.sh <generated-subdomain>.keycloak-benchmark.com; echo $?

    client. サブドメインが primary. サブドメインと同じ IP を指している場合、スクリプトは 0 を返します。

    PRIMARY_CLUSTERBACKUP_CLUSTER が同じ ROSA クラスターに設定されている場合、このスクリプトは失敗します。
  2. プライマリ ROSA クラスターにログインし、keycloak 名前空間から aws-health-route Route を削除します。

  3. ヘルスチェックが primary.<生成されたサブドメイン>.keycloak-benchmark.com が正常でなくなったと判断するまで約 30 秒待ちます。これは、AWS コンソール でヘルスチェックを検査することで確認できます。

  4. 最初の手順のスクリプトを実行すると、終了コード 1 が返されるはずです。

フェイルバックのテスト

バックアップクラスターからプライマリークラスターにフェイルバックするには、次の操作を実行する必要があります。

  1. PRIMARY_CLUSTER 上に aws-health-route を再作成します。

  2. プライマリークラスターの Route 53 ヘルスチェックの ResourcePath/lb-check に更新します。

両方の操作が実行されると、ヘルスチェックは最終的に成功し、client. レコードはプライマリークラスターへのリクエストのルーティングに戻ります。

Route 53 フェイルオーバーの削除

生成されたサブドメインをヘルスチェックを含めて削除するには、次のコマンドを実行します。

SUBDOMAIN=<generated-subdomain> \
./provision/aws/route53/route53_delete.sh