21.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 创建并可用。
21.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>
。
21.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。
21.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 个字符。
21.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
21.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。
21.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。
21.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 个字符。
21.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