配置方式
每种安装目标各有一种配置方式。- Kubernetes
- Linux VM
clicklink clctl init 会在工作目录中创建名为 clicklink-values.yaml 的配置值覆盖文件,并使用该文件部署 clicklink-connector 图表。该覆盖文件是部署配置的持久记录:除非传入 --force,否则重新运行 init 时会保留该文件,因此你的修改可在重新运行和恢复过程中保留。本页及操作中的 Day-2 命令使用
helm 命令行客户端。只有 init 内置 Helm 客户端。--repo 替换为你的镜像仓库。通过直接 图表 引用 (oci://、URL 或本地归档文件或目录;参见私有镜像) 安装时,没有可供解析的仓库。请使用安装时使用的引用重新运行升级命令:托管模式
托管模式会运行 executor,由它把 ClickHouse Cloud 所驱动的服务生命周期应用到你的集群上。init 会在注册时启用该模式,并填入集群身份 (参见启用托管模式) 。下列键是之后可能需要再次调整的部分。若要更改该模式状态,请带上 --force 以及 --managed 或 --no-managed 重新运行 init。与任何一次 init 运行一样,这也需要一个 entry point:如果保留了支持包,则使用 --handoff;否则使用 --enroll 并提供新的 token (参见重新运行与恢复) 。
在 VM 上,--no-managed 只会在 config 中禁用 executor,并不会停止或禁用正在运行的 systemd unit。请先将其停止,再更改 config:
executor.enabled: false,并通过 helm upgrade 使其生效,以移除 executor 部署。在这两种目标环境中,集群授权都会一直保留,直到你手动移除;参见停止托管模式。
- Kubernetes
- Linux VM
init 会根据你的 kube context 所指向的 EKS cluster,在 clicklink-values.yaml 中预置 executor block:cluster.namespacePrefix由所有组件共用,executor 的 grant 就限定在该 prefix 范围内。安装后若要修改,就意味着需要重新执行一次 grant。executor.cluster只能对应一个 cluster:name、region、accountId以及inCluster: true,后者让 executor 以 pod (容器组) 的 ServiceAccount 身份进行认证。其余 keys 会以 snake_case 形式原样传递给 executor,例如s3_storage。executor.serviceAccount保持create: false:init会为连接器命名空间中的pcm-executorServiceAccount 授予集群级 access,chart 直接绑定到该 ServiceAccount,而不是另建一个未绑定的。executor.persistence为/var/lib/clicklink提供存储,executor 在此保存其命令 database 和服务 registry;参见 storage。executor.platformBundleSecret指定保存已批准平台 update 的 Secret。该 mount 是可选的,因此在首次批准之前 pod (容器组) 即可启动;参见批准平台更新。executor.ports.health提供/livez和/metrics;所有组件都不单独开放 metrics 端口。
helm upgrade 命令应用更改。添加或更改 ClickHouse 实例
executor 创建的 服务会自行注册,因此在托管模式下无需在此手动添加。本节适用于不运行 executor 的独立连接器部署,该部署用于观测你自行运行的 ClickHouse。当两个部署共用同一个实例时,请在其init 时传入 --ch-user-suffix。instances 下的每个条目对应一个连接器读取数据的 ClickHouse 原生协议端点,包括 host、port、database、secure、cluster,在 Kubernetes 上还包括 namespace。max_open_conns 与 max_idle_conns 用于限制连接池的规模。凭据绝不保存在配置中;每个组件都从预配过程创建的访问包中获取各自的只读 ClickHouse 用户。
- Kubernetes
- Linux VM
将实例添加到 在工作站上为每个组件预配只读访问权限。对于由 Operator 管理且没有可执行 SQL 的管理员用户的实例,请将
clicklink-values.yaml 中顶层的 instances 映射内 (字段与 VM registry 相同) 。将其命名空间添加到 networkPolicy.clickhouseNamespaces,根据命名空间的 kubernetes.io/metadata.name 标签匹配。图表会将该映射渲染为两个守护进程都会读取的 clicklink-instance-registry ConfigMap。这仅在 executor.enabled 为 false 时有效;启用 executor 后,渲染会失败,因为该 ConfigMap 由 executor 拥有。--apply-ch-grants 会通过 kubectl exec 在 pod (容器组) 中应用生成的 ClickHouse 授权;如果不使用该选项,命令只会创建 Kubernetes 端的资源,并将 ch-grants.sql 保留在磁盘上供你自行应用。如果管理员用户设置了密码,请添加 --ch-admin-password-stdin 并通过管道传入密码。--apply-ch-grants 替换为 --ch-user-via cr (保留 pod 选择标志) ;请参阅 命令行客户端 参考。然后,将各命令创建的 Secret 和 ServiceAccount 对接入相应的 accessBundles 映射,并运行上文所示的 helm upgrade:运维人员允许列表
运维人员电子邮件地址允许列表限制着网关管理的会话。发送至会话网关的每个请求都必须携带短时有效的 OIDC ID 标记,且其中经认证的电子邮件地址必须在列表中。允许列表为空时,网关将关闭。在 VM 上,主机的 root 用户也可以通过本地会话文件直接管理会话;允许列表仅约束经由网关的访问路径。有关完整的信任模型,请参阅支持会话。- Kubernetes
- Linux VM
允许列表位于覆盖层中,图表会将其渲染为 ConfigMap。要更改允许列表,请编辑该列表并运行
helm upgrade:网络策略
在 Kubernetes 上,该图表默认提供一个带出站允许列表的 default-deny NetworkPolicy。NetworkPolicy 对象只有在 CNI 强制执行时才会生效。在具备强制执行能力的 CNI 下,只有集群 DNS 和 ClickHouse 服务所在的命名空间可达,直到两个 CIDR 列表都填写完毕为止。在此之前,连接器无法通过出站访问你的连接器端点或 Kubernetes API server。只有当init 获知连接器端点背后的 CIDR 后,才会将该 policy 以 enabled 状态部署。
allowEgressCIDRs需要你自行提供:即连接器端点背后的地址范围,可在安装时通过--egress-cidrs指定,或在提示时输入。所有组件都需要它才能访问你的连接器端点。在托管模式下,如果平台图表位于 Amazon ECR 中,还需添加所在区域的 ECR 和 STS 地址范围 (或你的 mirror 所在范围) 。否则在该策略下 executor 拉取图表会失败。apiserverCIDRs在托管模式下由init根据 EKS cluster 所在的 VPC 推导得出 (eks:DescribeCluster和ec2:DescribeVpcs) 。所有组件都会发起 Kubernetes 标记请求,executor 也通过 API 驱动 service,因此在强制执行的 CNI 下,未设置该项时这些操作全部都会被阻断。若 lookup 失败,init会发出警告并将列表留空,由你填入自己 VPC 的 CIDR 块。
clicklink.clickhouse.com/managed-by: executor,策略会依据该标签放行,因此托管安装可以将 clickhouseNamespaces 留空。只有在 executor 之外创建的命名空间 (即你自行运行的 ClickHouse) 才需要按名称逐一列出。
稍后启用该策略。 如果安装时跳过了端点 CIDR,init 会预置 enabled: false 和 allowEgressCIDRs: [],并输出完成该配置所需的步骤。确定 CIDR 后,在 clicklink-values.yaml 中设置 enabled: true 和 allowEgressCIDRs,确认 apiserverCIDRs 已包含你 VPC 的地址范围,然后执行 配置方式 中给出的 helm upgrade。
启用会话网关后,还有一条出口规则需要注意:clctl.gateway.jwksEgressCIDRs。故障排查工具会拉取身份提供商的 JWKS 来校验运维人员 tokens,因此在默认拒绝策略下,空列表会阻断所有标记校验:
private.googleapis.com 地址范围,它涵盖通过 Private Google Access 访问的 Google 身份提供商。若使用其他身份提供商,请填入其对应的地址范围,或为其做前置转发的出站代理的 CIDR。
还剩两个入口相关的键:metricsScrapeSelector 按标签将指标抓取入口限制在单个 Prometheus 命名空间内;kubeletProbeCIDRs 则在严格的默认拒绝策略下显式放行 kubelet 节点代理的健康检查探针。完整的键列表请参阅配置参考。
脱敏规则
故障排查工具 在输出离开您的边界之前会对其进行脱敏处理。内置规则涵盖ipv4、ipv6、bearer-token、aws-access-key、email、jwt、ssh-private-key 和 connection-string-credentials。您可以在 YAML 文件中添加自定义规则。这些规则会先按文件中的顺序执行,然后再执行内置规则;如果某个条目使用了与内置规则相同的 name,则会替换该内置规则。
每个规则包含 name (必填且唯一) 、regex (必填,采用 Go RE2 语法) 、replace (默认为 [REDACTED],支持 $1 捕获组引用) 和 case_insensitive (默认为 false) :
/etc/clicklink/redaction-patterns.yaml。安装程序会为其预置一组初始的活动规则 (第三方 API key、AWS 密钥等) 。您可以精简或扩展该集合;安装程序会在升级时保留您修改后的版本。在 Kubernetes 上,将 YAML 放入 ConfigMap,并使用键名 redaction-patterns.yaml,然后将 troubleshooter.redaction.patternsConfigMap 设置为该 ConfigMap 的名称;图表会将其挂载到相同路径。
私有镜像 和边界内端点
已发布的图表将image.repository 预设为公网、多架构且经 cosign 签名的连接器镜像,因此常规安装无需指定镜像配置值。要查看已发布的默认配置:
init 的 --chart 参数可指定为在 --chart-repo 中解析的图表名称,也可直接指定 oci:// 引用、URL、本地归档文件或目录。--chart-version 默认使用命令行客户端自身的版本,以确保 binary 与图表保持同步。
init 传入 --api-private-ca。这会设置 api.tls.caFile: /etc/clicklink/secrets/mtls/ca.crt,连接器将根据系统根证书以及注册包中的 CA 证书链来验证端点。在 VM 上,对应配置为 /etc/clicklink/config.yaml 中的 api.tls.ca_file:init 会将包中的证书链安装到 /etc/clicklink/tls/ca.crt,连接器也会以同样方式将其追加到系统根证书中。如需在完全隔离网络环境中进行注册和证书签名,请参阅 onboarding。
存储
- Kubernetes
- Linux VM
有两个组件将状态保存在 PersistentVolumeClaim 上。故障排查工具的 PVC 保存 session 状态和审计记录:executor 的 PVC 保存其命令数据库以及它所管理的 服务的 registry:
init 会将两处 storageClass 配置值都设为你选定的存储类。若 storageClass 留空,则使用 cluster 的默认 StorageClass;如果 cluster 未指定默认存储类,init 会通过 prompt 或 --storage-class 要求你提供一个。executor 的 claim 带有 helm.sh/resource-policy: keep 注解,因此执行 helm uninstall 时不会将其删除;参见 uninstall。