3.16. AWS Global Accelerator ロードバランサーのデプロイ


マルチクラスターデプロイメントのロードバランサー構成要素として AWS Global Accelerator をデプロイします。

このトピックでは、Red Hat build of Keycloak のマルチクラスターデプロイメント間でトラフィックをルーティングする AWS Global Accelerator をデプロイするために必要な手順を説明します。

このデプロイメントは、マルチクラスターデプロイメントの概念 の章で説明されているセットアップで使用することを想定としています。このデプロイメントは、マルチクラスターデプロイメントの構成要素 の章で説明されている他の構成要素とともに使用してください。

注記

以下のブループリントは、機能的に完全な最小限の例を示すためのものであり、通常のインストールに適したベースラインのパフォーマンスを実現します。ただし、お使いの環境、組織の標準、セキュリティーのベストプラクティスに合わせて変更する必要があります。

3.16.1. 対象者

この章では、複数のアベイラビリティーゾーンの Red Hat build of Keycloak デプロイメントで Red Hat build of Keycloak クライアント接続フェイルオーバーを処理するために AWS Global Accelerator インスタンスをデプロイする方法を説明します。

3.16.2. アーキテクチャー

ユーザーリクエストが Red Hat build of Keycloak にルーティングされるようにするには、ロードバランサーを利用する必要があります。クライアント側での DNS キャッシュの問題を防ぐには、クライアントを両方のアベイラビリティーゾーンにルーティングするときに変更されない静的 IP アドレスを実装で使用する必要があります。

この章では、すべての Red Hat build of Keycloak クライアントリクエストを AWS Global Accelerator ロードバランサー経由でルーティングする方法を説明します。Red Hat build of Keycloak サイトに障害が発生した場合、Accelerator はすべてのクライアントリクエストが他の正常なサイトにルーティングされるようにします。両方のサイトが異常とマークされている場合、Accelerator は “fail-open” を実行し、ランダムに選択されたサイトにリクエストを転送します。

図3.2 AWS Global Accelerator のフェイルオーバー

Keycloak Pod を AWS Global Accelerator インスタンスへのエンドポイントとして使用できるようにするために、両方の ROSA クラスターに AWS Network Load Balancer (NLB) が作成されます。各クラスターエンドポイントには 128 の重み (最大重み 255 の半分) が割り当てられ、両方のクラスターが正常な場合にアクセラレータートラフィックが両方のアベイラビリティーゾーンに均等にルーティングされます。

3.16.3. 前提条件

  • ROSA ベースの Multi-AZ Red Hat build of Keycloak デプロイメント

3.16.4. 手順

  1. ネットワークロードバランサーを作成します。

    Red Hat build of Keycloak クラスターごとに次の操作を実行します。

    1. ROSA クラスターにログインします。
    2. OpenShift ロードバランサーサービスを作成します。

      コマンド:

      cat <<EOF | oc apply -n $NAMESPACE -f - 
      1
      
        apiVersion: v1
        kind: Service
        metadata:
          name: accelerator-loadbalancer
          annotations:
            service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: accelerator=${ACCELERATOR_NAME},site=${CLUSTER_NAME},namespace=${NAMESPACE} 
      2
      
            service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
            service.beta.kubernetes.io/aws-load-balancer-healthcheck-path: "/lb-check"
            service.beta.kubernetes.io/aws-load-balancer-healthcheck-protocol: "https"
            service.beta.kubernetes.io/aws-load-balancer-healthcheck-interval: "10" 
      3
      
            service.beta.kubernetes.io/aws-load-balancer-healthcheck-healthy-threshold: "3" 
      4
      
            service.beta.kubernetes.io/aws-load-balancer-healthcheck-unhealthy-threshold: "3" 
      5
      
        spec:
          ports:
          - name: https
            port: 443
            protocol: TCP
            targetPort: 8443
          selector:
            app: keycloak
            app.kubernetes.io/instance: keycloak
            app.kubernetes.io/managed-by: keycloak-operator
          sessionAffinity: None
          type: LoadBalancer
      EOF
      Copy to Clipboard Toggle word wrap

      1
      $NAMESPACE は Red Hat build of Keycloak デプロイメントの namespace に置き換えてください。
      2
      AWS によって作成されたリソースにタグを追加して、後で取得できるようにします。ACCELERATOR_NAME は後続の手順で作成される Global Accelerator の名前、CLUSTER_NAME は現在のサイトの名前でなければなりません。
      3
      ヘルスチェックプローブの実行頻度 (秒単位)
      4
      NLB を正常とみなすために必要なヘルスチェックの合格回数
      5
      NLB を正常ではないとみなすために必要なヘルスチェックの不合格回数
    3. 後で必要になるため、DNS ホスト名をメモしておいてください。

      コマンド:

      oc -n $NAMESPACE get svc accelerator-loadbalancer --template="{{range .status.loadBalancer.ingress}}{{.hostname}}{{end}}"
      Copy to Clipboard Toggle word wrap

      出力:

      abab80a363ce8479ea9c4349d116bce2-6b65e8b4272fa4b5.elb.eu-west-1.amazonaws.com
      Copy to Clipboard Toggle word wrap

  2. Global Accelerator インスタンスを作成します。

    コマンド:

    aws globalaccelerator create-accelerator \
      --name example-accelerator \ 
    1
    
      --ip-address-type DUAL_STACK \ 
    2
    
      --region us-west-2 
    3
    Copy to Clipboard Toggle word wrap

    1
    作成するアクセラレーターの名前。必要に応じて更新します。
    2
    'DUAL_STACK' または 'IPV4' を使用できます。
    3
    すべての globalaccelerator コマンドで、必ず 'us-west-2' リージョンを使用する必要があります

    出力:

    {
        "Accelerator": {
            "AcceleratorArn": "arn:aws:globalaccelerator::606671647913:accelerator/e35a94dd-391f-4e3e-9a3d-d5ad22a78c71", 
    1
    
            "Name": "example-accelerator",
            "IpAddressType": "DUAL_STACK",
            "Enabled": true,
            "IpSets": [
                {
                    "IpFamily": "IPv4",
                    "IpAddresses": [
                        "75.2.42.125",
                        "99.83.132.135"
                    ],
                    "IpAddressFamily": "IPv4"
                },
                {
                    "IpFamily": "IPv6",
                    "IpAddresses": [
                        "2600:9000:a400:4092:88f3:82e2:e5b2:e686",
                        "2600:9000:a516:b4ef:157e:4cbd:7b48:20f1"
                    ],
                    "IpAddressFamily": "IPv6"
                }
            ],
            "DnsName": "a099f799900e5b10d.awsglobalaccelerator.com", 
    2
    
            "Status": "IN_PROGRESS",
            "CreatedTime": "2023-11-13T15:46:40+00:00",
            "LastModifiedTime": "2023-11-13T15:46:42+00:00",
            "DualStackDnsName": "ac86191ca5121e885.dualstack.awsglobalaccelerator.com" 
    3
    
        }
    }
    Copy to Clipboard Toggle word wrap

    1
    作成されたアクセラレーターインスタンスに関連付けられた ARN。後続のコマンドで使用します。
    2
    IPv4 Red Hat build of Keycloak クライアントが接続する DNS 名
    3
    IPv6 Red Hat build of Keycloak クライアントが接続する DNS 名
  3. アクセラレーターのリスナーを作成します。

    コマンド:

    aws globalaccelerator create-listener \
      --accelerator-arn 'arn:aws:globalaccelerator::606671647913:accelerator/e35a94dd-391f-4e3e-9a3d-d5ad22a78c71' \
      --port-ranges '[{"FromPort":443,"ToPort":443}]' \
      --protocol TCP \
      --region us-west-2
    Copy to Clipboard Toggle word wrap

    出力:

    {
        "Listener": {
            "ListenerArn": "arn:aws:globalaccelerator::606671647913:accelerator/e35a94dd-391f-4e3e-9a3d-d5ad22a78c71/listener/1f396d40",
            "PortRanges": [
                {
                    "FromPort": 443,
                    "ToPort": 443
                }
            ],
            "Protocol": "TCP",
            "ClientAffinity": "NONE"
        }
    }
    Copy to Clipboard Toggle word wrap

  4. リスナーのエンドポイントグループを作成します。

    コマンド:

    CLUSTER_1_ENDPOINT_ARN=$(aws elbv2 describe-load-balancers \
        --query "LoadBalancers[?DNSName=='abab80a363ce8479ea9c4349d116bce2-6b65e8b4272fa4b5.elb.eu-west-1.amazonaws.com'].LoadBalancerArn" \ 
    1
    
        --region eu-west-1 \ 
    2
    
        --output text
    )
    CLUSTER_2_ENDPOINT_ARN=$(aws elbv2 describe-load-balancers \
        --query "LoadBalancers[?DNSName=='a1c76566e3c334e4ab7b762d9f8dcbcf-985941f9c8d108d4.elb.eu-west-1.amazonaws.com'].LoadBalancerArn" \ 
    3
    
        --region eu-west-1 \ 
    4
    
        --output text
    )
    ENDPOINTS='[
      {
        "EndpointId": "'${CLUSTER_1_ENDPOINT_ARN}'",
        "Weight": 128,
        "ClientIPPreservationEnabled": false
      },
      {
        "EndpointId": "'${CLUSTER_2_ENDPOINT_ARN}'",
        "Weight": 128,
        "ClientIPPreservationEnabled": false
      }
    ]'
    aws globalaccelerator create-endpoint-group \
      --listener-arn 'arn:aws:globalaccelerator::606671647913:accelerator/e35a94dd-391f-4e3e-9a3d-d5ad22a78c71/listener/1f396d40' \ 
    5
    
      --traffic-dial-percentage 100 \
      --endpoint-configurations ${ENDPOINTS} \
      --endpoint-group-region eu-west-1 \ 
    6
    
      --region us-west-2
    Copy to Clipboard Toggle word wrap

    1 3
    クラスターの NLB の DNS ホスト名
    2 4 5
    前のステップで作成したリスナーの ARN
    6
    これはクラスターをホストする AWS リージョンである必要があります。

    出力:

    {
        "EndpointGroup": {
            "EndpointGroupArn": "arn:aws:globalaccelerator::606671647913:accelerator/e35a94dd-391f-4e3e-9a3d-d5ad22a78c71/listener/1f396d40/endpoint-group/2581af0dc700",
            "EndpointGroupRegion": "eu-west-1",
            "EndpointDescriptions": [
                {
                    "EndpointId": "arn:aws:elasticloadbalancing:eu-west-1:606671647913:loadbalancer/net/abab80a363ce8479ea9c4349d116bce2/6b65e8b4272fa4b5",
                    "Weight": 128,
                    "HealthState": "HEALTHY",
                    "ClientIPPreservationEnabled": false
                },
                {
                    "EndpointId": "arn:aws:elasticloadbalancing:eu-west-1:606671647913:loadbalancer/net/a1c76566e3c334e4ab7b762d9f8dcbcf/985941f9c8d108d4",
                    "Weight": 128,
                    "HealthState": "HEALTHY",
                    "ClientIPPreservationEnabled": false
                }
            ],
            "TrafficDialPercentage": 100.0,
            "HealthCheckPort": 443,
            "HealthCheckProtocol": "TCP",
            "HealthCheckPath": "undefined",
            "HealthCheckIntervalSeconds": 30,
            "ThresholdCount": 3
        }
    }
    Copy to Clipboard Toggle word wrap

  5. オプション: カスタムドメインを設定します。

    カスタムドメインを使用している場合は、カスタムドメインでエイリアスまたは CNAME を設定して、カスタムドメインを AWS グローバルロードバランサーにポイントします。

  6. Red Hat build of Keycloak デプロイメントを更新または作成します。

    Red Hat build of Keycloak クラスターごとに次の操作を実行します。

    1. ROSA クラスターにログインします。
    2. Keycloak CR が次の設定になっていることを確認します。

      apiVersion: k8s.keycloak.org/v2alpha1
      kind: Keycloak
      metadata:
        name: keycloak
      spec:
        hostname:
          hostname: $HOSTNAME 
      1
      
        ingress:
          enabled: false 
      2
      Copy to Clipboard Toggle word wrap
      1
      Keycloak に接続するためにクライアントが使用するホスト名
      2
      すべての Red Hat build of Keycloak アクセスはプロビジョニングされた NLB 経由で行われるため、デフォルトの Ingress を無効にします。

      リクエスト転送が確実に期待通り機能するためには、Keycloak CR で、クライアントが Red Hat build of Keycloak インスタンスにアクセスするためのホスト名を指定する必要があります。これは、Global Accelerator に関連付けられた DualStackDnsName または DnsName ホスト名のいずれかになります。カスタムドメインを使用している場合は、カスタムドメインを AWS Global Accelerator にポイントし、ここでカスタムドメインを使用します。

3.16.5. 検証

Global Accelerator がクラスターに接続するように正しく設定されていることを確認するには、上記で設定されたホスト名に移動して Red Hat build of Keycloak 管理コンソールを表示します。

3.16.6. 関連資料

  • サイトをオンラインにする
  • サイトをオフラインにする
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat