8.3. 手順
すべての Red Hat build of Keycloak クライアントが接続時に経由する必要があるルートドメイン名を使用して Route53 ホストゾーン を作成します。
"Hosted zone ID" は後の手順で必要になるため、メモしておきます。
各 ROSA クラスターに関連付けられた "Hosted zone ID" と DNS 名を取得します。
プライマリークラスターとバックアップクラスターの両方で、次の手順を実行します。
- ROSA クラスターにログインします。
クラスターのロードバランサーのホストゾーン ID と DNS ホスト名を取得します。
コマンド:
HOSTNAME=$(oc -n openshift-ingress get svc router-default \ -o jsonpath='{.status.loadBalancer.ingress[].hostname}' ) aws elbv2 describe-load-balancers \ --query "LoadBalancers[?DNSName=='${HOSTNAME}'].{CanonicalHostedZoneId:CanonicalHostedZoneId,DNSName:DNSName}" \ --region eu-west-1 \1 --output json
- 1
- ROSA クラスターをホストする AWS リージョン
出力:
[ { "CanonicalHostedZoneId": "Z2IFOLAFXWLO4F", "DNSName": "ad62c8d2fcffa4d54aec7ffff902c925-61f5d3e1cbdc5d42.elb.eu-west-1.amazonaws.com" } ]
注記OpenShift 4.13 以前を実行している ROSA クラスターは、アプリケーションロードバランサーの代わりにクラシックロードバランサーを使用します。
aws elb describe-load-balancers
コマンドと更新されたクエリー文字列を使用してください。
Route53 ヘルスチェックを作成します。
コマンド:
function createHealthCheck() { # Creating a hash of the caller reference to allow for names longer than 64 characters REF=($(echo $1 | sha1sum )) aws route53 create-health-check \ --caller-reference "$REF" \ --query "HealthCheck.Id" \ --no-cli-pager \ --output text \ --health-check-config ' { "Type": "HTTPS", "ResourcePath": "/lb-check", "FullyQualifiedDomainName": "'$1'", "Port": 443, "RequestInterval": 30, "FailureThreshold": 1, "EnableSNI": true } ' } CLIENT_DOMAIN="client.keycloak-benchmark.com" 1 PRIMARY_DOMAIN="primary.${CLIENT_DOMAIN}" 2 BACKUP_DOMAIN="backup.${CLIENT_DOMAIN}" 3 createHealthCheck ${PRIMARY_DOMAIN} createHealthCheck ${BACKUP_DOMAIN}
出力:
233e180f-f023-45a3-954e-415303f21eab 1 799e2cbb-43ae-4848-9b72-0d9173f04912 2
Route53 レコードセットを作成します。
コマンド:
HOSTED_ZONE_ID="Z09084361B6LKQQRCVBEY" 1 PRIMARY_LB_HOSTED_ZONE_ID="Z2IFOLAFXWLO4F" PRIMARY_LB_DNS=ad62c8d2fcffa4d54aec7ffff902c925-61f5d3e1cbdc5d42.elb.eu-west-1.amazonaws.com PRIMARY_HEALTH_ID=233e180f-f023-45a3-954e-415303f21eab BACKUP_LB_HOSTED_ZONE_ID="Z2IFOLAFXWLO4F" BACKUP_LB_DNS=a184a0e02a5d44a9194e517c12c2b0ec-1203036292.elb.eu-west-1.amazonaws.com BACKUP_HEALTH_ID=799e2cbb-43ae-4848-9b72-0d9173f04912 aws route53 change-resource-record-sets \ --hosted-zone-id Z09084361B6LKQQRCVBEY \ --query "ChangeInfo.Id" \ --output text \ --change-batch ' { "Comment": "Creating Record Set for '${CLIENT_DOMAIN}'", "Changes": [{ "Action": "CREATE", "ResourceRecordSet": { "Name": "'${PRIMARY_DOMAIN}'", "Type": "A", "AliasTarget": { "HostedZoneId": "'${PRIMARY_LB_HOSTED_ZONE_ID}'", "DNSName": "'${PRIMARY_LB_DNS}'", "EvaluateTargetHealth": true } } }, { "Action": "CREATE", "ResourceRecordSet": { "Name": "'${BACKUP_DOMAIN}'", "Type": "A", "AliasTarget": { "HostedZoneId": "'${BACKUP_LB_HOSTED_ZONE_ID}'", "DNSName": "'${BACKUP_LB_DNS}'", "EvaluateTargetHealth": true } } }, { "Action": "CREATE", "ResourceRecordSet": { "Name": "'${CLIENT_DOMAIN}'", "Type": "A", "SetIdentifier": "client-failover-primary-'${SUBDOMAIN}'", "Failover": "PRIMARY", "HealthCheckId": "'${PRIMARY_HEALTH_ID}'", "AliasTarget": { "HostedZoneId": "'${HOSTED_ZONE_ID}'", "DNSName": "'${PRIMARY_DOMAIN}'", "EvaluateTargetHealth": true } } }, { "Action": "CREATE", "ResourceRecordSet": { "Name": "'${CLIENT_DOMAIN}'", "Type": "A", "SetIdentifier": "client-failover-backup-'${SUBDOMAIN}'", "Failover": "SECONDARY", "HealthCheckId": "'${BACKUP_HEALTH_ID}'", "AliasTarget": { "HostedZoneId": "'${HOSTED_ZONE_ID}'", "DNSName": "'${BACKUP_DOMAIN}'", "EvaluateTargetHealth": true } } }] } '
出力:
/change/C053410633T95FR9WN3YI
Route53 レコードが更新されるまで待ちます。
コマンド:
aws route53 wait resource-record-sets-changed --id /change/C053410633T95FR9WN3YI
Red Hat build of Keycloak デプロイメントを更新または作成します。
プライマリークラスターとバックアップクラスターの両方で、次の手順を実行します。
- ROSA クラスターにログインします。
Keycloak
CR が次の設定になっていることを確認します。apiVersion: k8s.keycloak.org/v2alpha1 kind: Keycloak metadata: name: keycloak spec: hostname: hostname: ${CLIENT_DOMAIN} 1
- 1
- Red Hat build of Keycloak に接続するために使用するドメインクライアント
リクエスト転送を確実に機能させるために、Red Hat build of Keycloak CR を編集して、クライアントが Red Hat build of Keycloak インスタンスにアクセスするときに経由するホスト名を指定します。このホスト名は、Route53 の設定で使用される
$CLIENT_DOMAIN
である必要があります。ヘルスチェックルートを作成します。
コマンド:
cat <<EOF | oc apply -n $NAMESPACE -f - 1 apiVersion: route.openshift.io/v1 kind: Route metadata: name: aws-health-route spec: host: $DOMAIN 2 port: targetPort: https tls: insecureEdgeTerminationPolicy: Redirect termination: passthrough to: kind: Service name: keycloak-service weight: 100 wildcardPolicy: None EOF