1 - API概览
翻译:
本节提供了集群优化器 API 的参考信息。
概述
集群优化器 API 是一个强大的工具,允许用户通过编程方式与云原生集群优化流程进行交互和自动化操作。通过提供 RESTful 端点,该 API 使用户能够将集群优化器与第三方应用集成、自动化任务执行,并检索有关资源利用率和成本节约机会的详细报告。
- 全面功能访问:该 API 赋予用户对集群优化器平台关键功能的完全访问权限,如:
- 集群管理:用户可以通过 API 导入、更新或删除集群及其关联的云账户。
- 资源优化:该 API 提供端点用于分析和优化资源使用情况,如节点组、磁盘和工作负载等。
- 成本与节约见解:用户可以通过编程方式访问针对特定配置的成本节约和优化机会的详细报告。
- 灵活性与定制化:该 API 高度可定制,允许用户:
- 创建基于实时数据的自定义工作流,以自动化资源管理和优化。
- 将优化报告集成到内部仪表盘或财务报告系统中,更好地跟踪云成本。
- 支持多云平台:该 API 支持 AWS、阿里云以及 Kubernetes 集群等多种云原生环境。无论底层云基础设施如何,这种跨平台能力确保了对分布式资源的无缝集成与控制。
用例
- 优化任务自动化:DevOps 团队可以根据工作负载需求自动应用优化策略(如调整节点组、休眠集群),从而减少人工干预、提高运营效率,并确保持续的资源管理。
- 自定义监控与告警:用户可以构建自定义监控系统,查询 API 以获取实时的资源利用率和优化数据。告警可以根据特定的阈值或事件触发,如云成本突然飙升或资源利用不足。
- 与财务工具集成:财务团队可以使用 API 提取详细的成本节约报告,并将其集成到财务系统中,从而实现对云支出的持续监控,并将优化工作与云管理中的 FinOps 原则保持一致。
API 概览
REST API 是集群优化器的基础架构。集群优化器提供了一个 REST API,允许您执行以下操作:
注意:
- 集群优化器 API 仅在商业版(版本 1.3.1 及以上)中可用。
- 集群优化器 API 处于 alpha 阶段,未来可能会更改接口。
2 - 认证
本节描述了 Cluster Optimizer API 认证的详细步骤。
概述
通过 HTTP API 进行身份验证对于保护资源和确保只有授权用户和服务可以访问数据至关重要。
- API 身份验证:API 使用基于令牌的身份验证机制,确保对集群数据和操作的安全访问。用户首先需要通过集群优化器界面生成 API 令牌,然后在所有 API 请求中使用该令牌进行身份验证。
- 基于角色的访问控制 (RBAC):API 与平台的 RBAC 系统集成,确保用户在访问或修改资源时拥有适当的权限。
Cluster Optimizer API 通过 HTTP 头 Authorization 提供身份验证。示例如下:
GET /api/resource HTTP/1.1
Host: api.example.com
Authorization: Bearer <Access_Token>
生成访问令牌Access Token
要使用 Access Key 和 Access Key Secret 生成 Access Token,通常使用签名算法(如 HMAC)来创建唯一的安全密钥,用于 API 请求的身份验证。以下是生成 API 密钥的详细步骤:
1. 准备您的 Access Key 和 Secret
您通常会获得 Access Key(公开标识符)和 Access Key Secret(私有标识符)。Access Key 用于标识客户端,Access Key Secret 用于安全地签署和验证 API 请求。
2. 生成要签名的消息
在生成签名的 API 密钥之前,您需要创建一个消息,将几个元素通过 : 作为分隔符组合:
- Access Key:客户端的公开标识符。
- Timestamp:为了防止重放攻击,包含一个时间戳(以纳秒为单位)。
- Nonce:防止重放攻击的随机字符串。
例如(在 Go 语言中):
message := fmt.Sprintf("%s:%d:%s", accessKeyID, timestamp, nonce)
在此示例中,accessKeyID 是客户端的访问密钥 ID,timestamp 是以纳秒为单位的时间戳,nonce 是一个随机字符串。
3. 使用 HMAC-SHA256 签名消息
接下来使用 API key secret 通过 HMAC-SHA256 生成签名。此签名确保请求未被篡改,并且客户端是合法的。
示例(Go 语言)如下:
func generateSignature( keyID string, keySecret string, timestamp int64, nonce string) (string, error) {
message:=fmt.Sprintf("%s:%d:%s", keyID, timestamp, nonce)
h:=hmac.New(sha256.New, []byte(keySecret))
if _, err:=h.Write([]byte(message)); err!=nil {
return"", err
}
signature:=base64.StdEncoding.EncodeToString(h.Sum(nil))
returnsignature, nil
}
以下是所要求的中文翻译:
此函数通过使用 API Key Secret 和 HMAC-SHA256 算法对消息进行哈希处理来生成 signature。
4. 构建访问令牌
生成签名后,您可以通过组合 Access Token(公开)和生成的签名(私有)来构建最终的 API 密钥。
带有签名 API 密钥的请求示例:
GET /api/resource HTTP/1.1
Host: api.example.com
Authorization: Bearer <accessKey>/<timestamp>/<nonce>/<signature>
-
accessKey是公共的访问密钥。 -
timestamp:为防止重放攻击,包含一个以纳秒为单位的时间戳。 -
nonce:用于防止重放攻击的随机字符串。 -
signature是使用密钥通过 HMAC-SHA256 签名的消息。示例(Go 语言)如下:
func GenerateAccessToken(keyID string, keySecret string, timestamp int64, nonce string) (string, error) { if timestamp==0 { timestamp=time.Now().UTC().UnixNano() } signature, err := generateSignature(keyID, keySecret, timestamp, nonce) if err != nil { return "", err } return utils.URLEncode(fmt.Sprintf("%s/t%d/t%s/t%s", keyID, timestamp, nonce, signature)), nil }
5. 构建 HTTP 请求
您可以使用生成的访问令牌以及 open api 规范提供的方法来构建 HTTP 请求。
示例(Go 语言)如下:
client := NewAPIClient(&Configuration{
BasePath: "http://api.example.com",
})
apiKey := "AKFgGMF3FWWe5mgkz3UWBMgaUgrzBMUV"
apiSecret := "******"
nonce := "NONe5mgkz3GBk"
accessToken, _ := GenerateAccessToken(apiKey, apiSecret, 0, nonce)
ctx := context.Background()
ctx = context.WithValue(ctx, ContextAccessToken, accessToken)
rules, _, err := client.NotificationRuleApi.ListNotificationRules(ctx, &NotificationRuleApiListNotificationRulesOpts{})
下一步
下面,我们将探讨关注如下API: