-
Notifications
You must be signed in to change notification settings - Fork 3
Bootstrap
marstone edited this page Mar 11, 2025
·
30 revisions
- 本文档描述科探云平台在
kubernetes中安装的自展过程
- 所有需要处理 Ketanyun CRD 的 服务模块,均需实现此API
- 需验证 scope:
bootstrap,授权模式:client_credentials - API地址需为可以从该服务 QService 中定义的 service.backend 拼装,形如:
$schema://$authority/$context-path/bootstrap
比如,service.backend =
http://svc:8080/api/v3/,则BootstrapAPI地址为:http://svc:8080/api/bootstrap
- BootstrapAPI 采用
REST风格,格式:
# 支持增删改查。查询操作目前尚无需支持。
// CRUD "bootstrap/{type}/{name}" @returns CustomResource
CRUD "bootstrap" @returns CustomResource- 参数表
| Parameter | Type | Description |
|---|---|---|
| type | enum |
QApp、QResource 等自定义资源类型,参考 Ketanyun CRD。尚不支持,可从resource解析 |
| name | String |
该资源名称。尚不支持,可从resource解析 |
| resource | json |
自定义资源完整内容 |
| context | json |
可选,上下文数据,视具体接口而定 |
- 数据类型
// TYPE: CustomResource
{
id: String, // 仅 QApp 使用,client_id
secret: String, // 仅 QApp 使用,client_secret
// 用于创建数据源 secret
datasources: [{
url: String, // 仅 QDataSource 使用,数据库连接字符串
username: String, // 仅 QDataSource 使用,数据库用户名称
password: String, // 仅 QDataSource 使用,数据库用户密码
permission: Enum("data", "full", "readonly"), // 仅 QDataSource 使用,数据库用户类型
}],
// 根据 QDataSource 创建 QService,可能是0或1个
services: [{
name: ID, // 服务名
kind: String, // 目前仅支持常量 'GraphQL'
text: String, // 显示服务名
backend: String, // 后端服务提供者的内网地址
backendContextPath: String // 后端服务提供者的ContextPath。常规1层的ContextPath可留空
}],
// 追加给资源的事件
events: [{
message: String, // 事件描述
kind: Enum("error", "info") // 事件类型,存在 error 表示执行失败,需重试
}],
}
// PARAM: context
{
dependencies: [ JSON ] // 该CR所依赖的其他资源列表
}- 报错:
- 方式1: 通过非200的HTTP状态码返回
- 方式2: 200情况下,通过返回值中的error类型的events表示,用于既返回事件、由需要重试的情况
- 报错情况下,installer会不断重试,以保障最终一致性。
- 内容:
- 所有CRD
- QApp(
installer):在后续sso服务启动后自展、并获取其密钥使用 - QApp(
dba):在后续sso服务启动后自展、通过资源方式弱依赖挂载到 deploy(dba) - secret(
bootstrap-token) :用于sso服务启动前的验证。设计理念参考 Kubernetes Bootstrap Token - deploy(
installer)、deploy(dba) - svc(
installer)、svc(dba) - ingress:需通过 helm values 提供域名。
- 环境变量:
-
BOOTSTRAP_TOKEN:随机字符串,通过 envFrom:bootstrap-token配置。 -
KUBECONFIG:用于连接kubernetes集群的权限 -
NAMESPACE:当前installer所属的命名空间。后续所有操作限定在此命名空间内 -
SERVICE_ORIGIN_URL:服务发现所需的地址,需要完整的$schema://$authority部分
-
- 处理逻辑:
- 根据 SERVICE_ORIGIN_URL 生成 configmap(
qservice-discovery) - 界面登录:使用 kubernetes 的
sa,或直接使用BOOTSTRAP_TOKEN。 - 通过资源的 metadata.labels.service 获得该资源的 Bootstrap API。如未提供此 label 则无需调用
-
installer仅对于sso服务,调用时使用BOOTSTRAP_TOKEN,其他使用 QApp(installer) 产生的密钥 - 对于 QService,调用成功后更新 configmap(
qservice-discovery) - 对于 QApp,调用成功后生成 secret(
qapp-secret-{{ .Release.name }}) - 对于 QDataSource,调用成功后生成 secret(
qdatasource-secret-{{ QDataSource.metadata.name }}-{index})
- 根据 SERVICE_ORIGIN_URL 生成 configmap(
- 内容:
- QService(
oauthssoiam) - deploy(
ssoapis) + svc(ssoapis) :需配置 configmap(qservice-discovery)
- QService(
- 环境变量
BOOTSTRAP_TOKEN,通过 envFrom:bootstrap-token配置。 - 资源 QService(
oauth),不指定 metadata.labels.service - 资源 QApp(
apis),不指定 metadata.labels.service 或指定为installer(待议) -
sso模块的Bootstrap API 需支持通过BOOTSTRAP_TOKEN验证
- 内容:
- QApp(
bus) - QService(
bus) :自展定义自身服务 - deploy(
bus) + svc(bus)
- QApp(
- 环境变量:来自 configmap(
qservice-discovery) 和 secret(qapp-secret-{{ .Release.name }}) - 无特殊初始化逻辑
- 内容:
- QApp(
maker) - QService(
maker) - QRole(
maker):只定义client_credentials的ACL权限 - QCanvas(
maker):自展定义自身权限 - 其他:deploy(
maker) + svc(maker)
- QApp(
- 内容:
- QApp(
console) - QCanvas(
console) - QService(
console):仅前端服务,用户身份选择器、数据目录选择器 - 其他:deploy(
console) + svc(console)
- QApp(