×

AWS Load Balancer Operator 是 Red Hat 支持的操作符,用户可以选择将其安装在 SRE 管理的 AWS 上的 Red Hat OpenShift 服务 (ROSA) 集群上。AWS Load Balancer Operator 管理 AWS Load Balancer Controller 的生命周期,该控制器为在 ROSA 集群中运行的应用程序提供 AWS 弹性负载均衡 v2 (ELBv2) 服务。

使用 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 资源名称 (ARN),例如 arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator

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

使用 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 资源名称 (ARN),例如 arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-controller

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

安装 AWS Load Balancer Operator

如果您满足某些要求,则可以安装 AWS Load Balancer Operator 和 AWS Load Balancer Controller。

先决条件
  • 您有一个现有的 Red Hat OpenShift Service on AWS (ROSA) 集群,该集群在托管控制平面 (HCP) 模式下安装,并具有跨多个可用区 (AZ) 的自备 VPC (BYO-VPC) 配置。

  • 您可以作为具有 dedicated-admin 角色的用户访问集群。

  • 您可以修改已创建的 ROSA 集群的 VPC 和子网。

  • 您已安装 ROSA CLI (rosa)。

  • 您已安装 Amazon Web Services (AWS) CLI。

  • 您使用的是 OpenShift Container Platform 4.13 或更高版本。

在为在 AWS 本地区域 (LZ) 中使用的 ROSA 集群安装 AWS Load Balancer Operator 时,必须为该帐户启用 AWS 本地区域。此外,您必须确保 AWS 弹性负载均衡 v2 (ELBv2) 服务存在于 AWS 本地区域中。

步骤
  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. 通过导航到 **IAM** **访问管理** **身份提供商** 在 AWS Web 控制台中找到 OIDC Amazon 资源名称 (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

      用前面识别的 OIDC DNS 替换 {Cluster_OIDC_Endpoint} 时,请不要包含 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 IAM 角色的 arn 是为 AWS Load Balancer Operator 创建的,例如 arn:aws:iam::777777777777:role/albo-operator

    5. 将操作符的权限策略附加到角色

      $ 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 IAM 角色的 arn 是为 AWS Load Balancer Controller 创建的,例如 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. 对于具有 HCP 集群的 ROSA,请添加子网发现所需的标签

    1. 将以下 {Key: Value} 标签添加到托管 ROSA 集群及其所有子网的 VPC。将 {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

        面向 Internet 和内部负载均衡器将在这些子网所属的 AWS 可用区内创建。

        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 负载均衡器操作员的 ARN 角色。CredentialsRequest 对象使用此 ARN 角色来预配 AWS 凭证。<operator_role_arn> 的示例为 arn:aws:iam::<aws_account_number>:role/albo-operator
  6. 创建 AWS 负载均衡器控制器

    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController
    metadata:
      name: cluster
    spec:
      subnetTagging: Manual
      credentialsRequestConfig:
        stsIAMRoleARN: <controller_role_arn>

    由于 AWS 负载均衡器控制器不支持创建同时关联 AWS 可用区和 AWS 本地区的 AWS 负载均衡器 (ALB),因此 ROSA 集群的 ALB 只能独占地关联 AWS 本地区或 AWS 可用区,而不能同时关联两者。

验证
  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
其他资源

卸载 AWS 负载均衡器操作员

要卸载 AWS 负载均衡器操作员并对相关资源进行全面清理,请执行以下步骤。

步骤
  1. 通过删除 ALBO 创建和管理的负载均衡器来清理示例应用程序。有关删除负载均衡器的更多信息,请参见 删除应用程序负载均衡器

  2. 通过删除添加到子网以发现子网和创建应用程序负载均衡器 (ALB) 的 VPC 标签来清理 AWS VPC 标签。有关更多信息,请参见 标签基础知识

  3. 通过删除 AWS 负载均衡器操作员和应用程序负载均衡器控制器来清理 AWS 负载均衡器操作员组件。有关更多信息,请参见 从集群中删除操作员