第2章 ネットワーク Operator
2.1. AWS Load Balancer Operator
AWS Load Balancer Operator は、Red Hat がサポートする Operator です。ユーザーは、これを SRE が管理する Red Hat OpenShift Service on AWS (ROSA) クラスターに必要に応じてインストールできます。AWS Load Balancer Operator は、ROSA クラスターで実行されているアプリケーションに AWS Elastic Load Balancing v2 (ELBv2) サービスをプロビジョニングする AWS Load Balancer Controller のライフサイクルを管理します。
2.1.1. Cloud Credential Operator ユーティリティーを使用して AWS IAM ロールを作成する
Cloud Credential Operator ユーティリティー (ccoctl
) を使用して、AWS Load Balancer Operator 用の AWS IAM ロールを作成できます。AWS IAM ロールは、サブネットおよび仮想プライベートクラウド (VPC) と対話します。
前提条件
-
ccoctl
バイナリーを抽出して準備する必要があります。
手順
次のコマンドを実行して、
CredentialsRequest
カスタムリソース (CR) をダウンロードし、ディレクトリーに保存します。$ curl --create-dirs -o <credentials_requests_dir>/operator.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-credentials-request.yaml
ccoctl
ユーティリティーを使用して次のコマンドを実行し、AWS IAM ロールを作成します。$ ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
出力例
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator created 1 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-operator-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-operator created
- 1
- AWS Load Balancer Operator 用に作成された AWS IAM ロールの Amazon Resource Name (ARN) (例:
arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator
) をメモします。
注記AWS IAM ロール名の長さは 12 文字以下にする必要があります。
2.1.2. Cloud Credential Operator ユーティリティーを使用してコントローラー用の AWS IAM ロールを作成する
Cloud Credential Operator ユーティリティー (ccoctl
) を使用して、AWS Load Balancer Controller 用の AWS IAM ロールを作成できます。AWS IAM ロールは、サブネットおよび Virtual Private Cloud (VPC) と対話するために使用されます。
前提条件
-
ccoctl
バイナリーを抽出して準備する必要があります。
手順
次のコマンドを実行して、
CredentialsRequest
カスタムリソース (CR) をダウンロードし、ディレクトリーに保存します。$ curl --create-dirs -o <credentials_requests_dir>/controller.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/controller/controller-credentials-request.yaml
ccoctl
ユーティリティーを使用して次のコマンドを実行し、AWS IAM ロールを作成します。$ ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
出力例
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-controller created 1 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-controller-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-controller created
- 1
- AWS Load Balancer Controller 用に作成された AWS IAM ロールの Amazon Resource Name (ARN) (例:
arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-controller
) をメモします。
注記AWS IAM ロール名の長さは 12 文字以下にする必要があります。
2.1.3. AWS Load Balancer Operator のインストール
特定の要件を満たしている場合は、AWS Load Balancer Operator と AWS Load Balancer Controller をインストールできます。
前提条件
- Hosted Control Plane (HCP) モードでインストールされた、複数のアベイラビリティーゾーン (AZ) にまたがる Bring-Your-Own-VPC (BYO-VPC) 設定の既存の Red Hat OpenShift Service on AWS (ROSA) クラスターがある。
-
dedicated-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 - 作成された ROSA クラスターの VPC とサブネットを変更するためのアクセス権がある。
-
ROSA CLI (
rosa
) ツールをインストールしている。 - Amazon Web Services (AWS) CLI がインストールされている。
- OpenShift Container Platform 4.13 以降を使用している。
AWS Local Zone (LZ) 内の ROSA クラスターで使用するために AWS Load Balancer Operator をインストールする場合は、アカウントに対して AWS Local Zone を有効にする必要があります。さらに、AWS Local Zone に AWS Elastic Load Balancing v2 (ELBv2) サービスが存在することを確認する必要があります。
手順
次のコマンドを実行して、クラスターインフラストラクチャー ID とクラスター OpenID Connect (OIDC) DNS を特定します。
ROSA クラスターの ID を特定します。
$ rosa describe cluster --cluster=<cluster_name> | grep -i 'Infra ID'
または、以下を実行します。
$ oc get infrastructure cluster -o json | jq -r '.status.infrastructureName'
次の
rosa
CLI コマンドを使用して、ROSA クラスターの OIDC の DNS を特定します。$ rosa describe cluster --cluster=<cluster_name> | grep -i OIDC 1
- 1
- OIDC の DNS の例は、
oidc.op1.openshiftapps.com/28q7fsn54m2jjts3kd556aij4mu9omah
です。
または、以下を実行します。
$ oc get authentication.config cluster -o=jsonpath="{.spec.serviceAccountIssuer}"
-
AWS Web コンソールで、IAM Access management Identity providers に移動して、OIDC の Amazon Resource Name (ARN) 情報を見つけます。OIDC の ARN の例は、
arn:aws:iam::777777777777:oidc-provider/<oidc_dns_url>
です。 - コマンドからの出力を保存します。この情報は、この後の手順で使用します。
AWS CLI を使用して、AWS Load Balancer Operator に必要な AWS IAM ポリシーを作成します。
dedicated-admin
ロールを持つユーザーとして ROSA クラスターにログインし、次のコマンドを使用して新しいプロジェクトを作成します。$ oc new-project aws-load-balancer-operator
新しく作成した AWS IAM ロールに次の信頼ポリシーを割り当てます。
$ IDP='{Cluster_OIDC_Endpoint}'
$ IDP_ARN="arn:aws:iam::{AWS_AccountNo}:oidc-provider/${IDP}" 1
- 1
{AWS_AccountNo}
は、AWS アカウント番号に置き換えます。{Cluster_OIDC_Endpoint}
は、前のステップで特定した OIDC の DNS に置き換えます。
信頼ポリシーが AWS IAM ロールに割り当てられていることを確認します。
出力例
$ cat EOF albo-operator-trusted-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "${IDP_ARN}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${IDP}:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager" } } } ] } EOF
重要{Cluster_OIDC_Endpoint}
を前に特定した OIDC DNS に置き換える際に、OIDC DNS URL のhttps
部分は含めないでください。URL 内の/
に続く英数字情報のみ必要です。生成された信頼ポリシーを使用してロールを作成し、検証します。
$ aws iam create-role --role-name albo-operator --assume-role-policy-document file://albo-operator-trusted-policy.json
$ OPERATOR_ROLE_ARN=$(aws iam get-role --role-name albo-operator --output json | jq -r '.Role.Arn')
$ echo $OPERATOR_ROLE_ARN
出力例
ROLE arn:aws:iam::<aws_account_number>:role/albo-operator 2023-08-02T12:13:22Z ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-manager PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<oidc_provider_id>
注記ここでは、AWS Load Balancer Operator 用の AWS IAM ロールの
arn
が作成されます (例:arn:aws:iam::777777777777:role/albo-operator
)。Operator の権限ポリシーをロールにアタッチします。
$ curl -o albo-operator-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/release-1.1/hack/operator-permission-policy.json $ aws iam put-role-policy --role-name albo-operator --policy-name perms-policy-albo-operator --policy-document file://albo-operator-permission-policy.json
AWS CLI を使用して、AWS Load Balancer Controller に必要な AWS IAM ポリシーを作成します。
アイデンティティープロバイダー用の信頼ポリシーファイルを生成します。次の例では OpenID Connect を使用しています。
$ IDP='{Cluster_OIDC_Endpoint}' $ IDP_ARN="arn:aws:iam::{AWS_AccountNo}:oidc-provider/${IDP}" $ cat <EOF> albo-controller-trusted-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "${IDP_ARN}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${IDP}:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-cluster" } } } ] } EOF
生成された信頼ポリシーを使用してロールを作成し、検証します。
$ aws iam create-role --role-name albo-controller --assume-role-policy-document file://albo-controller-trusted-policy.json $ CONTROLLER_ROLE_ARN=$(aws iam get-role --role-name albo-controller --output json | jq -r '.Role.Arn') $ echo $CONTROLLER_ROLE_ARN
出力例
ROLE arn:aws:iam::<aws_account_number>:role/albo-controller 2023-08-02T12:13:22Z ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-cluster PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<oidc_provider_id>
注記ここでは、AWS Load Balancer Controller 用の AWS IAM ロールの
arn
が作成されます (例:arn:aws:iam::777777777777:role/albo-controller
)。コントローラーの権限ポリシーをロールにアタッチします。
$ curl -o albo-controller-permission-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json $ aws iam put-role-policy --role-name albo-controller --policy-name perms-policy-albo-controller --policy-document file://albo-controller-permission-policy.json
ROSA with HCP クラスターの場合は、サブネット検出に必要なタグを追加します。
ROSA クラスターをホストしている VPC とそのすべてのサブネットに次の
{Key: Value}
タグを追加します。{Cluster Infra ID}
を、前に指定した Infra ID に置き換えます。kubernetes.io/cluster/${Cluster Infra ID}:owned
次の ELBv2
{Key: Value}
タグをプライベートサブネットに追加します。必要な場合は、パブリックサブネットにも追加します。-
プライベートサブネット:
kubernetes.io/role/internal-elb:1
パブリックサブネット:
kubernetes.io/role/elb:1
注記インターネットに接続された内部ロードバランサーは、これらのサブネットが属するアベイラビリティーゾーン内に作成されます。
重要AWS Load Balancer Operator によって作成された ELBv2 リソース (ALB や NLB など) は、ROSA クラスターに設定されたカスタムタグを継承しません。これらのリソースには、個別にタグを設定する必要があります。
-
プライベートサブネット:
次の手順を実行して、AWS Load Balancer Operator を作成します。
次のコマンドを実行して
OperatorGroup
オブジェクトを作成します。$ cat EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: aws-load-balancer-operator namespace: aws-load-balancer-operator spec: targetNamespaces: [] EOF
次のコマンドを実行して
Subscription
オブジェクトを作成します。$ cat EOF | oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: aws-load-balancer-operator namespace: aws-load-balancer-operator spec: channel: stable-v1 name: aws-load-balancer-operator source: redhat-operators sourceNamespace: openshift-marketplace config: env: - name: ROLEARN value: "<operator_role_arn>" 1 EOF
- 1
- AWS Load Balancer Operator の ARN ロールを指定します。
CredentialsRequest
オブジェクトは、この ARN ロールを使用して AWS 認証情報をプロビジョニングします。<operator_role_arn>
の例は、arn:aws:iam::<aws_account_number>:role/albo-operator
です。
AWS Load Balancer Controller を作成します。
apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController metadata: name: cluster spec: subnetTagging: Manual credentialsRequestConfig: stsIAMRoleARN: <controller_role_arn>
重要AWS Load Balancer Controller は、AWS アベイラビリティーゾーンと AWS Local Zones の両方に関連付けられた AWS Load Balancer (ALB) の作成をサポートしていません。そのため、ROSA クラスターは、AWS Local Zones または AWS アベイラビリティーゾーンのいずれかに排他的に関連付けられた ALB を持つことはできますが、両方に同時に関連付けられた ALB を持つことはできません。
検証
次のコマンドを実行して、インストールが成功したことを確認します。
プロジェクト内の Pod に関する情報を収集します。
$ oc get pods -n aws-load-balancer-operator
プロジェクト内のログを表示します。
$ oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager
関連情報
- 信頼ポリシーを AWS IAM ロールに割り当てる方法の詳細は、IAM ロールで信頼ポリシーを使用する方法 を参照してください。
- AWS IAM ロールの作成の詳細は、IAM ロールの作成 を参照してください。
- AWS IAM ロールへの AWS IAM 権限の追加の詳細は IAM アイデンティティーの権限の追加と削除 を参照してください。
- 認証情報ファイルの形式の詳細は、Amazon Web Services Security Token Service での手動モードの使用 を参照してください。
- AWS Load Balancer Controller の設定に関する詳細は、複数の Ingress の作成 および TLS Termination の追加 を参照してください。
- VPC やサブネットなどの AWS リソースにタグを追加する方法の詳細は Tag your Amazon EC2 resources を参照してください。
- ROSA クラスターで実行されているアプリケーション用に ELBv2 が作成されたことを確認する詳細な手順は、AWS Load Balancer Controller のインスタンスの作成 を参照してください。
2.1.4. AWS Load Balancer Operator のアンインストール
AWS Load Balancer Operator をアンインストールし、関連リソース全体をクリーンアップするには、次の手順を実行します。
手順
- ALBO が作成および管理するロードバランサーを削除して、サンプルアプリケーションをクリーンアップします。ロードバランサーの削除の詳細は Delete an Application Load Balancer を参照してください。
- サブネットの検出と Application Load Balancer (ALB) の作成のためにサブネットに追加された VPC タグを削除して、AWS VPC タグをクリーンアップします。詳細は、Tag basics を参照してください。
- AWS Load Balancer Operator と Application Load Balancer Controller の両方を削除して、AWS Load Balancer Operator コンポーネントをクリーンアップします。詳細は、クラスターからの Operator の削除 を参照してください。