20.4. 使用 AWS 安全令牌服务在集群中准备 AWS Load Balancer Operator
您可以在使用 STS 的集群中安装 AWS Load Balancer Operator。在安装 Operator 前,按照以下步骤准备集群。
AWS Load Balancer Operator 依赖于 CredentialsRequest
对象来引导 Operator 和 AWS Load Balancer Controller。AWS Load Balancer Operator 等待所需的 secret 创建并可用。Cloud Credential Operator 不会在 STS 集群中自动置备 secret。您必须使用 ccoctl
二进制文件手动设置凭证 secret。
如果您不想使用 Cloud Credential Operator 置备凭证 secret,您可以通过在 AWS Load Balancer Controller 自定义资源 (CR) 中指定凭证 secret 在 STS 集群上配置 AWSLoadBalancerController
实例。
20.4.1. 在安全令牌服务集群中引导 AWS Load Balancer Operator
先决条件
-
您必须提取并准备
ccoctl
二进制文件。
流程
运行以下命令来创建
aws-load-balancer-operator
命名空间:$ oc create namespace aws-load-balancer-operator
运行以下命令,下载 AWS Load Balancer Operator 的
CredentialsRequest
自定义资源 (CR),并创建一个目录来存储它:$ curl --create-dirs -o <path-to-credrequests-dir>/cr.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-credentials-request.yaml
运行以下命令,使用
ccoctl
工具处理 AWS Load Balancer Operator 的CredentialsRequest
对象:$ ccoctl aws create-iam-roles \ --name <name> --region=<aws_region> \ --credentials-requests-dir=<path-to-credrequests-dir> \ --identity-provider-arn <oidc-arn>
运行以下命令应用在集群 manifests 目录中生成的 secret:
$ ls manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
运行以下命令,验证 AWS Load Balancer Operator 的凭证 secret 是否已创建:
$ oc -n aws-load-balancer-operator get secret aws-load-balancer-operator --template='{{index .data "credentials"}}' | base64 -d
输出示例
[default] sts_regional_endpoints = regional role_arn = arn:aws:iam::999999999999:role/aws-load-balancer-operator-aws-load-balancer-operator web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token
20.4.2. 使用受管 CredentialsRequest
对象在安全令牌服务集群中配置 AWS Load Balancer Operator
先决条件
-
您必须提取并准备
ccoctl
二进制文件。
流程
AWS Load Balancer Operator 为每个
AWSLoadBalancerController
自定义资源 (CR) 在openshift-cloud-credential-operator
命名空间中创建CredentialsRequest
对象。您可以运行以下命令来将创建的CredentialsRequest
对象提取到目录中:$ oc get credentialsrequest -n openshift-cloud-credential-operator \ aws-load-balancer-controller-<cr-name> -o yaml > <path-to-credrequests-dir>/cr.yaml 1
- 1
aws-load-balancer-controller-<cr-name>
参数指定 AWS Load Balancer Operator 创建的凭证请求名称。cr-name
指定 AWS Load Balancer Controller 实例的名称。
运行以下命令,使用
ccoctl
工具处理credrequests
目录中的所有CredentialsRequest
对象:$ ccoctl aws create-iam-roles \ --name <name> --region=<aws_region> \ --credentials-requests-dir=<path-to-credrequests-dir> \ --identity-provider-arn <oidc-arn>
运行以下命令应用在集群 manifests 目录中生成的 secret:
$ ls manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
验证
aws-load-balancer-controller
pod 是否已创建:$ oc -n aws-load-balancer-operator get pods NAME READY STATUS RESTARTS AGE aws-load-balancer-controller-cluster-9b766d6-gg82c 1/1 Running 0 137m aws-load-balancer-operator-controller-manager-b55ff68cc-85jzg 2/2 Running 0 3h26m
20.4.3. 使用特定凭证在安全令牌服务集群中配置 AWS Load Balancer Operator
您可以使用 AWS Load Balancer Controller 自定义资源(CR) 中的 spec.credentials
字段指定凭证 secret。您可以使用控制器的预定义 CredentialsRequest
对象来知道需要哪些角色。
先决条件
-
您必须提取并准备
ccoctl
二进制文件。
流程
运行以下命令,下载 AWS Load Balancer Controller 的 CredentialsRequest 自定义资源 (CR),并创建一个目录来存储它:
$ curl --create-dirs -o <path-to-credrequests-dir>/cr.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/controller/controller-credentials-request.yaml
使用
ccoctl
工具处理控制器的CredentialsRequest
对象:$ ccoctl aws create-iam-roles \ --name <name> --region=<aws_region> \ --credentials-requests-dir=<path-to-credrequests-dir> \ --identity-provider-arn <oidc-arn>
将 secret 应用到集群:
$ ls manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
验证控制器是否已创建凭证 secret 以供控制器使用:
$ oc -n aws-load-balancer-operator get secret aws-load-balancer-controller-manual-cluster --template='{{index .data "credentials"}}' | base64 -d
输出示例
[default] sts_regional_endpoints = regional role_arn = arn:aws:iam::999999999999:role/aws-load-balancer-operator-aws-load-balancer-controller web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token
创建
AWSLoadBalancerController
资源 YAML 文件,如sample-aws-lb-manual-creds.yaml
,如下所示:apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController 1 metadata: name: cluster 2 spec: credentials: name: <secret-name> 3