$ curl --create-dirs -o <credentials_requests_dir>/operator.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-credentials-request.yaml
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 实用程序 (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 资源名称 (ARN),例如 arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator 。 |
AWS IAM 角色名称的长度必须小于或等于 12 个字符。 |
您可以使用 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 资源名称 (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 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 本地区域中。 |
通过运行以下命令识别集群基础架构 ID 和集群 OpenID Connect (OIDC) DNS
识别 ROSA 集群 ID
$ rosa describe cluster --cluster=<cluster_name> | grep -i 'Infra ID'
或
$ oc get infrastructure cluster -o json | jq -r '.status.infrastructureName'
使用以下 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}"
通过导航到 **IAM** **访问管理** **身份提供商** 在 AWS Web 控制台中找到 OIDC Amazon 资源名称 (ARN) 信息。OIDC ARN 示例为 arn:aws:iam::777777777777:oidc-provider/<oidc_dns_url>
。
保存命令的输出。您将在本步骤的后续步骤中使用此信息。
使用 AWS CLI 创建 AWS Load Balancer Operator 所需的 AWS IAM 策略。
以具有 dedicated-admin
角色的用户身份登录到 ROSA 集群,并使用以下命令创建一个新项目
$ oc new-project aws-load-balancer-operator
将以下信任策略分配给新创建的 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。 |
验证信任策略是否已分配给 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 替换 |
使用生成的信任策略创建并验证角色
$ 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 角色的 |
将操作符的权限策略附加到角色
$ 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 CLI 创建 AWS Load Balancer Controller 所需的 AWS IAM 策略
为您的身份提供商生成信任策略文件。以下示例使用 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
使用生成的信任策略创建并验证角色
$ 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 角色的 |
将控制器的权限策略附加到角色
$ 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
对于具有 HCP 集群的 ROSA,请添加子网发现所需的标签
将以下 {Key: Value}
标签添加到托管 ROSA 集群及其所有子网的 VPC。将 {Cluster Infra ID}
替换为前面指定的 Infra ID
kubernetes.io/cluster/${Cluster Infra ID}:owned
将以下 ELBv2 {Key: Value}
标签添加到专用子网,以及可选的公共子网
专用子网:kubernetes.io/role/internal-elb:1
公共子网:kubernetes.io/role/elb:1
面向 Internet 和内部负载均衡器将在这些子网所属的 AWS 可用区内创建。 |
AWS Load Balancer Operator 创建的 ELBv2 资源(例如 ALB 和 NLB)不会继承为 ROSA 集群设置的自定义标签。您必须为这些资源单独设置标签。 |
完成以下步骤创建 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: "<operator_role_arn>" (1)
EOF
1 | 指定 AWS 负载均衡器操作员的 ARN 角色。CredentialsRequest 对象使用此 ARN 角色来预配 AWS 凭证。<operator_role_arn> 的示例为 arn:aws:iam::<aws_account_number>:role/albo-operator 。 |
创建 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 可用区,而不能同时关联两者。 |
运行以下命令确认安装成功
收集项目中 Pod 的信息
$ oc get pods -n aws-load-balancer-operator
查看项目中的日志
$ oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager
有关向 AWS IAM 角色分配信任策略的更多信息,请参见 如何使用 IAM 角色的信任策略。
有关创建 AWS IAM 角色的更多信息,请参见 创建 IAM 角色。
有关向 AWS IAM 角色添加 AWS IAM 权限的更多信息,请参见 添加和删除 IAM 身份权限。
有关格式化凭证文件的更多信息,请参见 使用 Amazon Web Services 安全令牌服务的手动模式。
有关向 AWS 资源(包括 VPC 和子网)添加标签的更多信息,请参见 标记您的 Amazon EC2 资源。
有关验证为在 ROSA 集群中运行的应用程序创建了 ELBv2 的详细说明,请参见 创建 AWS 负载均衡器控制器的实例。
要卸载 AWS 负载均衡器操作员并对相关资源进行全面清理,请执行以下步骤。
通过删除 ALBO 创建和管理的负载均衡器来清理示例应用程序。有关删除负载均衡器的更多信息,请参见 删除应用程序负载均衡器。
通过删除添加到子网以发现子网和创建应用程序负载均衡器 (ALB) 的 VPC 标签来清理 AWS VPC 标签。有关更多信息,请参见 标签基础知识。
通过删除 AWS 负载均衡器操作员和应用程序负载均衡器控制器来清理 AWS 负载均衡器操作员组件。有关更多信息,请参见 从集群中删除操作员。