第 2 章 网络 Operator


2.1. AWS Load Balancer Operator

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

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

2.1.2. 使用 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 个字符。

2.1.3. 安装 AWS Load Balancer Operator

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

先决条件

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

安装 AWS Load Balancer Operator 以与 AWS Local Zone (LZ)中的 ROSA 集群一起使用时,您必须为帐户启用 AWS Local Zone。另外,您必须确保 AWS Local Zone 中存在 AWS Elastic Load Balancing v2 (ELBv2)服务。

流程

  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 Access Management Identity provider,在 AWS Web 控制台上找到 OIDC Amazon Resource Name (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. 验证 trsut 策略是否已分配给 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

      重要

      在将 {Cluster_OIDC_Endpoint} 替换为之前标识的 OIDC DNS 时,不要包含 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 Load Balancer Operator 创建 AWS IAM 角色警告,如 arn:aws:iam::777777777:role/albo-operator

    5. 将 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
  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 Load Balancer Controller 创建的 AWS IAM 角色警告,如 arn:aws:iam::777777777: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

        注意

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

        重要

        AWS Load Balancer Operator 创建的 ELBv2 资源(如 ALBs 和 NLBs)不会继承 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 Load Balancer Operator 的 ARN 角色。CredentialsRequest 对象使用此 ARN 角色来置备 AWS 凭证。例如,&lt ;operator_role_arn> 示例为 arn:aws:iam::<aws_account_number>:role/albo-operator
  6. 创建 AWS Load Balancer Controller:

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

    因为 AWS Load Balancer Controller 不支持创建与 AWS Availability Zones 和 AWS Local Zones 关联的 AWS Load Balancers (ALBs),所以 ROSA 集群可以有专门与 AWS Local Zones 或 AWS 可用区关联的 ALB,但不能同时关联。

验证

  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

其他资源

2.1.4. 卸载 AWS Load Balancer Operator

要卸载 AWS Load Balancer Operator 并对相关资源执行整体清理,请执行以下步骤。

流程

  1. 通过删除由 ALBO 创建和管理的 Load Balancers 来清理示例应用程序。有关删除负载均衡器的更多信息,请参阅 删除应用程序负载均衡器
  2. 删除添加到子网中的 VPC 标签,以及创建 Application Load Balancers (ALBs)来清理 AWS VPC 标签。如需更多信息,请参阅 标签基础知识
  3. 通过删除 AWS Load Balancer Operator 和 Application Load Balancer Controller 来清理 AWS Load Balancer Operator 组件。如需更多信息,请参阅 从集群中删除 Operator
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.