第4章 Hosted Control Plane のデプロイ
4.1. AWS への Hosted Control Plane のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
ホステッドクラスター は、API エンドポイントとコントロールプレーンが管理クラスターでホストされている OpenShift Container Platform クラスターです。ホステッドクラスターには、コントロールプレーンとそれに対応するデータプレーンが含まれます。オンプレミスで Hosted Control Plane を設定するには、管理クラスターに multicluster engine for Kubernetes Operator をインストールする必要があります。hypershift-addon
マネージドクラスターアドオンを使用して既存のマネージドクラスターに HyperShift Operator をデプロイすると、そのクラスターを管理クラスターとして有効にして、ホステッドクラスターの作成を開始できます。hypershift-addon
マネージドクラスターアドオンは、local-cluster
マネージドクラスターでデフォルトで有効になっています。
ホステッドクラスターは、multicluster engine Operator のコンソールか、Hosted Control Plane のコマンドラインインターフェイス (CLI) である hcp
を使用して作成できます。ホステッドクラスターは、マネージドクラスターとして自動的にインポートされます。ただし、この multicluster engine Operator への自動インポート機能を無効にする こともできます。
4.1.1. AWS への Hosted Control Plane のデプロイの準備 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) に Hosted Control Plane をデプロイする準備をする際には、次の情報を考慮してください。
- 各ホステッドクラスターに、クラスター全体で一意の名前が必要です。multicluster engine Operator によってホステッドクラスターを管理するには、ホステッドクラスター名を既存のマネージドクラスターと同じにすることはできません。
-
ホステッドクラスター名として
clusters
を使用しないでください。 - 管理クラスターとワーカーは、Hosted Control Plane の同じプラットフォーム上で実行してください。
- ホステッドクラスターは、multicluster engine Operator のマネージドクラスターの namespace には作成できません。
4.1.1.1. 管理クラスターを設定するための前提条件 リンクのコピーリンクがクリップボードにコピーされました!
管理クラスターを設定するには、次の前提条件を満たす必要があります。
- OpenShift Container Platform クラスターに multicluster engine for Kubernetes Operator 2.5 以降がインストールされている。multicluster engine Operator は、Red Hat Advanced Cluster Management (RHACM) をインストールすると、自動的にインストールされます。multicluster engine Operator は、OpenShift Container Platform OperatorHub から Operator として RHACM なしでインストールすることもできます。
multicluster engine Operator のマネージド OpenShift Container Platform クラスターが少なくとも 1 つある。multicluster engine Operator バージョン 2.5 以降では、
local-cluster
が自動的にインポートされます。次のコマンドを実行して、ハブクラスターの状態を確認できます。oc get managedclusters local-cluster
$ oc get managedclusters local-cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
aws
コマンドラインインターフェイス (CLI) がインストールされている。 -
Hosted Control Plane の CLI である
hcp
がインストールされている。
4.1.2. Amazon Web Services S3 バケットと S3 OIDC シークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) でホステッドクラスターを作成して管理するには、S3 バケットと S3 OIDC シークレットを作成する必要があります。
手順
次のコマンドを実行して、クラスターの OIDC 検出ドキュメントをホストするためのパブリックアクセスを持つ S3 バケットを作成します。
aws s3api create-bucket --bucket <bucket_name> \ --create-bucket-configuration LocationConstraint=<region> \ --region <region>
$ aws s3api create-bucket --bucket <bucket_name> \
1 --create-bucket-configuration LocationConstraint=<region> \
2 --region <region>
3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow aws s3api delete-public-access-block --bucket <bucket_name>
$ aws s3api delete-public-access-block --bucket <bucket_name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<bucket_name>
は、作成する S3 バケットの名前に置き換えます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<bucket_name>
は、作成する S3 バケットの名前に置き換えます。
aws s3api put-bucket-policy --bucket <bucket_name> \ --policy file://policy.json
$ aws s3api put-bucket-policy --bucket <bucket_name> \
1 --policy file://policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<bucket_name>
は、作成する S3 バケットの名前に置き換えます。
注記Mac コンピューターを使用している場合は、ポリシーを機能させるためにバケット名をエクスポートする必要があります。
-
HyperShift Operator 用に
hypershift-operator-oidc-provider-s3-credentials
という名前の OIDC S3 シークレットを作成します。 -
シークレットを
local-cluster
namespace に保存します。 次の表を参照して、シークレットに次のフィールドが含まれていることを確認します。
Expand 表4.1 AWS シークレットの必須フィールド フィールド名 説明 bucket
ホステッドクラスターの OIDC 検出ドキュメントをホストするためのパブリックアクセスを備えた S3 バケットが含まれています。
credentials
バケットにアクセスできる
default
プロファイルの認証情報を含むファイルへの参照。デフォルトでは、HyperShift はdefault
プロファイルのみを使用してバケット
を操作します。region
S3 バケットのリージョンを指定します。
AWS シークレットを作成するには、次のコマンドを実行します。
oc create secret generic <secret_name> \ --from-file=credentials=<path>/.aws/credentials \ --from-literal=bucket=<s3_bucket> \ --from-literal=region=<region> \ -n local-cluster
$ oc create secret generic <secret_name> \ --from-file=credentials=<path>/.aws/credentials \ --from-literal=bucket=<s3_bucket> \ --from-literal=region=<region> \ -n local-cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記シークレットの障害復旧バックアップは自動的に有効になりません。障害復旧用に
hypershift-operator-oidc-provider-s3-credentials
シークレットのバックアップを有効にするラベルを追加するには、次のコマンドを実行します。oc label secret hypershift-operator-oidc-provider-s3-credentials \ -n local-cluster cluster.open-cluster-management.io/backup=true
$ oc label secret hypershift-operator-oidc-provider-s3-credentials \ -n local-cluster cluster.open-cluster-management.io/backup=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.3. ホステッドクラスター用のルーティング可能なパブリックゾーンの作成 リンクのコピーリンクがクリップボードにコピーされました!
ホステッドクラスター内のアプリケーションにアクセスするには、ルーティング可能なパブリックゾーンを設定する必要があります。パブリックゾーンが存在する場合は、この手順を省略します。省略しないと、パブリックゾーンによって既存の機能に影響が生じます。
手順
DNS レコードのルーティング可能なパブリックゾーンを作成するには、次のコマンドを入力します。
aws route53 create-hosted-zone \ --name <basedomain> \ --caller-reference $(whoami)-$(date --rfc-3339=date)
$ aws route53 create-hosted-zone \ --name <basedomain> \
1 --caller-reference $(whoami)-$(date --rfc-3339=date)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<basedomain>
は、ベースドメイン (例:www.example.com
) に置き換えます。
4.1.4. AWS IAM ロールと STS 認証情報の作成 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) でホステッドクラスターを作成する前に、AWS IAM ロールと STS 認証情報を作成する必要があります。
手順
次のコマンドを実行して、ユーザーの Amazon Resource Name (ARN) を取得します。
aws sts get-caller-identity --query "Arn" --output text
$ aws sts get-caller-identity --query "Arn" --output text
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
arn:aws:iam::1234567890:user/<aws_username>
arn:aws:iam::1234567890:user/<aws_username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力は、次のステップで
<arn>
の値として使用します。ロールの信頼関係設定を含む JSON ファイルを作成します。以下の例を参照してください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<arn>
は、前のステップでメモしたユーザーの ARN に置き換えます。
次のコマンドを実行して、Identity and Access Management (IAM) ロールを作成します。
aws iam create-role \ --role-name <name> \ --assume-role-policy-document file://<file_name>.json \ --query "Role.Arn"
$ aws iam create-role \ --role-name <name> \
1 --assume-role-policy-document file://<file_name>.json \
2 --query "Role.Arn"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
arn:aws:iam::820196288204:role/myrole
arn:aws:iam::820196288204:role/myrole
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ロールの次の権限ポリシーを含む
policy.json
という名前の JSON ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
policy.json
ファイルをロールに割り当てます。aws iam put-role-policy \ --role-name <role_name> \ --policy-name <policy_name> \ --policy-document file://policy.json
$ aws iam put-role-policy \ --role-name <role_name> \
1 --policy-name <policy_name> \
2 --policy-document file://policy.json
3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
sts-creds.json
という名前の JSON ファイル内の STS 認証情報を取得します。aws sts get-session-token --output json > sts-creds.json
$ aws sts get-session-token --output json > sts-creds.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sts-creds.json
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.5. Hosted Control Plane 用の AWS PrivateLink の有効化 リンクのコピーリンクがクリップボードにコピーされました!
PrivateLink を使用して Amazon Web Services (AWS) で Hosted Control Plane をプロビジョニングするには、Hosted Control Plane 用の AWS PrivateLink を有効にします。
手順
-
HyperShift Operator の AWS 認証情報シークレットを作成し、
hypershift-operator-private-link-credentials
という名前を付けます。このシークレットは、管理クラスターとして使用されているマネージドクラスターの namespace であるマネージドクラスター namespace に配置する必要があります。local-cluster
を使用した場合は、local-cluster
namespace にシークレットを作成します。 - シークレットに必要なフィールドが含まれることを確認するには、以下の表を参照してください。
フィールド名 | 説明 | 任意または必須 |
---|---|---|
| Private Link で使用するリージョン | 必須 |
| 認証情報アクセスキー ID。 | 必須 |
| 認証情報アクセスキーのシークレット。 | 必須 |
AWS シークレットを作成するには、次のコマンドを実行します。
oc create secret generic <secret_name> \ --from-literal=aws-access-key-id=<aws_access_key_id> \ --from-literal=aws-secret-access-key=<aws_secret_access_key> \ --from-literal=region=<region> -n local-cluster
$ oc create secret generic <secret_name> \
--from-literal=aws-access-key-id=<aws_access_key_id> \
--from-literal=aws-secret-access-key=<aws_secret_access_key> \
--from-literal=region=<region> -n local-cluster
シークレットの障害復旧バックアップは自動的に有効になりません。以下のコマンドを実行して、障害復旧用に hypershift-operator-private-link-credentials
シークレットのバックアップを有効にするラベルを追加します。
oc label secret hypershift-operator-private-link-credentials \ -n local-cluster \ cluster.open-cluster-management.io/backup=""
$ oc label secret hypershift-operator-private-link-credentials \
-n local-cluster \
cluster.open-cluster-management.io/backup=""
4.1.6. AWS 上の Hosted Control Plane 用の外部 DNS を有効にする リンクのコピーリンクがクリップボードにコピーされました!
Hosted Control Plane では、コントロールプレーンとデータプレーンが分離されています。DNS は、次の 2 つの独立した領域で設定できます。
-
ホステッドクラスター (
*.apps.service-consumer-domain.com
などのドメイン) 内のワークロードの Ingress。 -
サービスプロバイダーのドメイン
*.service-provider-domain.com
を介した API または OAuth エンドポイントなど、管理クラスター内のサービスエンドポイントの Ingress。
hostedCluster.spec.dns
の入力は、ホステッドクラスター内のワークロードの Ingress を管理します。hostedCluster.spec.services.servicePublishingStrategy.route.hostname
の入力は、管理クラスター内のサービスエンドポイントの Ingress を決定します。
外部 DNS は、LoadBalancer
または Route
の公開タイプを指定し、その公開タイプのホスト名を提供するホステッドクラスター Services
の名前レコードを作成します。Private
または PublicAndPrivate
エンドポイントアクセスタイプを持つホステッドクラスターの場合、APIServer
サービスと OAuth
サービスのみがホスト名をサポートします。Private
ホステッドクラスターの場合、DNS レコードが VPC 内の Virtual Private Cloud (VPC) エンドポイントのプライベート IP アドレスに解決されます。
Hosted Control Plane は、次のサービスを公開します。
-
APIServer
-
OIDC
これらのサービスは、HostedCluster
仕様の servicePublishingStrategy
フィールドを使用して公開できます。デフォルトでは、servicePublishingStrategy
の LoadBalancer
および Route
タイプの場合、次のいずれかの方法でサービスを公開できます。
-
LoadBalancer
タイプのService
のステータスにあるロードバランサーのホスト名を使用する方法 -
Route
リソースのstatus.host
フィールドを使用する方法
ただし、マネージドサービスのコンテキストで Hosted Control Plane をデプロイすると、これらの方法によって、基盤となる管理クラスターの Ingress サブドメインが公開され、管理クラスターのライフサイクルと障害復旧のオプションが制限される可能性があります。
DNS 間接化が LoadBalancer
および Route
公開タイプに階層化されている場合、マネージドサービスオペレーターは、サービスレベルドメインを使用してすべてのパブリックホステッドクラスターサービスを公開できます。このアーキテクチャーでは、DNS 名を新しい LoadBalancer
または Route
に再マッピングできますが、管理クラスターの Ingress ドメインは公開されません。Hosted Control Plane は、外部 DNS を使用して間接層を実現します。
管理クラスターの hypershift
namespace に HyperShift Operator と一緒に external-dns
をデプロイできます。外部 DNS は、external-dns.alpha.kubernetes.io
/hostname アノテーションを持つ Services
または Routes
を監視します。このアノテーションは、A レコードなどの Service
、または CNAME レコードなどの Route
を参照する DNS レコードを作成するために使用されます。
外部 DNS はクラウド環境でのみ使用できます。その他の環境では、DNS とサービスを手動で設定する必要があります。
外部 DNS の詳細は、外部 DNS を参照してください。
4.1.6.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) で Hosted Control Plane の外部 DNS を設定する前に、次の前提条件を満たす必要があります。
- 外部パブリックドメインを作成した。
- AWS Route53 管理コンソールにアクセスできる。
- Hosted Control Plane 用に AWS PrivateLink を有効にした。
4.1.6.2. Hosted Control Plane の外部 DNS の設定 リンクのコピーリンクがクリップボードにコピーされました!
Hosted Control Plane は、外部 DNS またはサービスレベル DNS を使用してプロビジョニングできます。
-
HyperShift Operator 用の Amazon Web Services (AWS) 認証情報シークレットを作成し、
local-cluster
namespace でhypershift-operator-external-dns-credentials
という名前を付けます。 次の表を参照して、シークレットに必須フィールドが含まれていることを確認してください。
Expand 表4.3 AWS シークレットの必須フィールド フィールド名 説明 任意または必須 provider
サービスレベル DNS ゾーンを管理する DNS プロバイダー。
必須
domain-filter
サービスレベルドメイン。
必須
credentials
すべての外部 DNS タイプをサポートする認証情報ファイル。
AWS キーを使用する場合はオプション
aws-access-key-id
認証情報アクセスキー ID。
AWS DNS サービスを使用する場合はオプション
aws-secret-access-key
認証情報アクセスキーのシークレット。
AWS DNS サービスを使用する場合はオプション
AWS シークレットを作成するには、次のコマンドを実行します。
oc create secret generic <secret_name> \ --from-literal=provider=aws \ --from-literal=domain-filter=<domain_name> \ --from-file=credentials=<path_to_aws_credentials_file> -n local-cluster
$ oc create secret generic <secret_name> \ --from-literal=provider=aws \ --from-literal=domain-filter=<domain_name> \ --from-file=credentials=<path_to_aws_credentials_file> -n local-cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記シークレットの障害復旧バックアップは自動的に有効になりません。障害復旧のためにシークレットをバックアップするには、次のコマンドを入力して
hypershift-operator-external-dns-credentials
を追加します。oc label secret hypershift-operator-external-dns-credentials \ -n local-cluster \ cluster.open-cluster-management.io/backup=""
$ oc label secret hypershift-operator-external-dns-credentials \ -n local-cluster \ cluster.open-cluster-management.io/backup=""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.6.3. パブリック DNS ホストゾーンの作成 リンクのコピーリンクがクリップボードにコピーされました!
パブリック DNS ホストゾーンは、パブリックホステッドクラスターを作成するために、External DNS Operator によって使用されます。
外部 DNS ドメインフィルターとして使用するパブリック DNS ホストゾーンを作成できます。AWS Route 53 管理コンソールで次の手順を実行します。
手順
- Route 53 管理コンソールで、Create hosted zone をクリックします。
- Hosted zone configuration ページでドメイン名を入力し、タイプとして Public hosted zone が選択されていることを確認し、Create hosted zone をクリックします。
- ゾーンが作成されたら、Records タブの Value/Route traffic to 列の値をメモします。
- メインドメインで、DNS 要求を委任ゾーンにリダイレクトするための NS レコードを作成します。Value フィールドに、前の手順でメモした値を入力します。
- Create records をクリックします。
次の例のように、新しいサブゾーンにテストエントリーを作成し、
dig
コマンドでテストして、DNS ホストゾーンが機能していることを確認します。dig +short test.user-dest-public.aws.kerberos.com
$ dig +short test.user-dest-public.aws.kerberos.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
192.168.1.1
192.168.1.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow LoadBalancer
およびRoute
サービスのホスト名を設定するホステッドクラスターを作成するには、次のコマンドを入力します。hcp create cluster aws --name=<hosted_cluster_name> \ --endpoint-access=PublicAndPrivate \ --external-dns-domain=<public_hosted_zone> ...
$ hcp create cluster aws --name=<hosted_cluster_name> \ --endpoint-access=PublicAndPrivate \ --external-dns-domain=<public_hosted_zone> ...
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<public_hosted_zone>
は、作成したパブリックホストゾーンに置き換えます。
ホステッドクラスターの
services
ブロックの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Control Plane Operator は、Services
と Routes
リソースを作成し、external-dns.alpha.kubernetes.io/hostname
のアノテーションを付けます。Services
と Routes
の場合、Control Plane Operator は、サービスエンドポイントの servicePublishingStrategy
フィールドの hostname
パラメーターの値を使用します。DNS レコードを作成するには、external-dns
デプロイメントなどのメカニズムを使用できます。
サービスレベルの DNS 間接化をパブリックサービスにのみ設定できます。プライベートサービスは hypershift.local
プライベートゾーンを使用するため、hostname
を設定できません。
次の表は、サービスとエンドポイントの組み合わせに対して hostname
を設定することが有効な場合を示しています。
サービス | Public | PublicAndPrivate | Private |
---|---|---|---|
| Y | Y | N |
| Y | Y | N |
| Y | N | N |
| Y | N | N |
4.1.6.4. AWS 上で外部 DNS を使用してホステッドクラスターを作成する リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) で PublicAndPrivate
または Public
公開ストラテジーを使用してホステッドクラスターを作成するには、管理クラスターで次のアーティファクトが設定されている必要があります。
- パブリック DNS ホストゾーン
- External DNS Operator
- HyperShift Operator
ホステッドクラスターは、hcp
コマンドラインインターフェイス (CLI) を使用してデプロイできます。
手順
管理クラスターにアクセスするには、次のコマンドを入力します。
export KUBECONFIG=<path_to_management_cluster_kubeconfig>
$ export KUBECONFIG=<path_to_management_cluster_kubeconfig>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、External DNS Operator が実行されていることを確認します。
oc get pod -n hypershift -lapp=external-dns
$ oc get pod -n hypershift -lapp=external-dns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE external-dns-7c89788c69-rn8gp 1/1 Running 0 40s
NAME READY STATUS RESTARTS AGE external-dns-7c89788c69-rn8gp 1/1 Running 0 40s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 外部 DNS を使用してホステッドクラスターを作成するには、次のコマンドを入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Amazon Resource Name (ARN) を指定します (例:
arn:aws:iam::820196288204:role/myrole
)。 - 2
- インスタンスタイプを指定します (例:
m6i.xlarge)
。 - 3
- AWS リージョンを指定します (例:
us-east-1
)。 - 4
- ホステッドクラスター名を指定します (例:
my-external-aws)
。 - 5
- サービスコンシューマーが所有するパブリックホストゾーンを指定します (例:
service-consumer-domain.com
)。 - 6
- ノードのレプリカ数を指定します (例:
2)
。 - 7
- プルシークレットファイルへのパスを指定します。
- 8
- 使用するサポート対象の OpenShift Container Platform バージョンを指定します (例:
4.18.0-multi
)。 - 9
- サービスプロバイダーが所有するパブリックホストゾーンを指定します (例:
service-provider-domain.com
)。 - 10
PublicAndPrivate
として設定します。外部 DNS は、Public
またはPublicAndPrivate
設定でのみ使用できます。- 11
- AWS STS 認証情報ファイルへのパスを指定します (例:
/home/user/sts-creds/sts-creds.json
)。
4.1.7. AWS 上でのホステッドクラスターの作成 リンクのコピーリンクがクリップボードにコピーされました!
hcp
コマンドラインインターフェイス (CLI) を使用して、Amazon Web Services (AWS) 上にホステッドクラスターを作成できます。
Amazon Web Services (AWS) 上の Hosted Control Plane では、デフォルトで AMD64 ホステッドクラスターを使用します。ただし、Hosted Control Plane を ARM64 ホステッドクラスターで実行することもできます。詳細は、「ARM64 アーキテクチャーでのホステッドクラスターの実行」を参照してください。
ノードプールとホステッドクラスターの互換性のある組み合わせは、次の表を参照してください。
ホステッドクラスター | ノードプール |
---|---|
AMD64 | AMD64 または ARM64 |
ARM64 | ARM64 または AMD64 |
前提条件
-
Hosted Control Plane の CLI である
hcp
を設定した。 -
local-cluster
マネージドクラスターを管理クラスターとして有効にした。 - AWS Identity and Access Management (IAM) ロールと AWS Security Token Service (STS) 認証情報を作成した。
手順
AWS 上にホステッドクラスターを作成するには、次のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ホステッドクラスターの名前を指定します (例:
example
)。 - 2
- インフラストラクチャー名を指定します。
<hosted_cluster_name>
と<infra_id>
には同じ値を指定する必要があります。そうしないと、multicluster engine for Kubernetes Operator のコンソールに、クラスターが正しく表示されない可能性があります。 - 3
- ベースドメインを指定します (例:
example.com
)。 - 4
- AWS STS 認証情報ファイルへのパスを指定します (例:
/home/user/sts-creds/sts-creds.json
)。 - 5
- プルシークレットへのパスを指定します (例:
/user/name/pullsecret
)。 - 6
- AWS リージョン名を指定します (例:
us-east-1
)。 - 7
- ノードプールのレプリカ数を指定します (例:
3
)。 - 8
- デフォルトでは、
HostedCluster
とNodePool
のすべてのカスタムリソースがclusters
namespace に作成されます。--namespace <namespace>
パラメーターを使用すると、特定の namespace にHostedCluster
およびNodePool
カスタムリソースを作成できます。 - 9
- Amazon Resource Name (ARN) を指定します (例:
arn:aws:iam::820196288204:role/myrole
)。 - 10
- EC2 インスタンスを共有テナントハードウェア上で実行するか、シングルテナントハードウェア上で実行するかを指定する場合は、このフィールドを含めます。
--render-into
フラグを含めると、Kubernetes リソースが、このフィールドで指定した YAML ファイルにレンダリングされます。この場合、次のステップに進み、YAML ファイルを編集します。
前のコマンドに
--render-into
フラグを含めた場合は、指定した YAML ファイルを編集します。YAML ファイルのNodePool
仕様を編集して、EC2 インスタンスを共有ハードウェア上で実行するか、シングルテナントハードウェア上で実行するかを指定します。次に例を示します。サンプル YAML ファイル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ホステッドクラスターのステータスを確認し、
AVAILABLE
の値がTrue
であることを確認します。以下のコマンドを実行します。oc get hostedclusters -n <hosted_cluster_namespace>
$ oc get hostedclusters -n <hosted_cluster_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ノードプールのリストを取得します。
oc get nodepools --namespace <hosted_cluster_namespace>
$ oc get nodepools --namespace <hosted_cluster_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.7.1. AWS でのホステッドクラスターへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
kubeconfig
ファイルと kubeadmin
認証情報をリソースから直接取得することで、ホステッドクラスターにアクセスできます。
ホストされたクラスターのアクセスシークレットを理解している。ホステッドクラスター namespace にはホストされたクラスターリソースが含まれており、ホステッドコントロールプレーン namespace ではホステッドコントロールプレーンが実行されます。シークレット名の形式は次のとおりです。
-
kubeconfig
シークレット:<hosted-cluster-namespace>-<name>-admin-kubeconfig
たとえば、clusters-hypershift-demo-admin-kubeconfig
です。 -
kubeadmin
パスワードシークレット:<hosted-cluster-namespace>-<name>-kubeadmin-password
.たとえば、clusters-hypershift-demo-kubeadmin-password
です。
手順
kubeconfig
シークレットには Base64 でエンコードされたkubeconfig
フィールドが含まれており、これをデコードしてファイルに保存し、次のコマンドで使用できます。oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kubeadmin
パスワードシークレットも Base64 でエンコードされます。これをデコードし、そのパスワードを使用して、ホステッドクラスターの API サーバーまたはコンソールにログインできます。
4.1.7.2. kubeadmin 認証情報を使用して AWS 上のホステッドクラスターにアクセスする リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) にホステッドクラスターを作成した後、kubeconfig
ファイル、アクセスシークレット、および kubeadmin
認証情報を取得して、ホステッドクラスターにアクセスできます。
ホステッドクラスターのリソースとアクセスシークレットは、ホステッドクラスターの namespace に格納されます。Hosted Control Plane は、Hosted Control Plane の namespace で実行されます。
シークレット名の形式は次のとおりです。
-
kubeconfig
シークレット:<hosted_cluster_namespace>-<name>-admin-kubeconfig
。たとえば、clusters-hypershift-demo-admin-kubeconfig
です。 -
kubeadmin
パスワードシークレット:<hosted_cluster_namespace>-<name>-kubeadmin-password
。たとえば、clusters-hypershift-demo-kubeadmin-password
です。
kubeadmin
パスワードシークレットは、Base64 でエンコードされています。kubeconfig
シークレットには、Base64 でエンコードされた kubeconfig
設定が含まれています。Base64 でエンコードされた kubeconfig
設定をデコードし、<hosted_cluster_name>.kubeconfig
ファイルに保存する必要があります。
手順
デコードされた
kubeconfig
設定を含む<hosted_cluster_name>.kubeconfig
ファイルを使用して、ホステッドクラスターにアクセスします。以下のコマンドを入力します。oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow API サーバーまたはホステッドクラスターのコンソールにログインするには、
kubeadmin
パスワードシークレットをデコードする必要があります。
4.1.7.3. hcp CLI を使用して AWS 上のホステッドクラスターにアクセスする リンクのコピーリンクがクリップボードにコピーされました!
hcp
コマンドラインインターフェイス (CLI) を使用して、ホステッドクラスターにアクセスできます。
手順
次のコマンドを入力して、
kubeconfig
ファイルを生成します。hcp create kubeconfig --namespace <hosted_cluster_namespace> \ --name <hosted_cluster_name> > <hosted_cluster_name>.kubeconfig
$ hcp create kubeconfig --namespace <hosted_cluster_namespace> \ --name <hosted_cluster_name> > <hosted_cluster_name>.kubeconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kubeconfig
ファイルを保存したら、次のコマンドを入力してホステッドクラスターにアクセスします。oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.8. ホストされたクラスターでのカスタム API サーバー証明書の設定 リンクのコピーリンクがクリップボードにコピーされました!
API サーバーのカスタム証明書を設定するには、HostedCluster
設定の spec.configuration.apiServer
セクションに証明書の詳細を指定します。
カスタム証明書は、Day-1 または day-2 操作のいずれかで設定できます。ただし、サービス公開ストラテジーは、ホステッドクラスターの作成時に設定した後に不変であるため、設定する予定の Kubernetes API サーバーのホスト名を知っている必要があります。
前提条件
管理クラスターにカスタム証明書が含まれる Kubernetes シークレットを作成している。シークレットには次のキーが含まれます。
-
tls.crt
: 証明書 -
tls.key
: 秘密鍵
-
-
HostedCluster
設定にロードバランサーを使用するサービス公開ストラテジーが含まれている場合は、証明書の Subject Alternative Names (SAN)が内部 API エンドポイント(api-int
)と競合しないようにしてください。内部 API エンドポイントは、プラットフォームによって自動的に作成され、管理されます。カスタム証明書と内部 API エンドポイントの両方で同じホスト名を使用すると、ルーティングの競合が発生する可能性があります。このルールの唯一の例外は、Private
またはPublicAndPrivate
設定で AWS をプロバイダーとして使用する場合です。この場合、SAN 競合はプラットフォームによって管理されます。 - 証明書は外部 API エンドポイントに対して有効である必要があります。
- 証明書の有効期間は、クラスターの予想されるライフサイクルと一致します。
手順
次のコマンドを入力して、カスタム証明書でシークレットを作成します。
oc create secret tls sample-hosted-kas-custom-cert \ --cert=path/to/cert.crt \ --key=path/to/key.key \ -n <hosted_cluster_namespace>
$ oc create secret tls sample-hosted-kas-custom-cert \ --cert=path/to/cert.crt \ --key=path/to/key.key \ -n <hosted_cluster_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例のように、カスタム証明書の詳細を使用して
HostedCluster
設定を更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
HostedCluster
設定に変更を適用します。oc apply -f <hosted_cluster_config>.yaml
$ oc apply -f <hosted_cluster_config>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
- API サーバー Pod をチェックして、新しい証明書がマウントされていることを確認します。
- カスタムドメイン名を使用して、API サーバーへの接続をテストします。
-
ブラウザーで証明書の詳細を確認するか、
openssl
などのツールを使用して確認します。
4.1.9. AWS 上の複数のゾーンにホステッドクラスターを作成する リンクのコピーリンクがクリップボードにコピーされました!
hcp
コマンドラインインターフェイス (CLI) を使用して、Amazon Web Services (AWS) 上の複数のゾーンにホステッドクラスターを作成できます。
前提条件
- AWS Identity and Access Management (IAM) ロールと AWS Security Token Service (STS) 認証情報を作成した。
手順
次のコマンドを実行して、AWS 上の複数のゾーンにホステッドクラスターを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ホステッドクラスターの名前を指定します (例:
example
)。 - 2
- ノードプールのレプリカ数を指定します (例:
2
)。 - 3
- ベースドメインを指定します (例:
example.com
)。 - 4
- プルシークレットへのパスを指定します (例:
/user/name/pullsecret
)。 - 5
- Amazon Resource Name (ARN) を指定します (例:
arn:aws:iam::820196288204:role/myrole
)。 - 6
- AWS リージョン名を指定します (例:
us-east-1
)。 - 7
- AWS リージョン内のアベイラビリティーゾーンを指定します (例:
us-east-1a
、us-east-1b
)。 - 8
- AWS STS 認証情報ファイルへのパスを指定します (例:
/home/user/sts-creds/sts-creds.json
)。
指定したゾーンごとに、次のインフラストラクチャーが作成されます。
- パブリックサブネット
- プライベートサブネット
- NAT ゲートウェイ
- プライベートルートテーブル
パブリックルートテーブルはパブリックサブネット間で共有されます。
ゾーンごとに 1 つの NodePool
リソースが作成されます。ノードプール名の末尾にはゾーン名が付けられます。ゾーンのプライベートサブネットは spec.platform.aws.subnet.id
に設定されます。
4.1.9.1. AWS STS 認証情報を指定してホステッドクラスターを作成する リンクのコピーリンクがクリップボードにコピーされました!
hcp create cluster aws
コマンドを使用してホステッドクラスターを作成する場合は、ホステッドクラスターのインフラストラクチャーリソースを作成する権限を持つ Amazon Web Services (AWS) アカウントの認証情報を指定する必要があります。
インフラストラクチャーリソースの例としては、次のものがあります。
- Virtual Private Cloud (VPC)
- サブネット
- ネットワークアドレス変換 (NAT) ゲートウェイ
次のいずれかの方法で AWS 認証情報を指定できます。
- AWS Security Token Service (STS) 認証情報
- multicluster engine Operator からの AWS クラウドプロバイダーのシークレット
手順
AWS STS 認証情報を指定して AWS 上にホステッドクラスターを作成するには、次のコマンドを入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ホステッドクラスターの名前を指定します (例:
example
)。 - 2
- ノードプールのレプリカ数を指定します (例:
2
)。 - 3
- ベースドメインを指定します (例:
example.com
)。 - 4
- プルシークレットへのパスを指定します (例:
/user/name/pullsecret
)。 - 5
- AWS STS 認証情報ファイルへのパスを指定します (例:
/home/user/sts-creds/sts-creds.json
)。 - 6
- AWS リージョン名を指定します (例:
us-east-1
)。 - 7
- Amazon Resource Name (ARN) を指定します (例:
arn:aws:iam::820196288204:role/myrole
)。
4.1.10. ARM64 アーキテクチャーでのホステッドクラスターの実行 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) 上の Hosted Control Plane では、デフォルトで AMD64 ホステッドクラスターを使用します。ただし、Hosted Control Plane を ARM64 ホステッドクラスターで実行することもできます。
ノードプールとホステッドクラスターの互換性のある組み合わせは、次の表を参照してください。
ホステッドクラスター | ノードプール |
---|---|
AMD64 | AMD64 または ARM64 |
ARM64 | ARM64 または AMD64 |
4.1.10.1. ARM64 OpenShift Container Platform クラスターにホステッドクラスターを作成する リンクのコピーリンクがクリップボードにコピーされました!
デフォルトのリリースイメージをマルチアーキテクチャーリリースイメージでオーバーライドすることで、Amazon Web Services (AWS) の ARM64 OpenShift Container Platform クラスターでホステッドクラスターを実行できます。
マルチアーキテクチャーリリースイメージを使用しない場合、ホステッドクラスターでマルチアーキテクチャーリリースイメージを使用するか、リリースイメージに基づいて NodePool
カスタムリソースを更新するまで、ノードプール内のコンピュートノードが作成されず、ノードプールのリコンシリエーションが停止します。
前提条件
- AWS にインストールされた、64 ビット ARM インフラストラクチャーの OpenShift Container Platform クラスターがある。詳細は、Create an OpenShift Container Platform Cluster: AWS (ARM) を参照してください。
- AWS Identity and Access Management (IAM) ロールと AWS Security Token Service (STS) 認証情報を作成する。詳細は、「AWS IAM ロールと STS 認証情報の作成」を参照してください。
手順
次のコマンドを入力して、ARM64 OpenShift Container Platform クラスターにホステッドクラスターを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ホステッドクラスターの名前を指定します (例:
example
)。 - 2
- ノードプールのレプリカ数を指定します (例:
3
)。 - 3
- ベースドメインを指定します (例:
example.com
)。 - 4
- プルシークレットへのパスを指定します (例:
/user/name/pullsecret
)。 - 5
- AWS STS 認証情報ファイルへのパスを指定します (例:
/home/user/sts-creds/sts-creds.json
)。 - 6
- AWS リージョン名を指定します (例:
us-east-1
)。 - 7
- 使用するサポート対象の OpenShift Container Platform バージョンを指定します (例:
4.18.0-multi
)。非接続環境を使用している場合は、<ocp_release_image>
をダイジェストイメージに置き換えます。OpenShift Container Platform リリースイメージダイジェストを抽出するには、「OpenShift Container Platform リリースイメージダイジェストの抽出」を参照してください。 - 8
- Amazon Resource Name (ARN) を指定します (例:
arn:aws:iam::820196288204:role/myrole
)。
4.1.10.2. AWS ホステッドクラスターに ARM または AMD の NodePool オブジェクトを作成する リンクのコピーリンクがクリップボードにコピーされました!
同じ Hosted Control Plane から、64 ビット ARM および AMD の NodePool
オブジェクトであるアプリケーションワークロードをスケジュールできます。NodePool
仕様で arch
フィールドを定義し、NodePool
オブジェクトに必要なプロセッサーアーキテクチャーを設定できます。arch
フィールドの有効な値は次のとおりです。
-
arm64
-
amd64
前提条件
-
HostedCluster
カスタムリソースで使用するマルチアーキテクチャーイメージがある。マルチアーキテクチャーのナイトリーイメージ を利用できます。
手順
次のコマンドを実行して、AWS でホステッドクラスターに ARM または AMD の
NodePool
オブジェクトを追加します。hcp create nodepool aws \ --cluster-name <hosted_cluster_name> \ --name <node_pool_name> \ --node-count <node_pool_replica_count> \ --arch <architecture>
$ hcp create nodepool aws \ --cluster-name <hosted_cluster_name> \
1 --name <node_pool_name> \
2 --node-count <node_pool_replica_count> \
3 --arch <architecture>
4 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.11. AWS でのプライベートホステッドクラスターの作成 リンクのコピーリンクがクリップボードにコピーされました!
local-cluster
をホスティングクラスターとして有効にした後、Amazon Web Services (AWS) にホステッドクラスターまたはプライベートホステッドクラスターをデプロイできます。
デフォルトでは、ホステッドクラスターはパブリック DNS と管理クラスターのデフォルトルーターを介してパブリックにアクセスできます。
AWS 上のプライベートクラスターの場合、ホステッドクラスターとの通信は、すべて AWS PrivateLink を介して行われます。
前提条件
- AWS PrivateLink を有効にした。詳細は、「AWS PrivateLink の有効化」を参照してください。
- AWS Identity and Access Management (IAM) ロールと AWS Security Token Service (STS) 認証情報を作成した。詳細は、「AWS IAM ロールと STS 認証情報の作成」および「Identity and Access Management (IAM) 権限」を参照してください。
- AWS に踏み台インスタンス を設定した。
手順
次のコマンドを入力して、AWS 上にプライベートホステッドクラスターを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ホステッドクラスターの名前を指定します (例:
example
)。 - 2
- ノードプールのレプリカ数を指定します (例:
3
)。 - 3
- ベースドメインを指定します (例:
example.com
)。 - 4
- プルシークレットへのパスを指定します (例:
/user/name/pullsecret
)。 - 5
- AWS STS 認証情報ファイルへのパスを指定します (例:
/home/user/sts-creds/sts-creds.json
)。 - 6
- AWS リージョン名を指定します (例:
us-east-1
)。 - 7
- クラスターがパブリックかプライベートかを定義します。
- 8
- Amazon Resource Name (ARN) を指定します (例:
arn:aws:iam::820196288204:role/myrole
)。ARN ロールの詳細は、「Identity and Access Management (IAM) 権限」を参照してください。
ホステッドクラスターの次の API エンドポイントは、プライベート DNS ゾーンを通じてアクセスできます。
-
api.<hosted_cluster_name>.hypershift.local
-
*.apps.<hosted_cluster_name>.hypershift.local