6.2. AWS Load Balancer Operator


6.2.1. AWS Load Balancer Operator 发行注记

AWS Load Balancer (ALB) Operator 部署和管理 AWSLoadBalancerController 资源的实例。

重要

AWS Load Balancer (ALB) Operator 仅在 x86_64 构架中被支持。

本发行注记介绍了 OpenShift Container Platform 中的 AWS Load Balancer Operator 的开发。

如需 AWS Load Balancer Operator 的概述,请参阅 OpenShift Container Platform 中的 AWS Load Balancer Operator

注意

AWS Load Balancer Operator 目前不支持 AWS GovCloud。

6.2.1.1. AWS Load Balancer Operator 1.1.1

以下公告可用于 AWS Load Balancer Operator 版本 1.1.1:

6.2.1.2. AWS Load Balancer Operator 1.1.0

AWS Load Balancer Operator 版本 1.1.0 支持 AWS Load Balancer Controller 版本 2.4.4。

以下公告可用于 AWS Load Balancer Operator 版本 1.1.0:

6.2.1.2.1. 主要变化
  • 此发行版本使用 Kubernetes API 版本 0.27.2。
6.2.1.2.2. 新功能
  • AWS Load Balancer Operator 现在支持使用 Cloud Credential Operator 的标准化安全令牌服务 (STS) 流。
6.2.1.2.3. 程序错误修复
  • FIPS 兼容集群必须使用 TLS 版本 1.2。在以前的版本中,AWS Load Balancer Controller 的 Webhook 只接受 TLS 1.3 作为最小版本,从而导致在与 FIPS 兼容的集群中出现以下错误:

    remote error: tls: protocol version not supported

    现在,AWS Load Balancer Controller 接受 TLS 1.2 作为最小 TLS 版本,从而解决了这个问题。(OCPBUGS-14846)

6.2.1.3. AWS Load Balancer Operator 1.0.1

以下公告可用于 AWS Load Balancer Operator 版本 1.0.1:

6.2.1.4. AWS Load Balancer Operator 1.0.0

现在,AWS Load Balancer Operator 已正式发布。AWS Load Balancer Operator 版本 1.0.0 支持 AWS Load Balancer Controller 版本 2.4.4。

以下公告可用于 AWS Load Balancer Operator 版本 1.0.0:

重要

AWS Load Balancer (ALB) Operator 版本 1.x.x 无法从技术预览版本 0.x.x 自动升级。要从早期版本升级,您必须卸载 ALB 操作对象并删除 aws-load-balancer-operator 命名空间。

6.2.1.4.1. 主要变化
  • 此发行版本使用新的 v1 API 版本。
6.2.1.4.2. 程序错误修复
  • 在以前的版本中,AWS Load Balancer Operator 置备的控制器无法正确将配置用于集群范围代理。这些设置现在对控制器正确应用。(OCPBUGS-4052, OCPBUGS-5295)

6.2.1.5. 早期版本

AWS Load Balancer Operator 的两个最早版本作为技术预览提供。这些版本不应在生产环境中使用。有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

以下公告可用于 AWS Load Balancer Operator 版本 0.2.0 :

以下公告可用于 AWS Load Balancer Operator 版本 0.0.1:

6.2.2. OpenShift Container Platform 中的 AWS Load Balancer Operator

AWS Load Balancer Operator 部署和管理 AWS Load Balancer Controller。您可以使用 OpenShift Container Platform Web 控制台或 CLI 安装来自 OperatorHub 的 AWS Load Balancer Operator。

6.2.2.1. AWS Load Balancer Operator 的注意事项

在安装和使用 AWS Load Balancer Operator 前查看以下限制:

  • IP 流量模式仅适用于 AWS Elastic Kubernetes Service (EKS)。AWS Load Balancer Operator 禁用 AWS Load Balancer Controller 的 IP 流量模式。禁用 IP 流量模式后,AWS Load Balancer Controller 无法使用 pod 就绪度。
  • AWS Load Balancer Operator 将命令行标记(如 --disable-ingress-class-annotation--disable-ingress-group-name-annotation )添加到 AWS Load Balancer Controller。因此,AWS Load Balancer Operator 不允许在 Ingress 资源中使用 kubernetes.io/ingress.classalb.ingress.kubernetes.io/group.name 注解。
  • 您已配置了 AWS Load Balancer Operator,使 SVC 类型是 NodePort (而不是 LoadBalancerClusterIP)。

6.2.2.2. AWS Load Balancer Operator

如果缺少 kubernetes.io/role/elb 标签,AWS Load Balancer Operator 可以标记公共子网。另外,AWS Load Balancer Operator 从底层 AWS 云检测到以下信息:

  • 托管 Operator 的集群的虚拟私有云 (VPC) 的 ID。
  • 发现 VPC 的公共和私有子网。

AWS Load Balancer Operator 支持类型为 LoadBalancer 的 Kubernetes 服务资源,使用只有 instance 目标类型的 Network Load Balancer (NLB)。

流程

  1. 您可以通过运行以下命令来创建 Subscription 对象,以按需部署 AWS Load Balancer Operator:

    $ oc -n aws-load-balancer-operator get sub aws-load-balancer-operator --template='{{.status.installplan.name}}{{"\n"}}'

    输出示例

    install-zlfbt

  2. 运行以下命令,检查安装计划的状态是否为 Complete

    $ oc -n aws-load-balancer-operator get ip <install_plan_name> --template='{{.status.phase}}{{"\n"}}'

    输出示例

    Complete

  3. 运行以下命令,查看 aws-load-balancer-operator-controller-manager 部署的状态:

    $ oc get -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager

    输出示例

    NAME                                           READY     UP-TO-DATE   AVAILABLE   AGE
    aws-load-balancer-operator-controller-manager  1/1       1            1           23h

6.2.2.3. 在 AWS VPC 集群中使用 AWS Load Balancer Operator 扩展至 Outpost

您可以配置 AWS Load Balancer Operator,以便在 AWS VPC 集群中置备 AWS Application Load Balancer。AWS Outposts 不支持 AWS Network Load Balancers。因此,AWS Load Balancer Operator 无法在 Outpost 中置备 Network Load Balancers。

您可以在云子网或 Outpost 子网中创建 AWS Application Load Balancer。云中的 Application Load Balancer 可以附加到基于云的计算节点,而 Outpost 中的 Application Load Balancer 可以附加到边缘计算节点。您必须使用 Outpost 子网或 VPC 子网来注解 Ingress 资源,但不能同时注解两者。

先决条件

  • 您已将 AWS VPC 集群扩展到 Outpost。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 AWS Load Balancer Operator 并创建了 AWS Load Balancer Controller。

流程

  • Ingress 资源配置为使用指定的子网:

    Ingress 资源配置示例

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: <application_name>
      annotations:
        alb.ingress.kubernetes.io/subnets: <subnet_id> 1
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Exact
                backend:
                  service:
                    name: <application_name>
                    port:
                      number: 80

    1
    指定要使用的子网。
    • 要在 Outpost 中使用 Application Load Balancer,请指定 Outpost 子网 ID。
    • 要在云中使用 Application Load Balancer,您必须在不同的可用区中指定至少两个子网。

6.2.2.4. AWS Load Balancer Operator 日志

您可以使用 oc logs 命令查看 AWS Load Balancer Operator 日志。

流程

  • 运行以下命令,查看 AWS Load Balancer Operator 的日志:

    $ oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager

6.2.3. 安装 AWS Load Balancer Operator

AWS Load Balancer Operator 部署和管理 AWS Load Balancer Controller。您可以使用 OpenShift Container Platform Web 控制台或 CLI 安装来自 OperatorHub 的 AWS Load Balancer Operator。

6.2.3.1. 使用 Web 控制台安装 AWS Load Balancer Operator

您可以使用 Web 控制台安装 AWS Load Balancer Operator。

先决条件

  • 已作为具有 cluster-admin 权限的用户身份登录 OpenShift Container Platform Web 控制台。
  • 集群被配置为使用 AWS 作为平台类型和云供应商。
  • 如果您使用安全令牌服务(STS)或用户置备的基础架构,请按照相关的准备步骤操作。例如,如果您使用 AWS 安全令牌服务,请参阅使用 AWS 安全令牌服务(STS) "在集群中准备 AWS Load Balancer Operator"。

流程

  1. 在 OpenShift Container Platform Web 控制台中进入 Operators OperatorHub
  2. 选择 AWS Load Balancer Operator。您可以使用 Filter by keyword 文本框,或者使用过滤器列表从 Operator 列表搜索 AWS Load Balancer Operator。
  3. 选择 aws-load-balancer-operator 命名空间。
  4. Install Operator 页面中,选择以下选项:

    1. 更新频道stable-v1
    2. 安装模式All namespaces on the cluster (default)
    3. Installed Namespaceaws-load-balancer-operator。如果 aws-load-balancer-operator 命名空间不存在,它会在 Operator 安装过程中创建。
    4. 选择 Update approvalAutomaticManual。默认情况下,Update approval 设置为 Automatic。如果选择自动更新,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需任何干预。如果选择手动更新,OLM 将创建一个更新请求。作为集群管理员,您必须手动批准该更新请求,以便将 Operator 更新至新版本。
  5. Install

验证

  • 在 Installed Operators 仪表板中验证 AWS Load Balancer Operator 的 Status 显示为 Succeeded

6.2.3.2. 使用 CLI 安装 AWS Load Balancer Operator

您可以使用 CLI 安装 AWS Load Balancer Operator。

先决条件

  • 以具有 cluster-admin 权限的用户身份登录 OpenShift Container Platform Web 控制台。
  • 集群被配置为使用 AWS 作为平台类型和云供应商。
  • 已登陆到 OpenShift CLI (oc)。

流程

  1. 创建一个 Namespace 对象:

    1. 创建定义 Namespace 对象的 YAML 文件:

      namespace.yaml 文件示例

      apiVersion: v1
      kind: Namespace
      metadata:
        name: aws-load-balancer-operator

    2. 运行以下命令来创建 Namespace 对象:

      $ oc apply -f namespace.yaml
  2. 创建一个 OperatorGroup 对象:

    1. 创建定义 OperatorGroup 对象的 YAML 文件:

      operatorgroup.yaml 文件示例

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: aws-lb-operatorgroup
        namespace: aws-load-balancer-operator
      spec:
        upgradeStrategy: Default

    2. 运行以下命令来创建 OperatorGroup 对象:

      $ oc apply -f operatorgroup.yaml
  3. 创建 Subscription 对象:

    1. 创建定义 Subscription 对象的 YAML 文件:

      subscription.yaml 文件示例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: aws-load-balancer-operator
        namespace: aws-load-balancer-operator
      spec:
        channel: stable-v1
        installPlanApproval: Automatic
        name: aws-load-balancer-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace

    2. 运行以下命令来创建 Subscription 对象:

      $ oc apply -f subscription.yaml

验证

  1. 从订阅中获取安装计划的名称:

    $ oc -n aws-load-balancer-operator \
        get subscription aws-load-balancer-operator \
        --template='{{.status.installplan.name}}{{"\n"}}'
  2. 检查安装计划的状态:

    $ oc -n aws-load-balancer-operator \
        get ip <install_plan_name> \
        --template='{{.status.phase}}{{"\n"}}'

    输出必须是 Complete

6.2.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 创建并可用。

6.2.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>

6.2.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。

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

6.2.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

6.2.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。

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

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

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

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

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

6.2.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

6.2.4.5. 其他资源

6.2.5. 创建 AWS Load Balancer Controller 实例

安装 AWS Load Balancer Operator 后,您可以创建 AWS Load Balancer Controller。

6.2.5.1. 创建 AWS Load Balancer Controller

您只能在集群中安装 AWSLoadBalancerController 对象的单个实例。您可以使用 CLI 创建 AWS Load Balancer Controller。AWS Load Balancer Operator 只协调名为 resource 的集群

先决条件

  • 您已创建了 echoserver 命名空间。
  • 您可以访问 OpenShift CLI(oc)。

流程

  1. 创建定义 AWSLoadBalancerController 对象的 YAML 文件:

    sample-aws-lb.yaml 文件示例

    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController 1
    metadata:
      name: cluster 2
    spec:
      subnetTagging: Auto 3
      additionalResourceTags: 4
      - key: example.org/security-scope
        value: staging
      ingressClass: alb 5
      config:
        replicas: 2 6
      enabledAddons: 7
        - AWSWAFv2 8

    1
    定义 AWSLoadBalancerController 对象。
    2
    定义 AWS Load Balancer Controller 名称。此实例名称作为后缀添加到所有相关资源。
    3
    配置 AWS Load Balancer Controller 的子网标记方法。以下值有效:
    • Auto :AWS Load Balancer Operator 决定属于集群的子网,并相应地标记它们。如果内部子网上不存在内部子网标签,Operator 无法正确确定角色。
    • Manual :您可以使用适当的角色标签手动标记属于集群的子网。如果在用户提供的基础架构上安装集群,则使用这个选项。
    4
    定义在置备 AWS 资源时 AWS Load Balancer Controller 使用的标签。
    5
    定义入口类名称。默认值为 alb
    6
    指定 AWS Load Balancer Controller 的副本数。
    7
    将注解指定为 AWS Load Balancer Controller 的附加组件。
    8
    启用 alb.ingress.kubernetes.io/wafv2-acl-arn 注解。
  2. 运行以下命令来创建 AWSLoadBalancerController 对象:

    $ oc create -f sample-aws-lb.yaml
  3. 创建定义 Deployment 资源的 YAML 文件:

    sample-aws-lb.yaml 文件示例

    apiVersion: apps/v1
    kind: Deployment 1
    metadata:
      name: <echoserver> 2
      namespace: echoserver
    spec:
      selector:
        matchLabels:
          app: echoserver
      replicas: 3 3
      template:
        metadata:
          labels:
            app: echoserver
        spec:
          containers:
            - image: openshift/origin-node
              command:
               - "/bin/socat"
              args:
                - TCP4-LISTEN:8080,reuseaddr,fork
                - EXEC:'/bin/bash -c \"printf \\\"HTTP/1.0 200 OK\r\n\r\n\\\"; sed -e \\\"/^\r/q\\\"\"'
              imagePullPolicy: Always
              name: echoserver
              ports:
                - containerPort: 8080

    1
    定义部署资源。
    2
    指定部署名称。
    3
    指定部署的副本数量。
  4. 创建定义 Service 资源的 YAML 文件:

    service-albo.yaml 文件示例

    apiVersion: v1
    kind: Service 1
    metadata:
      name: <echoserver> 2
      namespace: echoserver
    spec:
      ports:
        - port: 80
          targetPort: 8080
          protocol: TCP
      type: NodePort
      selector:
        app: echoserver

    1
    定义服务资源。
    2
    指定服务名称。
  5. 创建定义 Ingress 资源的 YAML 文件:

    ingress-albo.yaml 文件示例

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: <name> 1
      namespace: echoserver
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: instance
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Exact
                backend:
                  service:
                    name: <echoserver> 2
                    port:
                      number: 80

    1
    Ingress 资源指定一个名称。
    2
    指定服务名称。

验证

  • 运行以下命令,将 Ingress 资源的状态保存到 HOST 变量中:

    $ HOST=$(oc get ingress -n echoserver echoserver --template='{{(index .status.loadBalancer.ingress 0).hostname}}')
  • 运行以下命令,验证 Ingress 资源的状态:

    $ curl $HOST

6.2.6. 通过单个 AWS Load Balancer 提供多个入口资源

您可以通过单个 AWS Load Balancer 将流量路由到属于单个域的不同服务。每个 Ingress 资源提供域的不同端点。

6.2.6.1. 通过单个 AWS Load Balancer 创建多个入口资源

您可以使用 CLI 通过单个 AWS Load Balancer 将流量路由到多个入口资源。

先决条件

  • 您可以访问 OpenShift CLI(oc)。

流程

  1. 创建一个 IngressClassParams 资源 YAML 文件,如 sample-single-lb-params.yaml,如下所示:

    apiVersion: elbv2.k8s.aws/v1beta1 1
    kind: IngressClassParams
    metadata:
      name: single-lb-params 2
    spec:
      group:
        name: single-lb 3
    1
    定义 IngressClassParams 资源的 API 组和版本。
    2
    指定 IngressClassParams 资源名称。
    3
    指定 IngressGroup 资源名称。此类的所有 Ingress 资源都属于此 IngressGroup
  2. 运行以下命令来创建 IngressClassParams 资源:

    $ oc create -f sample-single-lb-params.yaml
  3. 创建 IngressClass 资源 YAML 文件,如 sample-single-lb-class.yaml,如下所示:

    apiVersion: networking.k8s.io/v1 1
    kind: IngressClass
    metadata:
      name: single-lb 2
    spec:
      controller: ingress.k8s.aws/alb 3
      parameters:
        apiGroup: elbv2.k8s.aws 4
        kind: IngressClassParams 5
        name: single-lb-params 6
    1
    定义 IngressClass 资源的 API 组和版本。
    2
    指定入口类名称。
    3
    定义控制器名称。ingress.k8s.aws/alb 值表示此类的所有入口资源都应由 AWS Load Balancer Controller 管理。
    4
    定义 IngressClassParams 资源的 API 组。
    5
    定义 IngressClassParams 资源的资源类型。
    6
    定义 IngressClassParams 资源名称。
  4. 运行以下命令来创建 IngressClass 资源:

    $ oc create -f sample-single-lb-class.yaml
  5. 创建 AWSLoadBalancerController 资源 YAML 文件,如 sample-single-lb.yaml,如下所示:

    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController
    metadata:
      name: cluster
    spec:
      subnetTagging: Auto
      ingressClass: single-lb 1
    1
    定义 IngressClass 资源的名称。
  6. 运行以下命令来创建 AWSLoadBalancerController 资源:

    $ oc create -f sample-single-lb.yaml
  7. 创建 Ingress 资源 YAML 文件,如 sample-multiple-ingress.yaml,如下所示:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-1 1
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing 2
        alb.ingress.kubernetes.io/group.order: "1" 3
        alb.ingress.kubernetes.io/target-type: instance 4
    spec:
      ingressClassName: single-lb 5
      rules:
      - host: example.com 6
        http:
            paths:
            - path: /blog 7
              pathType: Prefix
              backend:
                service:
                  name: example-1 8
                  port:
                    number: 80 9
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-2
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/group.order: "2"
        alb.ingress.kubernetes.io/target-type: instance
    spec:
      ingressClassName: single-lb
      rules:
      - host: example.com
        http:
            paths:
            - path: /store
              pathType: Prefix
              backend:
                service:
                  name: example-2
                  port:
                    number: 80
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-3
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/group.order: "3"
        alb.ingress.kubernetes.io/target-type: instance
    spec:
      ingressClassName: single-lb
      rules:
      - host: example.com
        http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: example-3
                  port:
                    number: 80
    1
    指定入口名称。
    2
    指明在公共子网中置备的负载均衡器,以访问互联网。
    3
    指定在负载均衡器收到请求时,来自多个入口资源的规则的顺序匹配。
    4
    表示负载均衡器将针对 OpenShift Container Platform 节点为目标,以访问该服务。
    5
    指定属于此入口的入口类。
    6
    定义用于请求路由的域名。
    7
    定义必须路由到服务的路径。
    8
    定义提供 Ingress 资源中配置的端点的服务名称。
    9
    定义服务上提供端点的端口。
  8. 运行以下命令来创建 Ingress 资源:

    $ oc create -f sample-multiple-ingress.yaml

6.2.7. 添加 TLS 终止

您可以在 AWS Load Balancer 上添加 TLS 终止。

6.2.7.1. 在 AWS Load Balancer 中添加 TLS 终止

您可以将域的流量路由到服务的 pod,并在 AWS 负载均衡器中添加 TLS 终止。

先决条件

  • 您可以访问 OpenShift CLI(oc)。

流程

  1. 创建定义 AWSLoadBalancerController 资源的 YAML 文件:

    add-tls-termination-albc.yaml 文件示例

    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController
    metadata:
      name: cluster
    spec:
      subnetTagging: Auto
      ingressClass: tls-termination 1

    1
    定义入口类名称。如果集群中没有 ingress 类,AWS Load Balancer Controller 会创建一个。如果 spec.controller 设置为 ingress.k8s.aws/alb,AWS Load Balancer Controller 会协调额外的入口类值。
  2. 创建定义 Ingress 资源的 YAML 文件:

    add-tls-termination-ingress.yaml 文件示例

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: <example> 1
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing 2
        alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxxx 3
    spec:
      ingressClassName: tls-termination 4
      rules:
      - host: <example.com> 5
        http:
            paths:
              - path: /
                pathType: Exact
                backend:
                  service:
                    name: <example-service> 6
                    port:
                      number: 80

    1
    指定入口名称。
    2
    控制器在公共子网中为入口置备负载均衡器,以便通过互联网访问负载均衡器。
    3
    附加到负载均衡器的证书的 Amazon 资源名称(ARN)。
    4
    定义入口类名称。
    5
    定义流量路由的域。
    6
    定义流量路由的服务。

6.2.8. 配置集群范围代理

您可以在 AWS Load Balancer Operator 中配置集群范围代理。配置集群范围代理后,Operator Lifecycle Manager (OLM) 会使用 HTTP_PROXYHTTPS_PROXYNO_PROXY 等环境变量自动更新 Operator 的所有部署。这些变量由 AWS Load Balancer Operator 填充给受管控制器。

6.2.8.1. 信任集群范围代理的证书颁发机构

  1. 运行以下命令,创建配置映射以在 aws-load-balancer-operator 命名空间中包含证书颁发机构 (CA) 捆绑包:

    $ oc -n aws-load-balancer-operator create configmap trusted-ca
  2. 要将可信 CA 捆绑包注入配置映射中,请运行以下命令将 config.openshift.io/inject-trusted-cabundle=true 标签添加到配置映射中:

    $ oc -n aws-load-balancer-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true
  3. 运行以下命令,更新 AWS Load Balancer Operator 订阅以访问 AWS Load Balancer Operator 部署中的配置映射:

    $ oc -n aws-load-balancer-operator patch subscription aws-load-balancer-operator --type='merge' -p '{"spec":{"config":{"env":[{"name":"TRUSTED_CA_CONFIGMAP_NAME","value":"trusted-ca"}],"volumes":[{"name":"trusted-ca","configMap":{"name":"trusted-ca"}}],"volumeMounts":[{"name":"trusted-ca","mountPath":"/etc/pki/tls/certs/albo-tls-ca-bundle.crt","subPath":"ca-bundle.crt"}]}}}'
  4. 部署 AWS Load Balancer Operator 后,运行以下命令来验证 CA 捆绑包是否已添加到 aws-load-balancer-operator-controller-manager 部署中:

    $ oc -n aws-load-balancer-operator exec deploy/aws-load-balancer-operator-controller-manager -c manager -- bash -c "ls -l /etc/pki/tls/certs/albo-tls-ca-bundle.crt; printenv TRUSTED_CA_CONFIGMAP_NAME"

    输出示例

    -rw-r--r--. 1 root 1000690000 5875 Jan 11 12:25 /etc/pki/tls/certs/albo-tls-ca-bundle.crt
    trusted-ca

  5. 可选:通过运行以下命令,每次 configmap 发生变化时重启 AWS Load Balancer Operator 的部署:

    $ oc -n aws-load-balancer-operator rollout restart deployment/aws-load-balancer-operator-controller-manager

6.2.8.2. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.