3.5. 启用 Operator 以支持使用 AWS STS 的基于 CCO 的工作流
作为 Operator 作者设计在 Operator Lifecycle Manager (OLM)上运行的项目,您可以通过自定义项目来支持 Cloud Credential Operator (CCO),使 Operator 能够对启用了 STS 的 OpenShift Container Platform 集群上的 AWS 进行身份验证。
				使用此方法时,Operator 负责创建 CredentialsRequest 对象,这意味着 Operator 需要 RBAC 权限来创建这些对象。然后,Operator 必须能够读取生成的 Secret 对象。
			
					默认情况下,与 Operator 部署相关的 pod 会挂载 serviceAccountToken 卷,以便在生成的 Secret 对象中引用服务帐户令牌。
				
先决条件
- OpenShift Container Platform 4.14 或更高版本
- 处于 STS 模式的集群
- 基于 OLM 的 Operator 项目
流程
- 更新 Operator 项目的 - ClusterServiceVersion(CSV)对象:- 确保 Operator 有 RBAC 权限来创建 - CredentialsRequests对象:- 例 3.1. - clusterPermissions列表示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 添加以下注解来声明对使用 AWS STS 的基于 CCO 工作流的方法的支持: - # ... metadata: annotations: features.operators.openshift.io/token-auth-aws: "true" - # ... metadata: annotations: features.operators.openshift.io/token-auth-aws: "true"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 更新 Operator 项目代码: - 从 pod 上由 - Subscription对象设置的环境变量获取角色 ARN。例如:- // Get ENV var roleARN := os.Getenv("ROLEARN") setupLog.Info("getting role ARN", "role ARN = ", roleARN) webIdentityTokenPath := "/var/run/secrets/openshift/serviceaccount/token"- // Get ENV var roleARN := os.Getenv("ROLEARN") setupLog.Info("getting role ARN", "role ARN = ", roleARN) webIdentityTokenPath := "/var/run/secrets/openshift/serviceaccount/token"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 确保具有 - CredentialsRequest对象已准备好修补并应用。例如:- 例 3.2. - CredentialsRequest对象创建示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 另外,如果您从 YAML 表单的 - CredentialsRequest对象开始(例如,作为 Operator 项目代码的一部分),您可以以不同的方式处理它:- 例 3.3. 以 YAML 格式创建 - CredentialsRequest对象示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 目前不支持在 Operator 捆绑包中添加 - CredentialsRequest对象。
- 在凭证请求中添加角色 ARN 和 Web 身份令牌路径,并在 Operator 初始化过程中应用它: - 例 3.4. 在 Operator 初始化过程中应用 - CredentialsRequest对象示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 确保 Operator 可以等待 - Secret对象从 CCO 显示,如下例所示,以及您在 Operator 中协调的其他项目:- 例 3.5. 等待 - Secret对象示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- timeout值基于 CCO 检测添加的- CredentialsRequest对象并生成- Secret对象的速度。您可能会考虑降低时间或为集群管理员创建自定义反馈,这可能会导致 Operator 尚未访问云资源的原因。
 
- 通过从凭证请求中读取 CCO 创建的 secret 并设置 AWS 配置,并创建包含该 secret 数据的 AWS 配置文件: - 例 3.6. AWS 配置创建示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 重要- secret 被假定为存在,但在使用此 secret 时,您的 Operator 代码应等待和重试,以提供 CCO 创建 secret 的时间。 - 另外,等待周期最终应该超时,并警告用户 OpenShift Container Platform 集群版本,因此 CCO 可能会是一个较早的版本,它不支持使用 STS 检测的 - CredentialsRequest对象工作流。在这种情况下,指示用户必须使用其他方法添加 secret。
- 配置 AWS SDK 会话,例如: - 例 3.7. AWS SDK 会话配置示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow