22.4. AWS Security Token Service (STS) を使用するクラスターに AWS Load Balancer Operator をインストールする

STS を使用するクラスターに AWS Load Balancer Operator をインストールできます。

AWS Load Balancer Operator は、CredentialsRequest オブジェクトに依存して Operator と AWS Load Balancer Controller をブートストラップします。AWS Load Balancer Operator は、必要なシークレットが作成されて利用可能になるまで待機します。Cloud Credential Operator は、STS クラスターでシークレットを自動的にプロビジョニングしません。ccoctl バイナリーを使用して、クレデンシャルシークレットを手動で設定する必要があります。

Cloud Credential Operator を使用して認証情報シークレットをプロビジョニングしたくない場合は、AWS ロードバランサーコントローラーのカスタムリソース (CR) で認証情報シークレットを指定することにより、STS クラスターで AWSLoadBalancerController インスタンスを設定できます。

22.4.1. Security Token Service クラスターでの AWS Load Balancer Operator のブートストラップ

前提条件

  • ccoctl バイナリーを抽出して準備する必要があります。

手順

  1. 次のコマンドを実行して、aws-load-balancer-operator namespace を作成します。

    $ oc create namespace aws-load-balancer-operator
  2. AWS Load Balancer Operator の CredentialsRequest カスタムリソース (CR) をダウンロードし、次のコマンドを実行して格納するディレクトリーを作成します。

    $ curl --create-dirs -o <path-to-credrequests-dir>/cr.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-credentials-request.yaml
  3. 次のコマンドを実行して、ccoctl ツールを使用して AWS Load Balancer Operator の CredentialsRequest オブジェクトを処理します。

    $ ccoctl aws create-iam-roles \
        --name <name> --region=<aws_region> \
        --credentials-requests-dir=<path-to-credrequests-dir> \
        --identity-provider-arn <oidc-arn>
  4. 次のコマンドを実行して、クラスターのマニフェストディレクトリーに生成されたシークレットを適用します。

    $ ls manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
  5. 次のコマンドを実行して、AWS Load Balancer Operator の認証情報シークレットが作成されていることを確認します。

    $ oc -n aws-load-balancer-operator get secret aws-load-balancer-operator --template='{{index .data "credentials"}}' | base64 -d

    出力例

    [default]
    sts_regional_endpoints = regional
    role_arn = arn:aws:iam::999999999999:role/aws-load-balancer-operator-aws-load-balancer-operator
    web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token

22.4.2. 管理された CredentialsRequest オブジェクトを使用して、Security Token Service クラスターで AWS Load Balancer Operator を設定する

前提条件

  • ccoctl バイナリーを抽出して準備する必要があります。

手順

  1. AWS Load Balancer Operator は、各 AWSLoadBalancerController カスタムリソース (CR) の openshift-cloud-credential-operator namespaceに CredentialsRequest オブジェクトを作成します。次のコマンドを実行すると、作成された CredentialsRequest オブジェクトを抽出してディレクトリーに保存できます。

    $ oc get credentialsrequest -n openshift-cloud-credential-operator  \
        aws-load-balancer-controller-<cr-name> -o yaml > <path-to-credrequests-dir>/cr.yaml 1
    1
    aws-load-balancer-controller-<cr-name> パラメーターは、AWS Load Balancer Operator によって作成された認証情報リクエスト名を指定します。cr-name は、AWS Load Balancer Controller インスタンスの名前を指定します。
  2. 次のコマンドを実行し、ccoctl ツールを使用して credrequests ディレクトリー内のすべての CredentialsRequest オブジェクトを処理します。

    $ ccoctl aws create-iam-roles \
        --name <name> --region=<aws_region> \
        --credentials-requests-dir=<path-to-credrequests-dir> \
        --identity-provider-arn <oidc-arn>
  3. 次のコマンドを実行して、マニフェストディレクトリーで生成されたシークレットをクラスターに適用します。

    $ ls manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
  4. aws-load-balancer-controller Pod が作成されたことを確認します。

    $ oc -n aws-load-balancer-operator get pods
    NAME                                                            READY   STATUS    RESTARTS   AGE
    aws-load-balancer-controller-cluster-9b766d6-gg82c              1/1     Running   0          137m
    aws-load-balancer-operator-controller-manager-b55ff68cc-85jzg   2/2     Running   0          3h26m

22.4.3. 特定の認証情報を使用して Security Token Service クラスターで AWS Load Balancer Operator を設定する

認証情報シークレットは、AWS Load Balancer Controller カスタムリソース (CR) の spec.credentials フィールドを使用して指定できます。コントローラーの定義済みの CredentialsRequest オブジェクトを使用して、必要なロールを知ることができます。

前提条件

  • ccoctl バイナリーを抽出して準備する必要があります。

手順

  1. AWS Load Balancer Controller の CredentialsRequest カスタムリソース (CR) をダウンロードし、次のコマンドを実行して格納するディレクトリーを作成します。

    $ curl --create-dirs -o <path-to-credrequests-dir>/cr.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/controller/controller-credentials-request.yaml
  2. ccoctl ツールを使用して、コントローラーの CredentialsRequest オブジェクトを処理します。

    $ ccoctl aws create-iam-roles \
            --name <name> --region=<aws_region> \
            --credentials-requests-dir=<path-to-credrequests-dir> \
            --identity-provider-arn <oidc-arn>
  3. クラスターにシークレットを適用します。

    $ ls manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
  4. コントローラーで使用するためにクレデンシャルシークレットが作成されていることを確認します。

    $ oc -n aws-load-balancer-operator get secret aws-load-balancer-controller-manual-cluster --template='{{index .data "credentials"}}' | base64 -d

    出力例

    [default]
        sts_regional_endpoints = regional
        role_arn = arn:aws:iam::999999999999:role/aws-load-balancer-operator-aws-load-balancer-controller
        web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token

  5. AWSLoadBalancerController リソース YAML ファイル (例: sample-aws-lb-manual-creds.yaml) を次のように作成します。

    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController 1
    metadata:
      name: cluster 2
    spec:
      credentials:
        name: <secret-name> 3
    1
    AWSLoadBalancerController リソースを定義します。
    2
    AWS Load Balancer コントローラーインスタンスの名前を定義します。このインスタンス名は、関連するすべてのリソースの接尾辞として追加されます。
    3
    コントローラーが使用する AWS 認証情報を含むシークレット名を指定します。

22.4.4. 関連情報