23.4. 使用 AWS 安全令牌服务 在集群中准备 AWS Load Balancer Operator

您可以在使用 STS 的集群中安装 AWS Load Balancer Operator。在安装 Operator 前,按照以下步骤准备集群。

AWS Load Balancer Operator 依赖于 CredentialsRequest 对象来引导 Operator 和 AWS Load Balancer Controller。AWS Load Balancer Operator 等待所需的 secret 创建并可用。

23.4.1. 为 AWS Load Balancer Operator 创建 IAM 角色

需要额外的 AWS Identity and Access Management (IAM) 角色,才能在使用 STS 的集群中安装 AWS Load Balancer Operator。需要 IAM 角色与子网和虚拟私有云(VPC)交互。AWS Load Balancer Operator 使用 IAM 角色生成 CredentialsRequest 对象来引导其自身。

您可以使用以下选项创建 IAM 角色:

如果您的环境不支持 ccoctl 命令,请使用 AWS CLI。

23.4.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 <credrequests-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=<credrequests-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/<credrequests-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 IAM 角色的 Amazon 资源名称(ARN)。
    注意

    AWS IAM 角色名称的长度必须小于或等于 12 个字符。

23.4.1.2. 使用 AWS CLI 创建 AWS IAM 角色

您可以使用 AWS 命令行界面为 AWS Load Balancer Operator 创建 IAM 角色。IAM 角色用于与子网和虚拟私有云 (VPC) 交互。

先决条件

  • 您必须有权访问 AWS 命令行界面 (aws)。

流程

  1. 运行以下命令,使用身份提供程序生成信任策略文件:

    $ cat <<EOF > albo-operator-trust-policy.json
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Federated": "arn:aws:iam::777777777777:oidc-provider/<oidc-provider-id>" 1
                },
                "Action": "sts:AssumeRoleWithWebIdentity",
                "Condition": {
                    "StringEquals": {
                        "<oidc-provider-id>:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager" 2
                    }
                }
            }
        ]
    }
    EOF
    1
    指定身份提供程序的 Amazon 资源名称 (ARN)。
    2
    指定 AWS Load Balancer Operator 的服务帐户。
  2. 运行以下命令,使用生成的信任策略创建 IAM 角色:

    $ aws iam create-role --role-name albo-operator --assume-role-policy-document file://albo-operator-trust-policy.json

    输出示例

    ROLE	arn:aws:iam::777777777777: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:777777777777:oidc-provider/<oidc-provider-id>

    1
    记录创建的 IAM 角色的 ARN。
  3. 运行以下命令,下载 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
  4. 运行以下命令,将 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

23.4.2. 为 AWS Load Balancer Operator 配置 ARN 角色

您可以将 AWS Load Balancer Operator 的 Amazon 资源名称 (ARN) 角色配置为环境变量。您可以使用 CLI 配置 ARN 角色。

先决条件

  • 已安装 OpenShift CLI(oc)。

流程

  1. 运行以下命令来创建 aws-load-balancer-operator 项目:

    $ oc new-project aws-load-balancer-operator
  2. 运行以下命令来创建 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
  3. 运行以下命令来创建 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: "<role-arn>" 1
    EOF
    1
    指定 CredentialsRequest 中使用的 ARN 角色,以便为 AWS Load Balancer Operator 置备 AWS 凭证。
    注意

    AWS Load Balancer Operator 会在进入 Available 状态前等待创建 secret。

23.4.3. 为 AWS Load Balancer Controller 创建 IAM 角色

AWS Load Balancer Controller 的 CredentialsRequest 对象必须使用手动置备的 IAM 角色设置。

您可以使用以下选项创建 IAM 角色:

如果您的环境不支持 ccoctl 命令,请使用 AWS CLI。

23.4.3.1. 使用 Cloud Credential Operator 实用程序为控制器创建 AWS IAM 角色

您可以使用 Cloud Credential Operator 实用程序(ccoctl) 为 AWS Load Balancer Controller 创建 AWS IAM 角色。AWS IAM 角色用于与子网和虚拟私有云 (VPC) 交互。

先决条件

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

流程

  1. 运行以下命令,下载 CredentialsRequest 自定义资源 (CR) 并将其存储在目录中:

    $ curl --create-dirs -o <credrequests-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=<credrequests-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/<credrequests-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 IAM 角色的 Amazon 资源名称(ARN)。
    注意

    AWS IAM 角色名称的长度必须小于或等于 12 个字符。

23.4.3.2. 使用 AWS CLI 为控制器创建 AWS IAM 角色

您可以使用 AWS 命令行界面为 AWS Load Balancer Controller 创建 AWS IAM 角色。AWS IAM 角色用于与子网和虚拟私有云 (VPC) 交互。

先决条件

  • 您必须有权访问 AWS 命令行界面 (aws)。

流程

  1. 运行以下命令,使用身份提供程序生成信任策略文件:

    $ cat <<EOF > albo-controller-trust-policy.json
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Federated": "arn:aws:iam::777777777777:oidc-provider/<oidc-provider-id>" 1
                },
                "Action": "sts:AssumeRoleWithWebIdentity",
                "Condition": {
                    "StringEquals": {
                        "<oidc-provider-id>:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-cluster" 2
                    }
                }
            }
        ]
    }
    EOF
    1
    指定身份提供程序的 Amazon 资源名称 (ARN)。
    2
    指定 AWS Load Balancer Controller 的服务帐户。
  2. 运行以下命令,使用生成的信任策略创建 AWS IAM 角色:

    $ aws iam create-role --role-name albo-controller --assume-role-policy-document file://albo-controller-trust-policy.json

    输出示例

    ROLE	arn:aws:iam::777777777777: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:777777777777:oidc-provider/<oidc-provider-id>

    1
    记录 AWS IAM 角色的 ARN。
  3. 运行以下命令,下载 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
  4. 运行以下命令,将 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
  5. 创建定义 AWSLoadBalancerController 对象的 YAML 文件:

    sample-aws-lb-manual-creds.yaml 文件示例:

    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController 1
    metadata:
      name: cluster 2
    spec:
      credentialsRequestConfig:
        stsIAMRoleARN: <role-arn> 3

    1
    定义 AWSLoadBalancerController 对象。
    2
    定义 AWS Load Balancer Controller 名称。所有相关资源都使用此实例名称作为后缀。
    3
    指定 ARN 角色。CredentialsRequest 对象使用此 ARN 角色来置备 AWS 凭证。

23.4.4. 其他资源