6.2. AWS Load Balancer Operator
6.2.1. AWS Load Balancer Operator リリースノート
AWS Load Balancer (ALB) Operator は、AWSLoadBalancerController
リソースのインスタンスをデプロイおよび管理します。
AWS Load Balancer (ALB) Operator は、x86_64
アーキテクチャーでのみサポートされます。
これらのリリースノートは、OpenShift Container Platform での AWS Load Balancer Operator の開発を追跡します。
AWS Load Balancer Operator の概要は、OpenShift Container Platform の AWS Load Balancer Operator を参照してください。
AWS Load Balancer Operator は現在、AWS GovCloud をサポートしていません。
6.2.1.1. AWS Load Balancer Operator 1.1.1
AWS Load Balancer Operator バージョン 1.1.1 では、以下のアドバイザリーを利用できます。
6.2.1.2. AWS Load Balancer Operator 1.1.0
AWS Load Balancer Operator バージョン 1.1.0 は、AWS Load Balancer Controller バージョン 2.4.4 をサポートします。
AWS Load Balancer Operator バージョン 1.1.0 では、以下のアドバイザリーを利用できます。
6.2.1.2.1. 大きな変更
- このリリースでは、Kubernetes API バージョン 0.27.2 を使用します。
6.2.1.2.2. 新機能
- AWS Load Balancer Operator は、Cloud Credential Operator を使用して標準化された Security Token Service (STS) フローをサポートするようになりました。
6.2.1.2.3. バグ修正
FIPS 準拠のクラスターでは、TLS バージョン 1.2 を使用する必要があります。以前は、AWS Load Balancer Controller の Webhook は最小バージョンとして TLS 1.3 のみを受け入れていたため、FIPS 準拠のクラスターで次のようなエラーが発生しました。
remote error: tls: protocol version not supported
現在、AWS Load Balancer Controller は TLS 1.2 を最小 TLS バージョンとして受け入れ、この問題は解決されています。(OCPBUGS-14846)
6.2.1.3. AWS Load Balancer Operator 1.0.1
AWS Load Balancer Operator バージョン 1.0.1 では、以下のアドバイザリーを利用できます。
6.2.1.4. AWS Load Balancer Operator 1.0.0
このリリースで、AWS Load Balancer Operator の一般提供が開始されました。AWS Load Balancer Operator バージョン 1.0.0 は、AWS Load Balancer Controller バージョン 2.4.4 をサポートします。
AWS Load Balancer Operator バージョン 1.0.0 では、以下のアドバイザリーを利用できます。
AWS Load Balancer (ALB) Operator バージョン 1.x.x は、テクノロジープレビューバージョン 0.x.x から自動的にアップグレードできません。以前のバージョンからアップグレードするには、ALB オペランドをアンインストールし、aws-load-balancer-operator
namespace を削除する必要があります。
6.2.1.4.1. 大きな変更
-
このリリースでは、新しい
v1
API バージョンを使用しています。
6.2.1.4.2. バグ修正
- 以前のバージョンでは、AWS Load Balancer Operator によってプロビジョニングされたコントローラーは、クラスター全体のプロキシー設定を適切に使用しませんでした。これらの設定は、コントローラーに正しく適用されるようになりました。(OCPBUGS-4052、OCPBUGS-5295)
6.2.1.5. 以前のバージョン
AWS Load Balancer Operator の最初の 2 つのバージョンは、テクノロジープレビュー機能として利用できます。これらのバージョンは、実稼働クラスターで使用しないでください。Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
AWS Load Balancer Operator バージョン 0.2.0 では、以下のアドバイザリーを利用できます。
AWS Load Balancer Operator バージョン 0.0.1 では、以下のアドバイザリーを利用できます。
6.2.2. OpenShift Container Platform の AWS Load Balancer Operator
AWS Load Balancer Operator は、AWS Load Balancer Controller をデプロイおよび管理します。OpenShift Container Platform Web コンソールまたは CLI を使用して、OperatorHub から AWS Load Balancer Operator をインストールできます。
6.2.2.1. AWS Load Balancer Operator に関する考慮事項
AWS Load Balancer Operator をインストールして使用する前に、次の制限事項を確認してください。
- IP トラフィックモードは、AWS Elastic Kubernetes Service (EKS) でのみ機能します。AWS Load Balancer Operator は、AWS Load Balancer Controller の IP トラフィックモードを無効にします。IP トラフィックモードを無効にすると、AWS Load Balancer Controller は Pod readiness ゲートを使用できません。
-
AWS Load Balancer Operator は
--disable-ingress-class-annotation
や--disable-ingress-group-name-annotation
などのコマンドラインフラグを AWS Load Balancer Controller に追加します。したがって、AWS Load Balancer Operator では、Ingress
リソースでkubernetes.io/ingress.class
およびalb.ingress.kubernetes.io/group.name
アノテーションを使用できません。 -
SVC タイプが
NodePort
(LoadBalancer
やClusterIP
ではない) になるように AWS Load Balancer Operator を設定しておくようにしてください。
6.2.2.2. AWS Load Balancer Operator
AWS Load Balancer Operator は kubernetes.io/role/elb
タグがない場合に、パブリックサブネットにタグを付けることができます。また、AWS Load Balancer Operator は、基盤となる AWS クラウドから次の情報を検出します。
- Operator をホストするクラスターがデプロイされる仮想プライベートクラウド (VPC) の ID。
- 検出された VPC のパブリックおよびプライベートサブネット。
AWS Load Balancer Operator は、インスタンス
ターゲットタイプのみで Network Load Balancer (NLB) を使用することにより、タイプ LoadBalancer
の Kubernetes サービスリソースをサポートします。
手順
次のコマンドを実行して
Subscription
オブジェクトを作成することにより、OperatorHub からオンデマンドで AWS Load Balancer Operator をデプロイできます。$ oc -n aws-load-balancer-operator get sub aws-load-balancer-operator --template='{{.status.installplan.name}}{{"\n"}}'
出力例
install-zlfbt
次のコマンドを実行して、インストールプランのステータスが
Complete
になっているか確認します。$ oc -n aws-load-balancer-operator get ip <install_plan_name> --template='{{.status.phase}}{{"\n"}}'
出力例
Complete
次のコマンドを実行して、
aws-load-balancer-operator-controller-manager
デプロイメントのステータスを表示します。$ oc get -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager
出力例
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-operator-controller-manager 1/1 1 1 23h
6.2.2.3. Outpost に拡張された AWS VPC クラスターでの AWS Load Balancer Operator の使用
Outpost に拡張された AWS VPC クラスター内で AWS Application Load Balancer をプロビジョニングするように AWS Load Balancer Operator を設定できます。AWS Outposts は AWS Network Load Balancer をサポートしていません。そのため、AWS Load Balancer Operator は Outpost に Network Load Balancer をプロビジョニングできません。
AWS Application Load Balancer は、クラウドサブネットか Outpost サブネットのどちらかに作成できます。クラウドの Application Load Balancer はクラウドベースのコンピュートノードに接続でき、Outpost の Application Load Balancer はエッジコンピュートノードに接続できます。Ingress リソースには Outpost サブネットまたは VPC サブネットのアノテーションを付ける必要がありますが、両方を付けることはできません。
前提条件
- AWS VPC クラスターを Outpost に拡張した。
-
OpenShift CLI (
oc
) がインストールされている。 - AWS Load Balancer Operator をインストールし、AWS Load Balancer Controller を作成した。
手順
指定のサブネットを使用するように
Ingress
リソースを設定します。Ingress
リソース設定の例apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: <application_name> annotations: alb.ingress.kubernetes.io/subnets: <subnet_id> 1 spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Exact backend: service: name: <application_name> port: number: 80
- 1
- 使用するサブネットを指定します。
- Outpost で Application Load Balancer を使用するには、Outpost のサブネット ID を指定します。
- クラウドで Application Load Balancer を使用するには、別々のアベイラビリティーゾーンに少なくとも 2 つのサブネットを指定する必要があります。
6.2.2.4. AWS Load Balancer Operator ログ
oc logs
コマンドを使用して、AWS Load Balancer Operator のログを表示できます。
手順
次のコマンドを実行して、AWS Load Balancer Operator のログを表示します。
$ oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager
6.2.3. AWS Load Balancer Operator のインストール
AWS Load Balancer Operator は、AWS Load Balancer Controller をデプロイおよび管理します。OpenShift Container Platform Web コンソールまたは CLI を使用して、OperatorHub から AWS Load Balancer Operator をインストールできます。
6.2.3.1. Web コンソールを使用した AWS Load Balancer Operator のインストール
Web コンソールを使用して、AWS Load Balancer Operator をインストールできます。
前提条件
-
cluster-admin
パーミッションのあるユーザーとして OpenShift Container Platform Web コンソールにログインしていること。 - クラスターのプラットフォームタイプとクラウドプロバイダーが AWS に設定されている。
- セキュリティートークンサービス (STS) または user-provisioned infrastructure を使用している場合は、関連する準備手順に従います。たとえば、AWS Security Token Service を使用している場合は、「AWS Security Token Service (STS) を使用してクラスター上で AWS Load Balancer Operator を準備する」を参照してください。
手順
-
OpenShift Container Platform Web コンソールで、Operators
OperatorHub に移動します。 - AWS Load Balancer Operator を選択します。Filter by keyword テキストボックスを使用するか、フィルターリストを使用して、Operator のリストから AWS Load Balancer Operator を検索できます。
-
aws-load-balancer-operator
namespace を選択します。 Install Operator ページで、次のオプションを選択します。
- Update the channel で stable-v1 を選択します。
- Installation mode で All namespaces on the cluster (default) を選択します。
-
Installed Namespace で
aws-load-balancer-operator
を選択します。aws-load-balancer-operator
namespace が存在しない場合は、Operator のインストール中に作成されます。 - Update approval で Automatic または Manual を選択します。デフォルトでは、Update approval は Automatic に設定されています。Automatic (自動) 更新を選択した場合、Operator Lifecycle Manager (OLM) は介入なしに、Operator の実行中のインスタンスを自動的にアップグレードします。手動更新を選択した場合、OLM は更新要求を作成します。クラスター管理者は、Operator を新規バージョンに更新できるように更新要求を手動で承認する必要があります。
- Install をクリックします。
検証
- AWS Load Balancer Operator で、インストール済み Operator ダッシュボードの Status が Succeeded と表示されることを確認します。
6.2.3.2. CLI を使用した AWS Load Balancer Operator のインストール
CLI を使用して AWS Load Balancer Operator をインストールできます。
前提条件
-
cluster-admin
権限を持つユーザーとして OpenShift Container Platform Web コンソールにログインしている。 - クラスターのプラットフォームタイプとクラウドプロバイダーが AWS に設定されている。
-
OpenShift CLI (
oc
) にログイン済みである。
手順
Namespace
オブジェクトを作成します。Namespace
オブジェクトを定義する YAML ファイルを作成します。namespace.yaml
ファイルの例apiVersion: v1 kind: Namespace metadata: name: aws-load-balancer-operator
次のコマンドを実行して、
Namespace
オブジェクトを作成します。$ oc apply -f namespace.yaml
OperatorGroup
オブジェクトを作成します。OperatorGroup
オブジェクトを定義する YAML ファイルを作成します。operatorgroup.yaml
ファイルの例apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: aws-lb-operatorgroup namespace: aws-load-balancer-operator spec: upgradeStrategy: Default
以下のコマンドを実行して
OperatorGroup
オブジェクトを作成します。$ oc apply -f operatorgroup.yaml
Subscription
オブジェクトを作成します。Subscription
オブジェクトを定義する YAML ファイルを作成します。subscription.yaml
ファイルの例apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: aws-load-balancer-operator namespace: aws-load-balancer-operator spec: channel: stable-v1 installPlanApproval: Automatic name: aws-load-balancer-operator source: redhat-operators sourceNamespace: openshift-marketplace
以下のコマンドを実行して
Subscription
オブジェクトを作成します。$ oc apply -f subscription.yaml
検証
サブスクリプションからインストールプランの名前を取得します。
$ oc -n aws-load-balancer-operator \ get subscription aws-load-balancer-operator \ --template='{{.status.installplan.name}}{{"\n"}}'
インストールプランのステータスを確認します。
$ oc -n aws-load-balancer-operator \ get ip <install_plan_name> \ --template='{{.status.phase}}{{"\n"}}'
出力は
Complete
でなければなりません。
6.2.4. AWS STS を使用するクラスターへの AWS Load Balancer Operator のインストール
Security Token Service (STS) を使用するクラスターに Amazon Web Services (AWS) Load Balancer Operator をインストールできます。Operator をインストールする前に、次の手順に従ってクラスターを準備します。
AWS Load Balancer Operator は、CredentialsRequest
オブジェクトに依存して Operator と AWS Load Balancer Controller をブートストラップします。AWS Load Balancer Operator は、必要なシークレットが作成されて利用可能になるまで待機します。
6.2.4.1. 前提条件
-
OpenShift CLI (
oc
) がインストールされている。 クラスターのインフラストラクチャー ID がわかっている。この ID を表示するには、CLI で次のコマンドを実行します。
$ oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}"
クラスターの OpenID Connect (OIDC) の DNS 情報がわかっている。この情報を表示するには、CLI で次のコマンドを入力します。
$ oc get authentication.config cluster -o=jsonpath="{.spec.serviceAccountIssuer}" 1
- 1
- OIDC の DNS の例は、
https://rh-oidc.s3.us-east-1.amazonaws.com/28292va7ad7mr9r4he1fb09b14t59t4f
です。
-
AWS Web コンソールにログインし、IAM
Access management Identity providers に移動して、OIDC の Amazon Resource Name (ARN) 情報を確認した。OIDC の ARN の例は、 arn:aws:iam::777777777777:oidc-provider/<oidc_dns_url>
です。
6.2.4.2. AWS Load Balancer Operator 用の IAM ロールの作成
STS を使用するクラスターに AWS Load Balancer Operator を正常にインストールするには、追加の Amazon Web Services (AWS) Identity and Access Management (IAM) ロールが必要です。この IAM ロールは、サブネットおよび Virtual Private Cloud (VPC) と対話するために必要です。AWS Load Balancer Operator は、自身をブートストラップするために IAM ロールを持つ CredentialsRequest
オブジェクトを生成します。
IAM ロールは次の方法で作成できます。
-
Cloud Credential Operator ユーティリティー (
ccoctl
) と定義済みのCredentialsRequest
オブジェクトを使用します。 - AWS CLI と事前定義された AWS マニフェストを使用します。
環境が ccoctl
コマンドをサポートしていない場合は、AWS CLI を使用します。
6.2.4.2.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 文字以下にする必要があります。
6.2.4.2.2. AWS CLI を使用して AWS IAM ロールを作成する
AWS コマンドラインインターフェイスを使用して、AWS Load Balancer Operator 用の IAM ロールを作成できます。IAM ロールは、サブネットおよび Virtual Private Cloud (VPC) と対話するために使用されます。
前提条件
-
AWS コマンドラインインターフェイス (
aws
) にアクセスできる。
手順
次のコマンドを実行して、アイデンティティープロバイダーを使用して信頼ポリシーファイルを生成します。
$ cat <<EOF > albo-operator-trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "<oidc_arn>" 1 }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "<cluster_oidc_endpoint>:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-cluster" 2 } } } ] } EOF
- 1
- OIDC アイデンティティープロバイダーの Amazon Resource Name (ARN) (例:
arn:aws:iam::777777777777:oidc-provider/rh-oidc.s3.us-east-1.amazonaws.com/28292va7ad7mr9r4he1fb09b14t59t4f
) を指定します。 - 2
- AWS Load Balancer Controller のサービスアカウントを指定します。
<cluster_oidc_endpoint>
の例は、rh-oidc.s3.us-east-1.amazonaws.com/28292va7ad7mr9r4he1fb09b14t59t4f
です。
次のコマンドを実行して、生成された信頼ポリシーを使用して IAM ロールを作成します。
$ aws iam create-role --role-name albo-operator --assume-role-policy-document file://albo-operator-trust-policy.json
出力例
ROLE arn:aws:iam::<aws_account_number>:role/albo-operator 2023-08-02T12:13:22Z 1 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/<cluster_oidc_endpoint>
- 1
- AWS Load Balancer Operator 用に作成された AWS IAM ロールの ARN (例:
arn:aws:iam::777777777777:role/albo-operator
) をメモします。
次のコマンドを実行して、AWS Load Balancer Operator の権限ポリシーをダウンロードします。
$ curl -o albo-operator-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-permission-policy.json
次のコマンドを実行して、AWS Load Balancer Controller の権限ポリシーを IAM ロールに割り当てます。
$ aws iam put-role-policy --role-name albo-operator --policy-name perms-policy-albo-operator --policy-document file://albo-operator-permission-policy.json
6.2.4.3. AWS Load Balancer Operator 用の ARN ロールの設定
AWS Load Balancer Operator 用の Amazon Resource Name (ARN) ロールを環境変数として設定できます。CLI を使用して ARN ロールを設定できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。
手順
次のコマンドを実行して、
aws-load-balancer-operator
プロジェクトを作成します。$ oc new-project 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: "<albo_role_arn>" 1 EOF
- 1
- AWS Load Balancer Operator の AWS 認証情報をプロビジョニングするために
CredentialsRequest
で使用する ARN ロールを指定します。<albo_role_arn>
の例は、arn:aws:iam::<aws_account_number>:role/albo-operator
です。
注記AWS Load Balancer Operator は、シークレットが作成されるまで待機してから、
Available
ステータスに移行します。
6.2.4.4. AWS Load Balancer Controller 用の IAM ロールの作成
AWS Load Balancer Controller の CredentialsRequest
オブジェクトは、手動でプロビジョニングした IAM ロールを使用して設定する必要があります。
IAM ロールは次の方法で作成できます。
-
Cloud Credential Operator ユーティリティー (
ccoctl
) と定義済みのCredentialsRequest
オブジェクトを使用します。 - AWS CLI と事前定義された AWS マニフェストを使用します。
環境が ccoctl
コマンドをサポートしていない場合は、AWS CLI を使用します。
6.2.4.4.1. 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 文字以下にする必要があります。
6.2.4.4.2. AWS CLI を使用してコントローラー用の AWS IAM ロールを作成する
AWS コマンドラインインターフェイスを使用して、AWS Load Balancer Controller 用の AWS IAM ロールを作成できます。AWS IAM ロールは、サブネットおよび Virtual Private Cloud (VPC) と対話するために使用されます。
前提条件
-
AWS コマンドラインインターフェイス (
aws
) にアクセスできる。
手順
次のコマンドを実行して、アイデンティティプロバイダーを使用して信頼ポリシーファイルを生成します。
$ cat <<EOF > albo-controller-trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "<oidc_arn>" 1 }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "<cluster_oidc_endpoint>:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-cluster" 2 } } } ] } EOF
- 1
- OIDC アイデンティティープロバイダーの Amazon Resource Name (ARN) (例:
arn:aws:iam::777777777777:oidc-provider/rh-oidc.s3.us-east-1.amazonaws.com/28292va7ad7mr9r4he1fb09b14t59t4f
) を指定します。 - 2
- AWS Load Balancer Controller のサービスアカウントを指定します。
<cluster_oidc_endpoint>
の例は、rh-oidc.s3.us-east-1.amazonaws.com/28292va7ad7mr9r4he1fb09b14t59t4f
です。
次のコマンドを実行して、生成された信頼ポリシーを使用して AWS IAM ロールを作成します。
$ aws iam create-role --role-name albo-controller --assume-role-policy-document file://albo-controller-trust-policy.json
出力例
ROLE arn:aws:iam::<aws_account_number>:role/albo-controller 2023-08-02T12:13:22Z 1 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/<cluster_oidc_endpoint>
- 1
- AWS Load Balancer Controller の AWS IAM ロールの ARN (例:
arn:aws:iam::777777777777:role/albo-controller
) をメモします。
次のコマンドを実行して、AWS Load Balancer Controller の権限ポリシーをダウンロードします。
$ curl -o albo-controller-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/assets/iam-policy.json
次のコマンドを実行して、AWS Load Balancer Controller の権限ポリシーを AWS IAM ロールに割り当てます。
$ aws iam put-role-policy --role-name albo-controller --policy-name perms-policy-albo-controller --policy-document file://albo-controller-permission-policy.json
AWSLoadBalancerController
オブジェクトを定義する YAML ファイルを作成します。sample-aws-lb-manual-creds.yaml
ファイルの例apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController 1 metadata: name: cluster 2 spec: credentialsRequestConfig: stsIAMRoleARN: <albc_role_arn> 3
- 1
AWSLoadBalancerController
オブジェクトを定義します。- 2
- AWS Load Balancer Controller 名を定義します。このインスタンス名は、関連するすべてのリソースの接尾辞として使用されます。
- 3
- AWS Load Balancer Controller の ARN ロールを指定します。
CredentialsRequest
オブジェクトは、この ARN ロールを使用して AWS 認証情報をプロビジョニングします。<albc_role_arn>
の例は、arn:aws:iam::777777777777:role/albo-controller
です。
6.2.4.5. 関連情報
6.2.5. AWS Load Balancer Controller のインスタンスを作成する
AWS Load Balancer Operator をインストールしたら、AWS Load Balancer Controller を作成できます。
6.2.5.1. AWS Load Balancer Controller の作成
クラスターにインストールできる AWSLoadBalancerController
オブジェクトのインスタンスは 1 つだけです。CLI を使用して AWS Load Balancer Controller を作成できます。AWS Load Balancer Operator は、cluster
という名前のリソースのみを調整します。
前提条件
-
echoserver
namespace を作成している。 -
OpenShift CLI (
oc
) にアクセスできる。
手順
AWSLoadBalancerController
オブジェクトを定義する YAML ファイルを作成します。sample-aws-lb.yaml
ファイルの例apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController 1 metadata: name: cluster 2 spec: subnetTagging: Auto 3 additionalResourceTags: 4 - key: example.org/security-scope value: staging ingressClass: alb 5 config: replicas: 2 6 enabledAddons: 7 - AWSWAFv2 8
- 1
AWSLoadBalancerController
オブジェクトを定義します。- 2
- AWS Load Balancer Controller 名を定義します。このインスタンス名は、関連するすべてのリソースの接尾辞として追加されます。
- 3
- AWS Load Balancer Controller のサブネットのタグ付け方法を設定します。次の値が有効です。
-
Auto
: AWS Load Balancer Operator は、クラスターに属するサブネットを決定し、適切にタグ付けします。内部サブネットタグが内部サブネットに存在しない場合、Operator はロールを正しく判別できません。 -
Manual
: クラスターに属するサブネットに適切なロールタグを手動でタグ付けします。ユーザー提供のインフラストラクチャーにクラスターをインストールした場合は、このオプションを使用します。
-
- 4
- AWS Load Balancer Controller が AWS リソースをプロビジョニングするときに使用するタグを定義します。
- 5
- Ingress クラス名を定義します。デフォルト値は
alb
です。 - 6
- AWS Load Balancer Controller のレプリカの数を指定します。
- 7
- AWS Load Balancer Controller のアドオンとしてアノテーションを指定します。
- 8
alb.ingress.kubernetes.io/wafv2-acl-arn
アノテーションを有効にします。
次のコマンドを実行して、
AWSLoadBalancerController
オブジェクトを作成します。$ oc create -f sample-aws-lb.yaml
Deployment
リソースを定義する YAML ファイルを作成します。sample-aws-lb.yaml
ファイルの例apiVersion: apps/v1 kind: Deployment 1 metadata: name: <echoserver> 2 namespace: echoserver spec: selector: matchLabels: app: echoserver replicas: 3 3 template: metadata: labels: app: echoserver spec: containers: - image: openshift/origin-node command: - "/bin/socat" args: - TCP4-LISTEN:8080,reuseaddr,fork - EXEC:'/bin/bash -c \"printf \\\"HTTP/1.0 200 OK\r\n\r\n\\\"; sed -e \\\"/^\r/q\\\"\"' imagePullPolicy: Always name: echoserver ports: - containerPort: 8080
Service
リソースを定義する YAML ファイルを作成します。service-albo.yaml
ファイルの例apiVersion: v1 kind: Service 1 metadata: name: <echoserver> 2 namespace: echoserver spec: ports: - port: 80 targetPort: 8080 protocol: TCP type: NodePort selector: app: echoserver
Ingress
リソースを定義する YAML ファイルを作成します。Ingress-albo.yaml
ファイルの例apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: <name> 1 namespace: echoserver annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: instance spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Exact backend: service: name: <echoserver> 2 port: number: 80
検証
次のコマンドを実行して、
Ingress
リソースのステータスをHOST
変数に保存します。$ HOST=$(oc get ingress -n echoserver echoserver --template='{{(index .status.loadBalancer.ingress 0).hostname}}')
次のコマンドを実行して、
Ingress
リソースのステータスを確認します。$ curl $HOST
6.2.6. 1 つの AWS ロードバランサーを介して複数の Ingress リソースを提供する
1 つの AWS Load Balancer を介して、1 つのドメインに含まれるさまざまなサービスにトラフィックをルーティングできます。各 Ingress リソースは、ドメインの異なるエンドポイントを提供します。
6.2.6.1. 1 つの AWS ロードバランサーを介して複数の Ingress リソースを作成する
CLI を使用すると、1 つの AWS ロードバランサーを介して複数の Ingress リソースにトラフィックをルーティングできます。
前提条件
-
OpenShift CLI (
oc
) にアクセスできる。
手順
次のように、
IngressClassParams
リソースの YAML ファイル (例:sample-single-lb-params.yaml
) を作成します。apiVersion: elbv2.k8s.aws/v1beta1 1 kind: IngressClassParams metadata: name: single-lb-params 2 spec: group: name: single-lb 3
次のコマンドを実行して、
IngressClassParams
リソースを作成します。$ oc create -f sample-single-lb-params.yaml
次のように、
IngressClass
リソースの YAML ファイル (例:sample-single-lb-class.yaml
) を作成します。apiVersion: networking.k8s.io/v1 1 kind: IngressClass metadata: name: single-lb 2 spec: controller: ingress.k8s.aws/alb 3 parameters: apiGroup: elbv2.k8s.aws 4 kind: IngressClassParams 5 name: single-lb-params 6
次のコマンドを実行して
IngressClass
リソースを作成します。$ oc create -f sample-single-lb-class.yaml
次のように、
AWSLoadBalancerController
リソース YAML ファイル (例:sample-single-lb.yaml
) を作成します。apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController metadata: name: cluster spec: subnetTagging: Auto ingressClass: single-lb 1
- 1
IngressClass
リソースの名前を定義します。
次のコマンドを実行して、
AWSLoadBalancerController
リソースを作成します。$ oc create -f sample-single-lb.yaml
次のように、
Ingress
リソースの YAML ファイル (例:sample-multiple-ingress.yaml
) を作成します。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-1 1 annotations: alb.ingress.kubernetes.io/scheme: internet-facing 2 alb.ingress.kubernetes.io/group.order: "1" 3 alb.ingress.kubernetes.io/target-type: instance 4 spec: ingressClassName: single-lb 5 rules: - host: example.com 6 http: paths: - path: /blog 7 pathType: Prefix backend: service: name: example-1 8 port: number: 80 9 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-2 annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/group.order: "2" alb.ingress.kubernetes.io/target-type: instance spec: ingressClassName: single-lb rules: - host: example.com http: paths: - path: /store pathType: Prefix backend: service: name: example-2 port: number: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-3 annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/group.order: "3" alb.ingress.kubernetes.io/target-type: instance spec: ingressClassName: single-lb rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: example-3 port: number: 80
- 1
- Ingress 名を指定します。
- 2
- インターネットにアクセスするためにパブリックサブネットにプロビジョニングするロードバランサーを示します。
- 3
- ロードバランサーで要求を受信したときに、複数の Ingress リソースからのルールをマッチする順序を指定します。
- 4
- ロードバランサーがサービスに到達するために OpenShift Container Platform ノードをターゲットにすることを示します。
- 5
- この Ingress に属する Ingress クラスを指定します。
- 6
- 要求のルーティングに使用するドメイン名を定義します。
- 7
- サービスにルーティングする必要があるパスを定義します。
- 8
Ingress
リソースで設定されたエンドポイントを提供するサービス名を定義します。- 9
- エンドポイントにサービスを提供するサービスのポートを定義します。
次のコマンドを実行して
Ingress
リソースを作成します。$ oc create -f sample-multiple-ingress.yaml
6.2.7. TLS Termination の追加
AWS Load Balancer に TLS Termination を追加できます。
6.2.7.1. AWS Load Balancer への TLS Termination の追加
ドメインのトラフィックをサービスの Pod にルーティングし、AWS Load Balancer に TLS Termination を追加できます。
前提条件
-
OpenShift CLI (
oc
) にアクセスできる。
手順
AWSLoadBalancerController
リソースを定義する YAML ファイルを作成します。add-tls-termination-albc.yaml
ファイルの例apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController metadata: name: cluster spec: subnetTagging: Auto ingressClass: tls-termination 1
- 1
- Ingress クラス名を定義します。クラスター内に Ingress クラスが存在しない場合は、AWS Load Balancer Controller によって作成されます。
spec.controller
がingress.k8s.aws/alb
に設定されている場合、AWS Load Balancer Controller は追加の Ingress クラス値を調整します。
Ingress
リソースを定義する YAML ファイルを作成します。add-tls-termination-ingress.yaml
ファイルの例apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: <example> 1 annotations: alb.ingress.kubernetes.io/scheme: internet-facing 2 alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxxx 3 spec: ingressClassName: tls-termination 4 rules: - host: <example.com> 5 http: paths: - path: / pathType: Exact backend: service: name: <example-service> 6 port: number: 80
6.2.8. クラスター全体のプロキシーの設定
AWS Load Balancer Operator でクラスター全体のプロキシーを設定できます。クラスター全体のプロキシーを設定すると、Operator Lifecycle Manager (OLM) が、HTTP_PROXY
、HTTPS_PROXY
、NO_PROXY
などの環境変数を使用して、Operator のすべてのデプロイメントを自動的に更新します。これらの変数は、AWS Load Balancer Operator によってマネージドコントローラーに入力されます。
6.2.8.1. クラスター全体のプロキシーの認証局を信頼する
次のコマンドを実行して、
aws-load-balancer-operator
namespace に認証局 (CA) バンドルを含める config map を作成します。$ oc -n aws-load-balancer-operator create configmap trusted-ca
信頼できる CA バンドルを config map に挿入するには、次のコマンドを実行して、
config.openshift.io/inject-trusted-cabundle=true
ラベルを config map に追加します。$ oc -n aws-load-balancer-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true
次のコマンドを実行して、AWS Load Balancer Operator デプロイメントの config map にアクセスできるように AWS Load Balancer Operator サブスクリプションを更新します。
$ oc -n aws-load-balancer-operator patch subscription aws-load-balancer-operator --type='merge' -p '{"spec":{"config":{"env":[{"name":"TRUSTED_CA_CONFIGMAP_NAME","value":"trusted-ca"}],"volumes":[{"name":"trusted-ca","configMap":{"name":"trusted-ca"}}],"volumeMounts":[{"name":"trusted-ca","mountPath":"/etc/pki/tls/certs/albo-tls-ca-bundle.crt","subPath":"ca-bundle.crt"}]}}}'
AWS Load Balancer Operator がデプロイされたら、次のコマンドを実行して、CA バンドルが
aws-load-balancer-operator-controller-manager
デプロイメントに追加されていることを確認します。$ oc -n aws-load-balancer-operator exec deploy/aws-load-balancer-operator-controller-manager -c manager -- bash -c "ls -l /etc/pki/tls/certs/albo-tls-ca-bundle.crt; printenv TRUSTED_CA_CONFIGMAP_NAME"
出力例
-rw-r--r--. 1 root 1000690000 5875 Jan 11 12:25 /etc/pki/tls/certs/albo-tls-ca-bundle.crt trusted-ca
オプション: config-map が変更されるたびに、次のコマンドを実行して、AWS Load Balancer Operator のデプロイを再開します。
$ oc -n aws-load-balancer-operator rollout restart deployment/aws-load-balancer-operator-controller-manager