22.4. 在安全令牌服务集群中安装 AWS Load Balancer Operator

您可以在安全令牌服务(STS)集群上安装 AWS Load Balancer Operator。

AWS Load Balancer Operator 依赖于 CredentialsRequest 来引导 Operator 和每个 AWSLoadBalancerController 实例。AWS Load Balancer Operator 等待所需的 secret 创建并可用。Cloud Credential Operator 不会在 STS 集群中自动置备 secret。您必须使用 ccoctl 二进制文件手动设置凭证 secret。

如果您不想使用 Cloud Credential Operator 置备凭证 secret,您可以通过在 AWS Load Balancer Controller 自定义资源 (CR) 中指定凭证 secret 在 STS 集群上配置 AWSLoadBalancerController 实例。

22.4.1. 在安全令牌服务集群中引导 AWS Load Balancer Operator

先决条件

  • 您必须提取并准备 ccoctl 二进制文件。

流程

  1. 运行以下命令来创建 aws-load-balancer-operator 命名空间:

    $ 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. 运行以下命令应用在集群 manifests 目录中生成的 secret:

    $ ls manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
  5. 运行以下命令,验证 AWS Load Balancer Operator 的凭证 secret 是否已创建:

    $ 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 对象在安全令牌服务集群中配置 AWS Load Balancer Operator

先决条件

  • 您必须提取并准备 ccoctl 二进制文件。

流程

  1. AWS Load Balancer Operator 为每个 AWSLoadBalancerController 自定义资源 (CR) 在 openshift-cloud-credential-operator 命名空间中创建 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. 运行以下命令应用在集群 manifests 目录中生成的 secret:

    $ 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. 使用特定凭证在安全令牌服务集群中配置 AWS Load Balancer Operator

您可以使用 AWS Load Balancer Controller 自定义资源(CR) 中的 spec.credentials 字段指定凭证 secret。您可以使用控制器的预定义 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. 将 secret 应用到集群:

    $ ls manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
  4. 验证控制器是否已创建凭证 secret 以供控制器使用:

    $ 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 Controller 实例名称。此实例名称作为后缀添加到所有相关资源。
    3
    指定包含控制器使用的 AWS 凭证的 secret 名称。

22.4.4. 其他资源