21.4. 在使用 AWS STS 的集群中安装 AWS Load Balancer Operator


您可以在使用安全令牌服务 (STS) 的集群中安装 Amazon Web Services (AWS) Load Balancer Operator。在安装 Operator 前,按照以下步骤准备集群。

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

21.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
  • 已登陆到 AWS Web 控制台,进入到 IAM Access management Identity provider,以及 OIDC Amazon Resource Name (ARN) 信息。一个 OIDC ARN 示例为 arn:aws:iam::777777777777:oidc-provider/<oidc_dns_url>

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

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

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

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

21.4.2.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 个字符。

21.4.2.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": "<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 资源名称(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
  2. 运行以下命令,使用生成的信任策略创建 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
  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

21.4.3. 为 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: "<albo_role_arn>" 1
    EOF
    1
    指定 CredentialsRequest 中使用的 ARN 角色,以便为 AWS Load Balancer Operator 置备 AWS 凭证。一个 <albo_role_arn> 示例是 arn:aws:iam::<aws_account_number>:role/albo-operator
    注意

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

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

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

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

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

21.4.4.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 <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 个字符。

21.4.4.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": "<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 资源名称(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
  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::<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
  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: <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

21.4.5. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.