第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 バイナリーを抽出して準備する必要があります。

手順

  1. 次のコマンドを実行して、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
  2. 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 バイナリーを抽出して準備する必要があります。

手順

  1. 次のコマンドを実行して、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
  2. 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) サービスが存在することを確認する必要があります。

手順

  1. 次のコマンドを実行して、クラスターインフラストラクチャー ID とクラスター OpenID Connect (OIDC) DNS を特定します。

    1. ROSA クラスターの ID を特定します。

      $ rosa describe cluster --cluster=<cluster_name> | grep -i 'Infra ID'

      または、以下を実行します。

      $ oc get infrastructure cluster -o json | jq -r '.status.infrastructureName'
    2. 次の 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}"
    3. AWS Web コンソールで、IAM Access management Identity providers に移動して、OIDC の Amazon Resource Name (ARN) 情報を見つけます。OIDC の ARN の例は、arn:aws:iam::777777777777:oidc-provider/<oidc_dns_url> です。
    4. コマンドからの出力を保存します。この情報は、この後の手順で使用します。
  2. AWS CLI を使用して、AWS Load Balancer Operator に必要な AWS IAM ポリシーを作成します。

    1. dedicated-admin ロールを持つユーザーとして ROSA クラスターにログインし、次のコマンドを使用して新しいプロジェクトを作成します。

      $ oc new-project aws-load-balancer-operator
    2. 新しく作成した 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 に置き換えます。
    3. 信頼ポリシーが 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 内の / に続く英数字情報のみ必要です。

    4. 生成された信頼ポリシーを使用してロールを作成し、検証します。

      $ 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)。

    5. 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
  3. AWS CLI を使用して、AWS Load Balancer Controller に必要な AWS IAM ポリシーを作成します。

    1. アイデンティティープロバイダー用の信頼ポリシーファイルを生成します。次の例では 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
    2. 生成された信頼ポリシーを使用してロールを作成し、検証します。

      $ 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)。

    3. コントローラーの権限ポリシーをロールにアタッチします。

      $ 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
  4. ROSA with HCP クラスターの場合は、サブネット検出に必要なタグを追加します。

    1. ROSA クラスターをホストしている VPC とそのすべてのサブネットに次の {Key: Value} タグを追加します。{Cluster Infra ID} を、前に指定した Infra ID に置き換えます。

      kubernetes.io/cluster/${Cluster Infra ID}:owned
    2. 次の ELBv2 {Key: Value} タグをプライベートサブネットに追加します。必要な場合は、パブリックサブネットにも追加します。

      • プライベートサブネット: kubernetes.io/role/internal-elb:1
      • パブリックサブネット: kubernetes.io/role/elb:1

        注記

        インターネットに接続された内部ロードバランサーは、これらのサブネットが属するアベイラビリティーゾーン内に作成されます。

        重要

        AWS Load Balancer Operator によって作成された ELBv2 リソース (ALB や NLB など) は、ROSA クラスターに設定されたカスタムタグを継承しません。これらのリソースには、個別にタグを設定する必要があります。

  5. 次の手順を実行して、AWS Load Balancer Operator を作成します。

    1. 次のコマンドを実行して 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
    2. 次のコマンドを実行して 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 です。
  6. 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 を持つことはできません。

検証

  1. 次のコマンドを実行して、インストールが成功したことを確認します。

    1. プロジェクト内の Pod に関する情報を収集します。

      $ oc get pods -n aws-load-balancer-operator
    2. プロジェクト内のログを表示します。

      $ oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager

関連情報

2.1.4. AWS Load Balancer Operator のアンインストール

AWS Load Balancer Operator をアンインストールし、関連リソース全体をクリーンアップするには、次の手順を実行します。

手順

  1. ALBO が作成および管理するロードバランサーを削除して、サンプルアプリケーションをクリーンアップします。ロードバランサーの削除の詳細は Delete an Application Load Balancer を参照してください。
  2. サブネットの検出と Application Load Balancer (ALB) の作成のためにサブネットに追加された VPC タグを削除して、AWS VPC タグをクリーンアップします。詳細は、Tag basics を参照してください。
  3. AWS Load Balancer Operator と Application Load Balancer Controller の両方を削除して、AWS Load Balancer Operator コンポーネントをクリーンアップします。詳細は、クラスターからの Operator の削除 を参照してください。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.