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