【免费下载链接】bk-cmdb
蓝鲸智云配置平台(BlueKing CMDB)
蓝鲸配置平台(BlueKing CMDB,bk-cmdb)是面向资产及应用的企业级配置管理平台。本文基于仓库 docs/support-file/helm/web 下的官方 Helm Chart 文档,系统讲解如何通过 Helm 3 在 Kubernetes 集群中部署 BK-CMDB 的 Web 服务(前端控制台与 webserver 网关),包括 Chart 依赖体系、values.yaml 全量参数解读、外接 MongoDB/Redis/Zookeeper/Elasticsearch 的配置案例、Ingress/NodePort 服务暴露、权限验证与蓝鲸登录接入,以及部署后的常见问题排查。读完本文,你将具备独立定制并交付一套生产级 BK-CMDB Web 环境的能力。
BK-CMDB Web Chart 与整体架构定位
在 BK-CMDB 的 Kubernetes 交付体系中,官方提供了两个互相配合的 Helm Chart:
bk-cmdb-web(本文主角,即 docs/support-file/helm/web):负责部署 Web 服务相关组件,包括承载前端控制台与后端 API 代理的webserver服务,以及它依赖的存储与中间件(MongoDB、Redis、Zookeeper、Elasticsearch 等)。bk-cmdb-backend(docs/support-file/helm/backend):负责部署 adminserver、coreservice、toposerver、hostserver 等全部后台微服务。
Web Chart 的核心组件是 webserver 服务(对应源码目录 src/web_server)。它一方面向浏览器提供 CMDB 前端页面与登录会话管理,另一方面通过 service.ApiCli(见 src/web_server/app/server.go)代理转发前端发起的业务 API 请求。从源码结构看,部署在 Web 层之外的 apiserver 是这些业务请求的实际后端入口,因此 Web Chart 与 Backend Chart 需要部署在同一套 CMDB 体系中才能构成完整可用的平台。
关于整个平台的微服务架构设计,可参考仓库中的 架构设计文档。
环境要求与镜像准备
环境要求
| 项目 | 版本要求 | 说明 |
|---|---|---|
| Kubernetes | 1.12+ | 集群基本可用即可,Chart 模板会根据 common.capabilities 自动选择 Ingress、Deployment 的合适 apiVersion |
| Helm | 3+ | Chart 为 apiVersion: v2(见 Chart.yaml),必须使用 Helm 3 |
| golang | >= 1.20 | 仅在需要自行编译镜像时使用 |
| nodejs | >= 4.0.0 | 编译前端 UI 时使用,建议使用 nodejs 14 LTS 版本 |
快速搭建 Kubernetes 集群可参考蓝鲸官方白皮书中 get-k8s-create-bcssh 的说明;本地体验可选用 minikube。
镜像制作
Chart 默认从 image.registry 拉取预构建镜像。如果需要自行编译镜像,请参考 CMDB 编译指南。编译时可通过 make VERSION=xxxx 指定版本号,并注意:
- 编译环境要求 golang >= 1.20、python >= 2.7.5(建议 python2);
src目录下make支持三种模式:同时编译前端 UI 和后端服务、仅编译后端、仅编译前端;- 由于 cloud-server 使用了 crypto-golang-sdk,编译前需要安装铜锁(Tongsuo)8.3.2 环境,Makefile 内置了安装步骤,默认安装到
${cmdb编译路径}/tongsuo,可通过TONGSUO_PATH环境变量指定安装路径; - 编译前端
make ui若因内存不足导致fibers安装失败(ELIFECYCLE/Permission denied等报错),可通过 nvm 安装 nodejs 解决。
Chart 依赖体系
Web Chart 依赖关系定义在 Chart.yaml 中,与锁文件 Chart.lock 保持一致:
| 依赖 Chart | 仓库 | 版本 | 启用条件 |
|---|---|---|---|
| common | bitnami | 2.2.2 | 始终启用 |
| redis | bitnami | 17.3.17 | redis.enabled |
| mongodb | bitnami | 13.6.1 | mongodb.enabled |
文档同时列出了可选依赖 bitnami/zookeeper 与 bitnami/elasticsearch。这些依赖组件在 Chart 中默认启用,但官方特别强调:内置的 mongodb、redis 等组件仅用于测试环境,正式环境部署必须配置为外部组件。
安装与卸载 Chart
安装
使用以下命令安装 release(<bkcmdb helm repo url> 代表存放 bk-cmdb-web Chart 的 helm 仓库地址,password 为自定义密码):
# 添加 helm 仓库
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo add bkee <bkcmdb helm repo url>
# 更新并拉取依赖
$ helm dependency update
# 执行部署,同时为内置 mongodb/redis 设置认证密码
$ helm install cmdb-web bkee/cmdb-web --set mongodb.auth.password=${password} --set redis.auth.password=${password}
命令执行成功后,Chart 的 NOTES.txt 会输出验证步骤与访问地址。需要注意:
- 执行部署前,请检查 values.yaml 中镜像配置的镜像地址,确认镜像源可达;
- 从
_helpers.tpl的cmdb.redis.pwd、cmdb.mongodb.pwd模板(见 templates/_helpers.tpl)可以看到,当mongodb.enabled或redis.enabled为true时,必须通过--set提供mongodb.auth.password与redis.auth.password,否则 Helm 渲染会直接报required "xxx password is required"错误。
卸载
$ helm uninstall cmdb-web
该命令将移除所有与 cmdb-web 相关的 Kubernetes 组件(Deployment、Service、Ingress、ConfigMap、StatefulSet 等)。如需同时清理持久化卷,请按 Helm 默认策略另行处理 PVC。
全局配置参数详解
各项配置集中在 Chart 根目录的 values.yaml 一个文件之中,按功能分区组织。下面逐一展开。
镜像与拉取策略
| 参数 | 描述 | 默认值 |
|---|---|---|
global.imageRegistry | 全局镜像源域名,设置后会覆盖所有子 Chart(含依赖组件)的镜像源 | 空 |
global.imagePullSecrets | 私有仓库拉取凭据 Secret 名称数组 | [] |
global.storageClass | 持久化卷使用的 StorageClass | 空 |
image.registry | bk-cmdb 自身镜像源域名 | hub.bktencent.com |
image.pullPolicy | 镜像拉取策略 | IfNotPresent |
image.pullSecretName | bk-cmdb 镜像拉取 Secret 名称 | 空 |
从 webserver-dpl.yaml 可以看到实际渲染逻辑:Pod 镜像地址为 {{ .Values.image.registry }}/{{ .Values.webserver.image.repository }}:v{{ default .Chart.AppVersion .Values.webserver.image.tag }},即当 webserver.image.tag 未设置时,自动使用 Chart 的 appVersion(当前仓库中为 3.14.8-beta1)并拼接 v 前缀。
蓝鲸产品 URL 配置
| 参数 | 描述 | 默认值 |
|---|---|---|
bkPaasUrl | 蓝鲸 PaaS 地址 | http://paas.example.com |
bkIamApiUrl | bk-iam 后端地址 | http://bkiam-web |
bkComponentApiUrl | 蓝鲸 ESB 地址 | http://bkapi.paas.example.com |
bkLoginApiUrl | 蓝鲸登录地址 | http://bk-login-web |
bkNodemanUrl | 节点管理地址 | http://apps.paas.example.com/bk--nodeman |
bkGseApiGatewayUrl | 蓝鲸 GSE API Gateway URL | http://bkapi.example.com |
bkNoticeApiGatewayUrl | 蓝鲸 Notice API Gateway URL | http://bkapi.example.com |
bkCmdbApiGatewayUrl | CMDB API Gateway URL | http://bkapi.example.com |
这些 URL 会被渲染进 configmap.yaml 生成的 web.yaml 配置中:bkComponentApiUrl 对应 esb.addr,bkLoginApiUrl 用于生成 site.checkUrl(/accounts/get_user/?bk_token= 形式的登录态校验地址),bkNodemanUrl 对应 app.agentAppUrl。当 web.webServer.login.version 为 blueking 时,_helpers.tpl 中的 cmdb.webserver.bkLoginUrl 模板还会基于 bkPaasUrl 拼接出 /login/?app_id=%s&c_url=%s 形式的统一登录跳转地址。
webserver 服务配置
| 参数 | 描述 | 默认值 |
|---|---|---|
webserver.enabled | 是否启动 webserver | true |
webserver.image.repository | 服务镜像名 | blueking/cmdb_webserver |
webserver.image.tag | 服务镜像版本 | 空(自动使用 appVersion) |
webserver.replicas | Pod 副本数量 | 1 |
webserver.port | 服务 HTTP 端口 | 80 |
webserver.dnsPolicy | DNS 策略 | ClusterFirst |
webserver.hostNetwork | 是否使用主机网络 | false |
webserver.ingress.enabled | 开启 Ingress 访问 | true |
webserver.ingress.host | Ingress 代理访问的域名 | cmdb.example.com |
webserver.ingress.annotations | Ingress 注解 | kubernetes.io/ingress.class: nginx |
webserver.ingress.tls | 是否启用 TLS | false |
webserver.service.type | Service 类型 | ClusterIP |
webserver.service.ports | Service 端口定义(含 nodePort) | 80 -> 80 |
webserver.service.externalPort | Ingress 代理的目标端口 | 80 |
webserver.configDir | 配置文件目录 | /data/cmdb/cmdb_webserver/configure |
webserver.errors | 错误文案目录 | /data/cmdb/cmdb_webserver/conf/errors |
webserver.language | 多语言文案目录 | /data/cmdb/cmdb_webserver/conf/language |
webserver.workDir | 工作目录 | /data/cmdb/cmdb_webserver |
webserver.command.logDir | 日志存放路径 | /data/cmdb/cmdb_webserver/logs |
webserver.command.logLevel | 日志等级 | 3 |
webserver.command.logToStdErr | 是否把日志输出到 stderr | false |
webserver.podAnnotations | Pod 注解 | {} |
webserver.resources | 容器资源请求/限制 | limits: 200m/1024Mi;requests: 200m/512Mi |
webserver.nodeSelector / affinity / tolerations | 调度相关配置 | 空 / {} / [] |
从 Deployment 模板(webserver-dpl.yaml)可以看到 webserver 容器的启动命令:
./cmdb_webserver --addrport=$(POD_IP):80 --config=.../web.yaml --log-dir=... --regdiscv=<zk地址> --v=3 --logtostderr=false
其中 --regdiscv 指向配置发现中心/服务发现中心地址(即 configAndServiceCenter.addr),POD_IP 来自 status.podIP 的 fieldRef 注入;同时 Pod 配置了 livenessProbe 与 readinessProbe,均以 /healthz 路径、initialDelaySeconds: 30、periodSeconds: 10 进行探活,这解释了为什么 Chart 启动后需要等待约 30 秒服务才会就绪。Pod 标签中还会注入 values-hash(对全部 values 取 sha256 摘要),保证配置变更能够触发滚动更新。
web.webServer 前端站点配置
web.webServer 段对应 CMDB web.yaml 中的 webServer 专属配置,经 configmap 渲染后由 webserver 进程读取,其中与源码强相关的关键项如下:
| 参数 | 描述 | 默认值 |
|---|---|---|
web.webServer.site.domainUrl | 浏览器访问 CMDB 的网址 | http://cmdb.example.com |
web.webServer.site.httpsDomainUrl | HTTPS 域名地址 | 空 |
web.webServer.site.appCode | 站点 app code | bk_cmdb |
web.webServer.site.htmlRoot | 前端页面根目录 | /data/cmdb/cmdb_webserver/web |
web.webServer.site.resourcesPath | 前端资源目录 | /tmp/ |
web.webServer.site.authScheme | 前端权限模式,可选 internal、iam | internal |
web.webServer.site.bkDomain | 前端 Cookie domain 地址 | 空 |
web.webServer.site.helpDocUrl | 帮助文档地址 | 空 |
web.webServer.session.name | 会话名 | cc3 |
web.webServer.session.multipleOwner | 是否允许同一用户同时多端登录,0 不支持、1 支持 | 0 |
web.webServer.session.userInfo | 登录账号密码,以 : 分隔 | 空 |
web.webServer.app.authAppCode / authUrl / authScheme | 权限中心接入配置 | 空 |
web.webServer.login.version | 登录系统,skip-login 免登录、blueking 蓝鲸登录、oa 公司 OA | skip-login |
web.webServer.changelogPath.ch / en | 中英文版本日志存放路径 | /data/cmdb/cmdb_webserver/changelog_user/{ch,en} |
web.webServer.jwt.enabled / publicKey / privateKey | webserver 使用的 JWT 认证开关与密钥 | false / 空 |
web.webServer.enableNotification | 是否启用消息通知 | false |
从源码 src/web_server/app/server.go 的 onServerConfigUpdate 回调可以看出这些配置的实际消费方式:webServer.site.domainUrl、htmlRoot、bkLoginUrl、appCode、checkUrl、authscheme 会被写入运行时 Site 结构;其中 authscheme 读取失败时默认回退为 internal,es.fullTextSearch 读取失败时默认回退为 off。deploymentMethod == BluekingDeployment 时,前端 API 请求走 apigw 客户端(apigw.Cmdb),否则走引擎内置的 CoreAPI.ApiServer(),这与 Web 层依赖 apiserver 的架构一致。
存储组件配置
MongoDB
| 参数 | 描述 | 默认值 |
|---|---|---|
mongodb.enabled | 是否部署内置 mongodb;使用外部数据库时设为 false | true |
mongodb.persistence.size | 内置 mongodb 持久化容量 | 10Gi |
mongodb.architecture | 部署架构 | replicaset |
mongodb.replicaCount | 副本数 | 1 |
mongodb.arbiter.enabled | 是否启用 arbiter | false |
mongodb.auth.enabled | 是否启用认证 | true |
mongodb.auth.username | 内置认证用户名 | cc |
mongodb.auth.password | 内置认证密码(必填) | 空 |
mongodb.auth.database | 认证数据库 | cmdb |
mongodb.host | 内置 mongodb 的 headless 服务地址 | mongodb-headless.default.svc.cluster.local |
当使用外部 MongoDB 时,按 mongodb.externalMongodb 前缀配置(默认值见 values.yaml):
| 参数 | 描述 | 默认值 |
|---|---|---|
mongodb.externalMongodb.enabled | 是否启用外部 mongodb | true |
mongodb.externalMongodb.usr | 认证用户名 | 空 |
mongodb.externalMongodb.pwd | 认证密码 | 空 |
mongodb.externalMongodb.database | 数据库名 | cmdb |
mongodb.externalMongodb.host | 连接地址 | 空(示例 127.0.0.1:27017) |
mongodb.externalMongodb.maxOpenConns | 最大打开连接数 | 3000 |
mongodb.externalMongodb.maxIdleConns | 最大空闲连接数 | 100 |
mongodb.externalMongodb.mechanism | 认证机制 | SCRAM-SHA-1 |
mongodb.externalMongodb.rsName | 副本集名称 | rs0 |
mongodb.externalMongodb.socketTimeoutSeconds | socket 超时(秒),最小 5s、最大 30s | 10 |
mongodb.externalMongodb.tls.caFile/certFile/keyFile/pemFile/insecureSkipVerify | TLS 相关配置 | 证书文件名(拼 certPath)/ true |
从 _helpers.tpl 的 cmdb.mongodb.addr 模板可以看到:当 mongodb.enabled=true 时,webserver 实际连接 {{ releaseName }}-mongodb-0.{{ releaseName }}-mongodb-headless...:27017;设为 false 后则改用 externalMongodb.host。configmap.yaml 中 mongodb 段的 maxOpenConns、maxIdleConns、mechanism、rsName、socketTimeoutSeconds、enable、tls 均直接来自 externalMongodb 段,且 tls 证书文件名会与 certPath(默认 /data/cmdb/cert)拼接。
Redis
| 参数 | 描述 | 默认值 |
|---|---|---|
redis.enabled | 是否部署内置 redis;使用外部时设为 false | true |
redis.master.persistence.size | 内置 redis 持久化容量 | 10Gi |
redis.architecture | 部署架构 | standalone |
redis.auth.enabled | 是否启用认证 | true |
redis.auth.password | 认证密码(必填) | 空 |
使用外部 Redis 时,CMDB 会用到四类 Redis 连接,需分别配置(默认值见 values.yaml):
redis.redis:业务主 Redis;redis.snapshotRedis:快照 Redis;redis.discoverRedis:服务发现缓存 Redis;redis.netCollectRedis:网络采集 Redis。
每组参数一致,均为:
| 参数 | 描述 | 默认值 |
|---|---|---|
host | 连接地址(示例 127.0.0.1:6379,支持逗号分隔多地址) | 空 |
pwd | 密码 | 空 |
database | 库号 | 0 |
maxOpenConns | 最大打开连接数 | 3000 |
maxIdleConns | 最大空闲连接数 | 100 |
sentinelPwd | Sentinel 密码 | 空 |
masterName | Sentinel 主节点名 | 空 |
tls.caFile/certFile/keyFile/insecureSkipVerify | TLS 配置 | true |
cmdb.redis.host 模板(templates/_helpers.tpl)逻辑为:内置模式连接 {{ releaseName }}-redis-master:6379,外部模式使用 redis.redis.host。
Zookeeper 与配置/服务发现中心
| 参数 | 描述 | 默认值 |
|---|---|---|
zookeeper.enabled | 是否部署内置 zookeeper 作为配置发现中心、服务发现中心;使用外部时设为 false | true |
configAndServiceCenter.addr | 外部配置发现中心、服务发现中心地址;zookeeper.enabled=false 时使用 | 空(示例 127.0.0.1:2181) |
configAndServiceCenter.tls.insecureSkipVerify | ZK 连接是否跳过证书校验 | true |
configAndServiceCenter.tls.caFile/certFile/keyFile/password | ZK TLS 证书文件名与口令 | zookeeper/zk.ca、zk.cert、zk.key / 空 |
addr 支持逗号分隔配置多个地址(见下文常见问题)。webserver 的启动参数 --regdiscv 即取自该配置;若配置了 zookeeperCert 证书(base64 内容),cmdb.configAndServiceCenter.certCommand 模板还会追加 --regdiscv-cafile/--regdiscv-skipverify/--regdiscv-certfile/--regdiscv-keyfile 等启动参数,证书会通过 ConfigMap 挂载到 Pod 的 certPath/zookeeper 目录。
Elasticsearch 与 monstache 全文检索
| 参数 | 描述 | 默认值 |
|---|---|---|
web.es.fullTextSearch | 全文索引开关,可选 on/off | off |
elasticsearch.enabled | 是否启动内置 ES | false |
elasticsearch.master.replicas | 内置 ES master 节点数 | 1 |
elasticsearch.coordinating.replicas | 内置 ES 协调节点数 | 1 |
elasticsearch.data.replicas | 内置 ES 数据节点数 | 1 |
monstache 是一个用于将 MongoDB 数据同步到 Elasticsearch 创建索引的组件,相关参数:
| 参数 | 描述 | 默认值 |
|---|---|---|
monstache.enabled | 是否启动内置 monstache;使用外部时设为 false | false |
monstache.image.repository | 镜像名 | cmdb_monstache |
monstache.image.tag | 镜像版本 | 自动使用 appVersion |
monstache.replicas | Pod 副本数 | 1 |
monstache.port | 服务端口 | 80 |
monstache.workDir | 工作路径 | /data/cmdb/monstache |
monstache.configDir | 配置文件路径 | /data/cmdb/monstache/etc |
monstache.directReadDynamicIncludeRegex | monstache 配置内容(较长,详见 values.yaml 原文) | 见 values.yaml |
monstache.mapperPluginPath | monstache 配置内容 | /data/cmdb/monstache/monstache-plugin.so |
monstache.elasticsearchShardNum | ES 分片数 | 1 |
monstache.elasticsearchReplicaNum | ES 副本数 | 1 |
注意:Web Chart 的 web.es.fullTextSearch 与 Backend Chart 的 common.es.fullTextSearch 需要配套开启,全文检索才能真正生效。
可观测性与日志接入
bkLogConfig(蓝鲸日志平台接入),通过 templates/bklogconfig.yaml 渲染 BkLogConfig CRD 资源:
| 参数 | 描述 | 默认值 |
|---|---|---|
bkLogConfig.file.enabled | 是否采集容器内落地文件日志 | false |
bkLogConfig.file.dataId | 文件日志 dataid(需在日志平台申请分配) | 1 |
bkLogConfig.std.enabled | 是否采集容器标准输出日志 | false |
bkLogConfig.std.dataId | 标准输出日志 dataid | 1 |
开启后,文件日志会按 /data/cmdb/cmdb_*/logs/* 的路径模式采集。
serviceMonitor(Prometheus 监控),通过 templates/servicemonitor.yaml 渲染 monitoring.coreos.com/v1 的 ServiceMonitor,采集 webserver 的 /metrics 指标:
| 参数 | 描述 | 默认值 |
|---|---|---|
serviceMonitor.enabled | 是否开启服务监控 | false |
serviceMonitor.interval | 指标采集间隔 | 15s |
serviceMonitor.metricRelabelings | 指标重打标配置 | [] |
另外,web.monitor 段还支持接入蓝鲸监控插件(pluginName 可选 noop、blueking),以及 web.openTelemetry 段的跟踪链接入(enable、endpoint、bkDataID、bkDataToken),均可在 values.yaml 中按注释取值范围配置。
典型配置案例
以下案例均直接以 values.yaml 覆盖文件(或 helm install --values xxx.yaml)的方式使用。
案例 1:使用外接 MongoDB
mongodb:
enabled: false
# external mongo configuration
externalMongodb:
enabled: true
usr: xxx
pwd: xxx
database: cmdb
host: 127.0.0.1:27017
maxOpenConns: 3000
maxIdleConns: 100
mechanism: SCRAM-SHA-1
rsName: rs0
socketTimeoutSeconds: 10
# watch 相关外部 mongodb 配置(监听同步场景)
watch:
usr: xxx
pwd: xxx
database: cmdb
host: 127.0.0.1:27017
maxOpenConns: 3000
maxIdleConns: 100
mechanism: SCRAM-SHA-1
rsName: rs0
socketTimeoutSeconds: 10
案例 2:使用外接 Redis
redis:
enabled: false
# external redis configuration
redis:
host: 127.0.0.1:6379
pwd: xxx
database: "0"
maxOpenConns: 3000
maxIdleConns: 100
sentinelPwd: xxx
masterName: xxx
snapshotRedis:
host: 127.0.0.1:6379
pwd: xxx
database: "0"
maxOpenConns: 3000
maxIdleConns: 100
sentinelPwd: xxx
masterName: xxx
discoverRedis:
host: 127.0.0.1:6379
pwd: xxx
database: "0"
maxOpenConns: 3000
maxIdleConns: 100
sentinelPwd: xxx
masterName: xxx
netCollectRedis:
host: 127.0.0.1:6379
pwd: xxx
database: "0"
maxOpenConns: 3000
maxIdleConns: 100
sentinelPwd: xxx
masterName: xxx
案例 3:使用外接 Zookeeper 作为配置发现中心和服务发现中心
zookeeper:
enabled: false
configAndServiceCenter:
addr: 127.0.0.1:2181
案例 4:使用 Elasticsearch 全文检索
使用 ES 首先需要打开开关:
web:
es:
fullTextSearch: "on"
在 CMDB 中使用 ES 依赖两个组件:ES 本身,以及用于将 MongoDB 数据同步到 ES 的 monstache。有三种组合方式:
(1)使用内置组件:将内置 ES 与 monstache 同时开启:
elasticsearch:
enabled: true
monstache:
enabled: true
(2)全部使用外接组件:仅配置外部 ES 连接信息(此时外部 monstache 与 Chart 无配置关联):
common:
es:
url: xxx
usr: xxx
pwd: xxx
(3)内置 monstache + 外部 ES:开启 monstache 并配置外部 ES 即可:
monstache:
enabled: true
common:
es:
url: xxx
usr: xxx
pwd: xxx
案例 5:配置 webserver 不同的服务暴露方式
默认通过 Ingress 暴露(域名 cmdb.example.com),也可以改用 NodePort 直接访问:
webserver:
ingress:
enabled: false
service:
type: "NodePort"
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
nodePort: 32033 # 端口可以自定义
同时修改站点访问域名,使其与 NodePort 端口保持一致:
web:
webServer:
site:
domainUrl: http://127.0.0.1:32033/ # ip 需根据实际情况配置,端口为上面配置的同一端口
修改后即可通过 ip:32033 方式访问。
案例 6:开启权限验证(IAM)
通过以下配置开启鉴权:
iam:
auth:
enabled: true
# 配置权限中心和 esb 地址、app code、app secret,开启前端的 auth
bkIamApiUrl: xxx
bkComponentApiUrl: xxx
web:
esb:
appCode: xxx
appSecret: xxx
webServer:
site:
authScheme: iam
从源码 src/web_server/app/server.go 可以确认,authScheme 的合法取值包括 internal 与 iam,配置读取失败时默认回落为 internal(即不鉴权)。
案例 7:使用蓝鲸方式登录
# paas 地址
bkPaasUrl: xxx
# bk-login 地址
bkLoginApiUrl: xxx
web:
webServer:
site:
appCode: bk_cmdb
login:
version: blueking
login.version 的可选值为 skip-login(免登录)、blueking(蓝鲸登录)、oa(公司 OA 登录),其中 opensource 也由 _helpers.tpl 中的登录 URL 模板做了特殊处理(登录跳转地址留空)。当选择 blueking 后,NOTES.txt 会提示通过蓝鲸登录方式进行账号登录;若 session.userInfo 配置了账号密码(如 cc:cc),NOTES.txt 也会将其打印为登录凭据。
证书相关配置
| 参数 | 描述 | 默认值 |
|---|---|---|
certPath | 证书挂载到 Pod 内的路径 | /data/cmdb/cert |
mongodbCert.mongodb.ca/cert/key | 连接 MongoDB 的 CA/客户端证书/密钥(base64 编码内容) | 空 |
redisCert.redis.ca/cert/key | 连接 Redis 的 CA/客户端证书/密钥(base64 编码内容) | 空 |
zookeeperCert.ca/cert/key | 连接 Zookeeper 的证书内容(base64 编码) | 空 |
gseCert.ca/cmdbCert/cmdbKey | GSE 相关证书(Backend Chart 使用) | 空 |
证书以 base64 形式写入 values,模板通过 b64dec 解码后生成 ConfigMap(见 webserver-mongodb-cert-configmap.yaml,redis/zookeeper 证书 ConfigMap 同理),再挂载到容器的 certPath 对应子目录;configmap.yaml 中 mongodb/redis 的 tls 证书路径会自动拼接 certPath 前缀。
常见问题
1. Helm Chart 启动后如何访问?
默认访问方式是通过 Ingress,域名为 cmdb.example.com(取自 webserver.ingress.host)。因此需要为它配置 DNS 解析,例如在机器 /etc/hosts 文件中配置:
127.0.0.1 cmdb.example.com
在 minikube 环境通过下面指令启用 Ingress 控制器:
minikube addons enable ingress
配置完成后,通过 cmdb.example.com 访问(若 login.version 非 skip-login/blueking,则访问 cmdb.example.com/login 进行登录)。默认账号为 cc,密码为 cc(对应 web.webServer.session.userInfo 配置)。需要说明的是,Web Chart 默认 login.version: skip-login(免登录模式),如需账号密码登录应参考上文"蓝鲸方式登录"或"权限验证"案例调整。
2. 如何配置多个外置 Zookeeper 地址作为服务中心?
通过逗号 , 分隔多个地址:
configAndServiceCenter:
addr: 127.0.0.1:2181,127.0.0.2:2181
3. 如何配置多个外置 Redis 地址?
同样通过逗号分隔:
redis:
# external redis configuration
redis:
host: 127.0.0.1:6379,127.0.0.2:6379
4. 如何配置多个外置 MongoDB 地址?
同样通过逗号分隔:
mongodb:
# external mongo configuration
externalMongodb:
enabled: true
usr: xxx
pwd: xxx
database: cmdb
host: 127.0.0.1:27017,127.0.0.2:27018
5. 服务启动缓慢或起不来怎么办?
CMDB 启动依赖 redis、mongodb、zookeeper 等组件,部分服务需要等依赖组件 ready 后才启动,再加上初始化流程,需要等待一段时间服务才能就绪(webserver 的 /healthz 探针默认 initialDelaySeconds: 30)。如果某些服务长时间无法启动,请确认初始化 Job 是否执行完成。
若部署在未接入蓝鲸权限中心的环境中,authserver 因缺少权限中心配置可能无法启动(该服务在 Backend Chart 中默认启用)。此时可暂时关闭它:
authserver:
enabled: false
或按"案例 6:开启权限验证"补齐权限中心所需配置。
小结
BK-CMDB Web Chart 将 webserver 前端服务与 MongoDB、Redis、Zookeeper、Elasticsearch 等依赖组件的编排收敛到一个 values.yaml 中,通过位点开关(enabled 字段)即可在"内置组件(测试环境)"与"外部组件(生产环境)"两种模式间切换。本文覆盖了从环境准备、镜像制作、安装卸载,到全部参数解读、七大配置案例与常见问题的完整链路;结合 configmap.yaml、webserver-dpl.yaml 与 src/web_server/app/server.go 中的源码佐证,读者可以据此定制出符合自身环境的高可用部署方案。
【免费下载链接】bk-cmdb
蓝鲸智云配置平台(BlueKing CMDB)
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



