搜索

第 3 章 AWS Load Balancer Operator

download PDF

AWS Load Balancer Operator (ALBO)是红帽支持的 Operator,用户可以选择性地在 SRE 管理的 Red Hat OpenShift Service on AWS (ROSA)集群上安装。ALBO 管理 AWS 管理的 AWS Load Balancer Controller (ALBC)的生命周期,它为在 ROSA 集群中运行的应用程序置备 AWS Elastic Load Balancing v2 (ELBv2)服务。

3.1. 安装 AWS Load Balancer Operator

如果满足某些要求,您可以安装 AWS Load Balancer Operator (ALBO)。

先决条件

  • 您有一个现有的 Red Hat OpenShift Service on AWS (ROSA)集群,且在多个可用区(AZ)模式下安装有 bring-your-own-VPC (BYO-VPC)配置。
  • 您可以使用具有 dedicated-admin 角色的用户访问集群。
  • 您可以访问创建的 ROSA 集群的 VPC 和子网。
  • 已安装 ROSA CLI (rosa)。
  • 已安装 Amazon Web Services (AWS) CLI。
  • 已安装 OpenShift CLI(oc)。
  • 您使用 OpenShift Container Platform (OCP) 4.13 或更高版本。
重要

当安装 ALBO 以用于 AWS Local Zone (LZ)中的 ROSA 集群时,您必须为帐户启用 AWS LZ,并且 AWS Elastic Load Balancing v2 (ELBv2)服务必须在 AWS LZ 中提供。

流程

  1. 运行以下命令,识别集群基础架构 ID 和集群 OpenID Connect (OIDC) DNS:

    1. 确定 ROSA 集群 INFRA ID:

      $ rosa describe cluster --cluster=<cluster_name> | grep -i 'Infra ID'

      $ oc get infrastructure cluster -o json | jq -r '.status.infrastructureName'
    2. 识别 ROSA 集群 OIDC DNS:

      $ rosa describe cluster --cluster=<cluster_name> | grep -i 'OIDC'

      保存命令的输出。您将在此过程中在以后的步骤中使用此信息。

  2. 创建 ALBO 所需的 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
      $ 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
      1
      将 '{AWS_AccountNo}' 替换为您的 AWS 帐户号,将 '{Cluster_OIDC_Endpoint}' 替换为此流程前面标识的 OIDC DNS。
      重要

      在将 {Cluster_OIDC_Endpoint} 替换为之前标识的 OIDC DNS 时,不要包含 OIDC DNS URL 的 https 部分。只需要在 URL 中遵循 / 的字母数字信息。

      有关为 AWS IAM 角色分配信任策略的更多信息,请参阅 如何将信任策略与 IAM 角色一起使用

    3. 使用生成的信任策略创建并验证角色:

      $ 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

      有关创建 AWS IAM 角色的更多信息,请参阅创建 IAM 角色

    4. 将 Operator 的权限策略附加到角色:

      $ 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

      有关在 AWS IAM 角色中添加 AWS IAM 权限的更多信息,请参阅 添加和删除 IAM 身份权限

    5. 生成 Operator 的 AWS 凭证:

      $ cat <<EOF> albo-operator-aws-credentials.cfg
      [default]
      sts_regional_endpoints = regional
      role_arn = ${OPERATOR_ROLE_ARN}
      web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token
      EOF

      有关格式化凭证文件的更多信息,请参阅 在 Amazon Web Services Security Token Service 中使用手动模式

    6. 使用生成的 AWS 凭证创建 Operator 凭证 secret:

      $ oc -n aws-load-balancer-operator create secret generic aws-load-balancer-operator --from-file=credentials=albo-operator-aws-credentials.cfg
  3. 创建 AWS Load Balancer Controller (ALBC)所需的 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
    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. 生成控制器的 AWS 凭证:

      $ cat <<EOF > albo-controller-aws-credentials.cfg
      [default]
      sts_regional_endpoints = regional
      role_arn = ${CONTROLLER_ROLE_ARN}
      web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token
      EOF
    5. 使用生成的 AWS 凭证创建控制器的凭证 secret:

      $ oc -n aws-load-balancer-operator create secret generic aws-load-balancer-controller-cluster --from-file=credentials=albo-controller-aws-credentials.cfg
  4. 为子网发现添加所需的标签:

    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

        注意

        面向互联网和内部负载均衡器将在这些子网所属的 AZ 中创建。

        有关向 AWS 资源添加标签(包括 VPC 和子网)的更多信息,请参阅 标记 Amazon EC2 资源

        重要

        ELBv2 资源(如 ALBO 创建的 ALB 和 NLBs)不会继承为 ROSA 集群设置的自定义标签。您必须单独为这些资源设置标签。

  5. 创建 ALBO:

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: aws-load-balancer-operator
      namespace: aws-load-balancer-operator
    spec:
      upgradeStrategy: Default
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: aws-load-balancer-operator
      namespace: aws-load-balancer-operator
    spec:
      channel: stable-v1.0
      installPlanApproval: Automatic
      name: aws-load-balancer-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      startingCSV: aws-load-balancer-operator.v1.0.0
  6. 创建 AWS ALBC:

    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController
    metadata:
      name: cluster
    spec:
      subnetTagging: Manual
      credentials:
        name: aws-load-balancer-controller-cluster
    重要

    因为 AWS ALBC 不支持创建与 AZ 和 AWS LZs 关联的 ALB,所以 ROSA 集群可以完全与 AWS LZ 或 AZ 关联,但不能同时创建 ALB。

    有关 AWS ALBC 配置的更多信息,请参阅以下主题:

验证

  • 运行以下命令来确认安装成功:

    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

      有关验证为 ROSA 集群中运行的应用程序创建了 ELBv2 的详细信息,请参阅创建 AWS Load Balancer Controller 实例

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.