news 2026/9/10 17:22:50

Infisical 独立 Postgres Helm Chart(infisical-standalone-postgres)配置实战:安全加固、扩展容器与高可用部署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Infisical 独立 Postgres Helm Chart(infisical-standalone-postgres)配置实战:安全加固、扩展容器与高可用部署

Infisical 独立 Postgres Helm Chart(infisical-standalone-postgres)配置实战:安全加固、扩展容器与高可用部署

【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical

导读

本文以 helm-charts/infisical-standalone-postgres/CHANGELOG.md 为脉络主线,系统梳理 Infisical 官方独立 Postgres Helm Chart(infisical-standalone)从 v1.3.0 到 v1.10.0 的核心能力演进,并逐一落到 values.yaml 与模板源码中予以印证。读完本文,你将掌握:如何通过securityContext让 Infisical 在 Kubernetes Pod Security "restricted" 标准下开箱即用;如何用extraContainersextraInitContainersextraEnvextraVolumes/extraVolumeMounts挂载 HSM PKCS#11 客户端侧车容器与自定义 CA;如何利用topologySpreadConstraintsnodeSelectortolerations编排多可用区高可用部署;以及升级该 Chart 时需要注意的 IngressClass、依赖仓库迁移等兼容性事项。

一、Chart 定位与整体结构

infisical-standalone-postgres是 Infisical 官方提供的一体化 Helm Chart,一条命令即可在 Kubernetes 中部署"Infisical 应用 + PostgreSQL + Redis + ingress-nginx"整套栈。其定位在 Chart.yaml 中描述为 "A helm chart to deploy Infisical",当前 Chart 版本为1.10.0appVersion"1.0.1"

从 Chart.yaml 可以看到它依赖三个子 Chart:

依赖版本仓库启用条件
ingress-nginx4.0.13https://kubernetes.github.io/ingress-nginxingress.nginx.enabled
postgresql14.1.10oci://registry-1.docker.io/bitnamichartspostgresql.enabled
redis18.14.1oci://registry-1.docker.io/bitnamichartsredis.enabled

模板目录只包含 5 个文件,结构非常清晰:

  • templates/infisical.yaml:Deployment 与 Service 主清单;
  • templates/bootstrap-job.yaml:auto-bootstrap 钩子 Job;
  • templates/ingress.yaml:Ingress 资源;
  • templates/jobs-rbac.yaml:ServiceAccount、Role、RoleBinding;
  • templates/_helpers.tpl:命名与连接串拼接辅助函数。

安装后 NOTES.txt 会给出kubectl get all -n <namespace>helm statushelm uninstall等常用命令提示。

二、安全加固:Pod Security "restricted" 标准开箱即用(v1.10.0)

v1.10.0(2026-07-03)是 CHANGELOG 中最新、也最关键的版本,核心工作是把安全上下文做成可配置且默认安全

2.1 两个安全上下文的职责划分

该版本新增了infisical.podSecurityContextinfisical.containerSecurityContext两个配置键,职责划分非常考究:

  • containerSecurityContext承载restricted 标准要求的全部加固项,且只作用于 Infisical 自身容器(包括 auto-bootstrap Job 中的 init 容器与主容器),不会波及用户注入的容器;
  • podSecurityContext只设置fsGroup: 1001,用于让挂载卷对非 root 用户可写,从而不会把extraContainersextraInitContainers的用户强制改为 UID 1001

values.yaml 中的默认值如下:

infisical: podSecurityContext: fsGroup: 1001 containerSecurityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: false runAsNonRoot: true runAsUser: 1001 seccompProfile: type: RuntimeDefault capabilities: drop: ["ALL"]

对照 Kubernetes Pod Security 的 restricted 基线要求:runAsNonRootrunAsUser非零、allowPrivilegeEscalation: falseseccompProfile: RuntimeDefaultdrop: ALL均已默认满足,因此 Infisical Deployment 与 auto-bootstrap Job 默认即符合 restricted 标准。

2.2 readOnlyRootFilesystem 与 emptyDir 的配合

一个需要特别说明的默认值:readOnlyRootFilesystem默认保持false,因为 Infisical 应用运行时会写临时文件。如果你想开启只读根文件系统(更强的安全基线),CHANGELOG 明确给出了做法:通过infisical.extraVolumes挂载emptyDir,再通过infisical.extraVolumeMounts/tmp等可写路径指到该卷上。例如:

infisical: containerSecurityContext: readOnlyRootFilesystem: true extraVolumes: - name: tmp emptyDir: {} extraVolumeMounts: - name: tmp mountPath: /tmp

在 templates/infisical.yaml 中可以看到,extraVolumeMounts渲染进主容器的volumeMountsextraVolumes渲染进 Pod 的volumes,二者天然支持上述组合。

2.3 与 bundled ingress-nginx 的兼容性提醒

CHANGELOG 同时给出了一个重要的限制说明:bundled 的 ingress-nginx 子 Chart 默认不满足 restricted 标准。若要让整个 release 都在 restricted 下运行,需要三选一:

  1. 禁用 bundled ingress-nginx(ingress.nginx.enabled: false),改用集群内已有的、符合 restricted 的控制器;
  2. 把 ingress-nginx 部署到其他 namespace;
  3. 自行提供 restricted-safe 的控制器覆盖配置。

2.4 向后兼容与渲染逻辑

本版本向后兼容:升级时会触发一次性的 Pod 滚动重启;若将podSecurityContextcontainerSecurityContext设为null,对应的securityContext块会被整体省略。

模板中的渲染逻辑印证了这一点——templates/infisical.yaml 与 templates/bootstrap-job.yaml 均使用{{- with $infisicalValues.podSecurityContext }}守卫;容器级上下文则在 templates/infisical.yaml(主容器)与 templates/bootstrap-job.yaml(init 容器wait-for-infisical与主容器infisical-bootstrap)分别注入,保证了 bootstrap Job 同样受安全上下文约束。

三、扩展容器:Sidecar、Init 容器与环境变量(v1.9.0 / v1.7.3)

3.1 侧车容器:HSM PKCS#11 客户端接入(v1.9.0)

v1.9.0(2026-05-28)新增infisical.extraContainersinfisical.extraInitContainers,官方文档点名的典型场景是HSM PKCS#11 客户端侧车(例如 Entrust nShield),让 Infisical 与硬件安全模块共享 PKCS#11 套接字。

values.yaml 中的示例:

infisical: extraContainers: - name: hsm-client image: my-hsm-client:latest volumeMounts: - name: pkcs11-socket mountPath: /var/run/hsm extraInitContainers: - name: wait-for-hsm image: busybox:latest command: ['sh', '-c', 'until nc -z hsm-host 9004; do sleep 2; done']

模板侧,templates/infisical.yaml 将extraInitContainers渲染到spec.initContainers,templates/infisical.yaml 将extraContainers直接追加到spec.containers列表尾部。注意 init 容器会在 Infisical 主容器启动前完成前置等待(如等待 HSM 服务就绪),这正是"先就绪、后启动"的典型编排。

3.2 额外环境变量:NODE_EXTRA_CA_CERTS 等(v1.7.3)

v1.7.3(2026-03-07)新增infisical.extraEnv,用于通过 Helm values 直接注入环境变量而无需手改 Deployment 清单。官方示例中强调的典型用途是NODE_EXTRA_CA_CERTS——当企业环境需要让 Node.js 进程信任自建 CA 时:

infisical: extraEnv: - name: NODE_EXTRA_CA_CERTS value: /etc/ssl/certs/ca-certificates.crt

该列表在 templates/infisical.yaml 中通过toYaml直接追加到主容器env数组,与自动生成的DB_CONNECTION_URIREDIS_URL以及envFrom引用的kubeSecretRef(默认infisical-secrets,见 values.yaml)并列生效。

3.3 自定义卷与挂载的完整支持(v1.4.1 / v1.7.1)

infisical.extraVolumesinfisical.extraVolumeMounts自 v1.4.1(2025-03-19)引入;v1.7.1(2025-10-10)修复了一个关键缺陷:此前自定义卷与挂载只会加到 Infisical 核心 Pod,不会加到数据库迁移 Pod。该修复保证在迁移场景下自定义卷同样生效——例如迁移 Job 需要访问自建 CA 文件或 HSM 套接字时,这一修复至关重要。

四、Ingress 演进:专用 IngressClass 避免控制器冲突(v1.8.0)

v1.8.0(2026-04-06)对 bundled ingress-nginx 做了一个重要的行为变更:控制器改用专用 IngressClass 名称infisical-nginx(controllerValue 为k8s.io/infisical-nginx),取代常见的nginx类名,避免 bundled 控制器误接管集群中其他 Ingress 资源、也避免与已有 ingress 控制器产生冲突。

values.yaml 中对应的子 Chart 配置:

ingress-nginx: controller: ingressClassResource: name: infisical-nginx controllerValue: k8s.io/infisical-nginx default: false ingressClass: infisical-nginx

Ingress 资源的类名选择逻辑在 templates/ingress.yaml 中一目了然:

ingressClassName: {{ $ingress.ingressClassName | default (ternary "infisical-nginx" "nginx" $ingress.nginx.enabled) }}

即:

场景生效的 ingressClassName
使用 bundled ingress-nginx(ingress.nginx.enabled: trueinfisical-nginx(升级后控制器与 Ingress 同步更新,无需手动操作)
自带 ingress 控制器(ingress.nginx.enabled: false默认nginx
在 values 中显式设置ingress.ingressClassName以自定义值为准

另注意 templates/ingress.yaml 默认声明了两条路径:/Prefix匹配)与/ss-webhookExact匹配,用于 Secret Scanning webhook),后端 Service 端口均为 8080,与主容器的containerPort: 8080和就绪探针/api/status(见 templates/infisical.yaml)保持一致。

五、高可用与调度编排(v1.6.1 / v1.5.0)

5.1 拓扑分布约束:跨可用区高可用(v1.6.1)

v1.6.1(2025-07-03)新增infisical.topologySpreadConstraints,用于把 Pod 均匀分布到多个可用区/节点,降低单点故障影响面。默认replicaCount: 2(见 values.yaml),配合拓扑约束可形成跨可用区的双副本部署。示例:

infisical: replicaCount: 3 topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: ScheduleAnyway labelSelector: matchLabels: component: infisical

该配置在 templates/infisical.yaml 中渲染进spec.template.spec.topologySpreadConstraints。注意matchLabels需与模板生成的标签一致(component: infisical,参见 templates/_helpers.tpl 的infisical.matchLabels定义)。

5.2 节点选择与污点容忍(v1.5.0)

v1.5.0(2025-03-26)新增nodeSelectortolerations

  • nodeSelector:将 Pod 调度到带特定标签的节点(例如专用 GPU/合规节点池);
  • tolerations:允许 Pod 调度到带污点的节点(例如独占节点池)。
infisical: nodeSelector: node-pool: infisical tolerations: - key: dedicated operator: Exists effect: NoSchedule

模板在 templates/infisical.yaml 中同样以with守卫渲染,未配置时整块省略。配合早前版本就支持的affinity(values.yaml),可以完成"亲和性 + 拓扑分布 + 容忍"三层调度组合。

六、依赖与镜像仓库演进(v1.7.0 / v1.7.2)

6.1 PostgreSQL / Redis 迁移到 OCI Bitnami Charts(v1.7.0)

v1.7.0(2025-09-30)做了两项基础设施级变更:

  1. PostgreSQL 与 Redis 的 Helm 依赖迁移到 OCI Bitnami Charts——Chart.yaml 中二者仓库均为oci://registry-1.docker.io/bitnamicharts
  2. 默认 Postgres 与 Redis 镜像仓库迁移到mirror.gcr.io/postgresql|redis——见 values.yaml 与 values.yaml,分别使用mirror.gcr.io/bitnamilegacy/postgresqlmirror.gcr.io/bitnamilegacy/redis

这意味着旧版基于 HTTPS Helm 仓库(charts.bitnami.com/bitnami)的依赖解析方式不再适用,拉取依赖时应使用helm dependency update从 OCI registry 解析。

6.2 autoDatabaseSchemaMigration 的移除(v1.7.2)

v1.7.2(2025-10-20)彻底移除了autoDatabaseSchemaMigration配置项,理由是更新版本的 Infisical 会在启动流程中自动执行数据库迁移。如果你从更早版本升级,需要从 values 中删除该键,否则 Helm 会因未知键而告警;当前 values.yaml 中也不再存在该配置。另外 values.yaml 保留了infisical.databaseSchemaMigrationJob配置块(镜像仓库ghcr.io/groundnuty/k8s-wait-for、tagno-root-v2.0),用于等待依赖就绪的辅助作业。

6.3 默认镜像 tag 的持续更新

CHANGELOG 记录了默认infisical.image.tag的演进:v1.7.3 更新为v0.158.0,v1.7.2 更新为v0.151.0;当前 values.yaml 中默认为v0.158.0。镜像仓库为infisical/infisical,拉取策略IfNotPresent。升级 Chart 时建议关注该默认值,以便获得最新的应用功能与安全修复。

七、数据库连接与迁移细节(v1.3.0 / v1.4.0)

7.1 复用已有 Postgres 连接串 Secret(v1.3.0)

v1.3.0(2024-10-28)新增postgresql.useExistingPostgresSecret,允许通过 K8s Secret 提供既有 PostgreSQL 连接串,而不使用 Chart 内置的 Postgres:

postgresql: enabled: false useExistingPostgresSecret: enabled: true existingConnectionStringSecret: name: my-pg-conn key: DB_CONNECTION_URI

enabled: true时,templates/infisical.yaml 会通过secretKeyRef把连接串注入主容器DB_CONNECTION_URI;而当postgresql.enabled: true时,则走 templates/_helpers.tpl 的infisical.postgresDBConnectionString模板拼接:

postgresql://<username>:<password>@<postgres-service>:5432/<database>

默认值为postgresql://infisical:root@postgresql:5432/infisicalDB(用户名、密码、库名分别来自postgresql.auth.username/password/database,见 values.yaml)。

7.2 非 default namespace 的迁移修复与 ServiceAccount(v1.3.0 / v1.4.0)

  • v1.3.0 修复了数据库迁移在非defaultnamespace 下不执行的问题;
  • v1.4.0(2024-11-06)将 Chart 完整文档化,并引入infisical.serviceAccount.create——默认自动创建 ServiceAccount(values.yaml 中create: true),命名规则为<release-name>-infisical(见 templates/_helpers.tpl)。

ServiceAccount 关联的 RBAC 在 templates/jobs-rbac.yaml 中定义:主 Role 对batch/jobs具备get/watch/list权限;当autoBootstrap.enabled时,另建一个针对 Secret 的 Role(get/create/update)并绑定到 bootstrap 目标 namespace,支撑 bootstrap Job 将根身份凭据写回 K8s Secret。

八、Auto-bootstrap:一键初始化实例(贯穿多版本)

虽然 auto-bootstrap 在 v1.3.0 之前就已存在,但后续版本持续为其补齐安全上下文(v1.10.0)与 RBAC(v1.4.0)。其工作流见 templates/bootstrap-job.yaml:

  1. post-install钩子(权重 10)创建 Job,Job 名称带.Release.Revision,并在下次钩子创建前删除(before-hook-creation);
  2. init 容器wait-for-infisicalcurlimages/curl:8.14.1轮询http://<release>-infisical:8080/api/status直到就绪;
  3. 主容器使用infisical/cli:<tag>执行bootstrap命令,通过--output=k8-secret--k8-secret-name--k8-secret-namespace--organization--k8-secret-template--ignore-if-bootstrapped=true参数,把格式化后的 root identity 凭据写入目标 Secret;
  4. 凭据来源为infisical.autoBootstrap.credentialSecret.name指定的 Secret(通过envFrom注入)。

启用方式(values.yaml):

infisical: autoBootstrap: enabled: true organization: "my-org" secretDestination: name: "infisical-bootstrap-secret" namespace: "default" credentialSecret: name: "infisical-bootstrap-credentials"

默认secretTemplate{"data":{"token":"{{.Identity.Credentials.Token}}"}},支持encodeBase64等函数,可自定义写入 Secret 的字段结构。

九、升级路径与兼容性速查

综合 CHANGELOG 全部条目,升级时建议按此清单核对:

  1. v1.7.2 起:删除 values 中的autoDatabaseSchemaMigration(应用启动时自动迁移);
  2. v1.7.0 起:依赖解析改为 OCI(oci://registry-1.docker.io/bitnamicharts),需要执行helm dependency update
  3. v1.8.0 起:bundled ingress-nginx 使用infisical-nginx专用 IngressClass;自带控制器的用户无需改动(默认回落nginx);显式设置过ingress.ingressClassName的覆盖继续生效;
  4. v1.10.0 起:默认注入 pod/container 两级安全上下文,升级会触发一次性 Pod 滚动;如需完全自管,可将对应键设为null
  5. v1.9.0 起:可使用extraContainers/extraInitContainers扩展 Pod,注意它们与podSecurityContext(仅fsGroup)的设计配合,不会强制改变其运行用户;
  6. v1.7.1 起extraVolumes/extraVolumeMounts会同时作用于核心 Pod 与迁移相关作业。

快速开始(查看安装方式,不修改仓库):

# 在仓库根目录下 helm dependency build helm-charts/infisical-standalone-postgres helm install infisical helm-charts/infisical-standalone-postgres \ --namespace infisical --create-namespace \ --set ingress.hostName=app.example.com

安装前还需准备存放 Infisical 根凭据的 Secret(默认引用名为infisical-secrets,通过infisical.kubeSecretRef配置),或启用autoBootstrap自动生成。

十、结语

从 v1.3.0 到 v1.10.0,infisical-standalone-postgresChart 的演进脉络非常清晰:先是修复非 default namespace 迁移、补齐 ServiceAccount 与 Secret 复用(v1.3.0/v1.4.0);随后开放调度编排(nodeSelector/tolerations、topologySpreadConstraints)与自定义卷/环境变量/侧车容器(v1.5.0/v1.6.1/v1.4.1/v1.7.3/v1.9.0);再完成依赖体系的 OCI 化与镜像仓库迁移(v1.7.0/v1.7.2);最终在 v1.8.0 与 v1.10.0 分别解决了 IngressClass 冲突与 Pod Security restricted 合规这两个生产环境最关心的议题。每一步都同步体现在 values.yaml 与模板源码中,本文给出的全部配置均可直接用于生产实践。

【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 17:22:19

本科毕设Hadoop股票分析系统搭建与调试指南

简介&#xff1a;这是一套面向计算机专业本科生的毕业设计级实战项目&#xff0c;基于Hadoop生态构建股票大数据分析系统&#xff0c;专为毕设选题、课程设计及大数据入门实践者打造&#xff0c;解决从数据采集、存储到可视化分析的全流程技术落地问题。资源包共57个文件&#…

作者头像 李华
网站建设 2026/9/10 17:20:30

Claude in Chrome正式版:浏览器Agent、自动批准与安全分类器全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 17:16:33

MAX2769ETI+T,多星座GNSS单芯片射频接收机前端

MAX2769ETIT是ADI&#xff08;原Maxim&#xff09;基于SiGe BiCMOS工艺的完整低中频GNSS射频接收前端&#xff0c;支持GPS、GLONASS、Galileo卫星定位信号接收。单芯片集成双路LNA、混频器、镜像抑制滤波器、PGA、分数N PLL/VCO、有源天线检测与多位ADC&#xff0c;无需外置中频…

作者头像 李华
网站建设 2026/9/10 17:16:31

AD8232ACPZ-R7,单导联ECG超低功耗生物电位模拟前端

AD8232ACPZ-R7是ADI亚德诺单导联生物电专用模拟前端AFE芯片&#xff0c;专为ECG心电、肌电EMG等微弱生物电位信号采集设计。单芯片集成仪表放大器、双极点高通滤波、右腿驱动RLD电路、导联脱落检测、辅助运放&#xff0c;支持2.0V~3.5V单电源&#xff0c;典型增益100倍&#xf…

作者头像 李华