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.class
和alb.ingress.kubernetes.io/group.name
注解。 -
您已配置了 AWS Load Balancer Operator,使 SVC 类型是
NodePort
(而不是LoadBalancer
或ClusterIP
)。
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)。
流程
您可以通过运行以下命令来创建
Subscription
对象,以按需部署 AWS Load Balancer Operator:$ oc -n aws-load-balancer-operator get sub aws-load-balancer-operator --template='{{.status.installplan.name}}{{"\n"}}'
输出示例
install-zlfbt
运行以下命令,检查安装计划的状态是否为
Complete
:$ oc -n aws-load-balancer-operator get ip <install_plan_name> --template='{{.status.phase}}{{"\n"}}'
输出示例
Complete
运行以下命令,查看
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"。
流程
-
在 OpenShift Container Platform Web 控制台中进入 Operators
OperatorHub。 - 选择 AWS Load Balancer Operator。您可以使用 Filter by keyword 文本框,或者使用过滤器列表从 Operator 列表搜索 AWS Load Balancer Operator。
-
选择
aws-load-balancer-operator
命名空间。 在 Install Operator 页面中,选择以下选项:
- 更新频道为 stable-v1。
- 安装模式 为 All namespaces on the cluster (default)。
-
Installed Namespace 为
aws-load-balancer-operator
。如果aws-load-balancer-operator
命名空间不存在,它会在 Operator 安装过程中创建。 - 选择 Update approval 为 Automatic 或 Manual。默认情况下,Update approval 设置为 Automatic。如果选择自动更新,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需任何干预。如果选择手动更新,OLM 将创建一个更新请求。作为集群管理员,您必须手动批准该更新请求,以便将 Operator 更新至新版本。
- 点 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
)。
流程
创建一个
Namespace
对象:创建定义
Namespace
对象的 YAML 文件:namespace.yaml
文件示例apiVersion: v1 kind: Namespace metadata: name: aws-load-balancer-operator
运行以下命令来创建
Namespace
对象:$ oc apply -f namespace.yaml
创建一个
OperatorGroup
对象:创建定义
OperatorGroup
对象的 YAML 文件:operatorgroup.yaml
文件示例apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: aws-lb-operatorgroup namespace: aws-load-balancer-operator spec: upgradeStrategy: Default
运行以下命令来创建
OperatorGroup
对象:$ oc apply -f operatorgroup.yaml
创建
Subscription
对象:创建定义
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
运行以下命令来创建
Subscription
对象:$ oc apply -f subscription.yaml
验证
从订阅中获取安装计划的名称:
$ oc -n aws-load-balancer-operator \ get subscription aws-load-balancer-operator \ --template='{{.status.installplan.name}}{{"\n"}}'
检查安装计划的状态:
$ 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 角色:
-
使用 Cloud Credential Operator 实用程序 (
ccoctl
) 和预定义的CredentialsRequest
对象。 - 使用 AWS CLI 和预定义的 AWS 清单。
如果您的环境不支持 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
二进制文件。
流程
运行以下命令,下载
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
运行以下命令,使用
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
)。
流程
运行以下命令,使用身份提供程序生成信任策略文件:
$ 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
运行以下命令,使用生成的信任策略创建 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
。
运行以下命令,下载 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
运行以下命令,将 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
)。
流程
运行以下命令来创建
aws-load-balancer-operator
项目:$ oc new-project aws-load-balancer-operator
运行以下命令来创建
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
运行以下命令来创建
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 角色:
-
使用 Cloud Credential Operator 实用程序 (
ccoctl
) 和预定义的CredentialsRequest
对象。 - 使用 AWS CLI 和预定义的 AWS 清单。
如果您的环境不支持 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
二进制文件。
流程
运行以下命令,下载
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
运行以下命令,使用
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
)。
流程
运行以下命令,使用身份提供程序生成信任策略文件:
$ 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
运行以下命令,使用生成的信任策略创建 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
。
运行以下命令,下载 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
运行以下命令,将 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
创建定义
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
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
)。
流程
创建定义
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
注解。
运行以下命令来创建
AWSLoadBalancerController
对象:$ oc create -f sample-aws-lb.yaml
创建定义
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
创建定义
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
创建定义
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
验证
运行以下命令,将
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
)。
流程
创建一个
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
运行以下命令来创建
IngressClassParams
资源:$ oc create -f sample-single-lb-params.yaml
创建
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
运行以下命令来创建
IngressClass
资源:$ oc create -f sample-single-lb-class.yaml
创建
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
资源的名称。
运行以下命令来创建
AWSLoadBalancerController
资源:$ oc create -f sample-single-lb.yaml
创建
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
运行以下命令来创建
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
)。
流程
创建定义
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 会协调额外的入口类值。
创建定义
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
6.2.8. 配置集群范围代理
您可以在 AWS Load Balancer Operator 中配置集群范围代理。配置集群范围代理后,Operator Lifecycle Manager (OLM) 会使用 HTTP_PROXY
、HTTPS_PROXY
和 NO_PROXY
等环境变量自动更新 Operator 的所有部署。这些变量由 AWS Load Balancer Operator 填充给受管控制器。
6.2.8.1. 信任集群范围代理的证书颁发机构
运行以下命令,创建配置映射以在
aws-load-balancer-operator
命名空间中包含证书颁发机构 (CA) 捆绑包:$ oc -n aws-load-balancer-operator create configmap trusted-ca
要将可信 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
运行以下命令,更新 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"}]}}}'
部署 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
可选:通过运行以下命令,每次 configmap 发生变化时重启 AWS Load Balancer Operator 的部署:
$ oc -n aws-load-balancer-operator rollout restart deployment/aws-load-balancer-operator-controller-manager