Sealed Secrets 是一种“单向”加密的K8s Secrets,任何人都可以创建,但只有运行在目标集群中的控制器才能解密并恢复原始对象。
Sealed Secrets 概述
consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/sealed-secrets
希望在生产环境中使用Sealed Secrets?请尝试VMware Tanzu Application Catalog,这是Bitnami目录的商业版本。
自2025年8月28日起,Bitnami将升级其公共目录,在新的Bitnami Secure Images计划下提供精选的强化、安全聚焦镜像集。作为此次转型的一部分:
这些变更旨在通过推广软件供应链完整性和最新部署的最佳实践,提高所有Bitnami用户的安全态势。更多详情,请访问Bitnami Secure Images公告。
Bitnami Helm chart经过精心设计、积极维护,是在Kubernetes集群上部署容器的最快、最简单方式,这些容器已准备好处理生产工作负载。
本chart使用Helm包管理器在Kubernetes中引导部署Sealed Secret控制器。
要使用发布名称my-release安装chart:
consolehelm install my-release oci://REGISTRY_NAME/REPOSITORY_NAME/sealed-secrets
注意:您需要将占位符
REGISTRY_NAME和REPOSITORY_NAME替换为Helm chart仓库和存储库的引用。例如,对于Bitnami,需使用REGISTRY_NAME=registry-1.docker.io和REPOSITORY_NAME=bitnamicharts。
该命令使用默认配置在Kubernetes集群上部署Sealed Secrets控制器。参数部分列出了安装过程中可配置的参数。
提示:使用
helm list列出所有发布版本
Bitnami chart允许为chart部署中的所有容器设置资源请求和限制,这些配置位于resources值中(参见参数表)。设置请求对于生产工作负载至关重要,应根据具体用例进行调整。
为简化此过程,chart包含resourcesPreset值,可根据不同预设自动设置resources部分。有关这些预设的详细信息,请参见bitnami/common chart。但在生产工作负载中,不建议使用resourcesPreset,因为它可能无法完全适应您的特定需求。有关容器资源管理的更多信息,请参阅Kubernetes***文档。
通过将metrics.enabled设置为true,本chart可与Prometheus集成。这将在容器中公开Sealed Secrets原生Prometheus端口,并创建可通过metrics.service部分配置的metrics服务。该服务还将包含必要的注解,以便Prometheus自动抓取指标。
要使集成正常工作,需要安装Prometheus或Prometheus Operator。可安装Bitnami Prometheus helm chart或Bitnami Kube Prometheus helm chart以在集群中轻松部署Prometheus。
本chart可为与Prometheus Operator集成部署ServiceMonitor对象。要实现此目的,需将值metrics.serviceMonitor.enabled设置为true。确保集群中已安装Prometheus OperatorCustomResourceDefinitions,否则将失败并显示以下错误:
textno matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
安装Bitnami Kube Prometheus helm chart以获取必要的CRD和Prometheus Operator。
要在Kubernetes上备份和恢复Helm chart部署,需使用Velero(Kubernetes备份/恢复工具)备份源部署的持久卷,并将其附加到新部署。有关使用Velero的说明,请参见此指南。
与Sealed Secrets控制器交互的最简单方式是使用kubeseal工具。您可从sealed-secrets/releases页面下载二进制文件安装此CLI。
安装完成后,即可使用它加密密钥或获取控制器公钥证书,如下例所示:
console$ kubeseal --fetch-cert \ --controller-name=my-release \ --controller-namespace=my-release-namespace \ > pub-cert.pem
有关kubeseal使用的更多信息,请参阅Sealed Secrets文档中的kubeseal用法部分。
强烈建议在生产环境中使用不可变标签。这可确保如果相同标签更新为不同镜像,部署不会自动更改。
如果主容器有新版本、重大变更或严重漏洞,Bitnami将发布新chart更新其容器。
本chart支持Ingress资源。如果集群中安装了Ingress控制器(如nginx-ingress-controller或contour),可利用Ingress控制器提供应用服务。要启用Ingress集成,需将ingress.enabled设置为true。
最常见的场景是将一个主机名映射到部署,此时可使用ingress.hostname属性设置主机名,ingress.tls参数可用于为此主机添加TLS配置。
但也可配置多个主机。为此,可设置ingress.extraHosts参数(如可用),以数组形式指定主机名;ingress.extraTLS参数(如可用)可用于为额外主机添加TLS配置。
注意:对于
ingress.extraHosts参数中指定的每个主机,需设置名称、路径以及Ingress控制器应了解的任何注解。并非所有Ingress控制器都支持所有注解,但此注解参考文档列出了许多流行Ingress控制器支持的注解。
添加TLS参数(如可用)将使chart生成HTTPS URL,应用将在443端口可用。TLS密钥不必由本chart生成,但如果启用TLS,Ingress记录需在TLS密钥存在后才能工作。
了解更多关于Ingress控制器。
本chart便于创建用于Ingress控制器的TLS密钥(尽管非必需)。常见使用场景包括:
在前两种情况下,需要证书和密钥文件,文件应为.pem格式。
证书文件示例:
注意:如果存在证书链,可能包含多个证书。
text-----BEGIN CERTIFICATE----- MIID6TCCAtGgAwIBAgIJAIaCwivkeB5EMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV ... jScrvkiBO65F46KioCL9h5tDvomdU1aqpI/CBzhvZn1c0ZTf87tGQR8NK7v7 -----END CERTIFICATE-----
证书密钥示例:
text-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAvLYcyu8f3skuRyUgeeNpeDvYBCDcgq+LsWap6zbX5f8oLqp4 ... wrj2wDbCDCFmfqnSJ+dKI3vFLlEz44sAV8jX/kd4Y6ZTQhlLbYc= -----END RSA PRIVATE KEY-----
*.ingress.secrets条目的certificate和key值中。INGRESS_HOSTNAME-tls的TLS密钥(其中INGRESS_HOSTNAME是占位符,需替换为使用*.ingress.hostname参数设置的主机名)。*.ingress.annotations中添加cert-manager的相应注解。*.ingress.tls和*.ingress.selfSigned为true。如果需要在Sealed Secrets所在的Pod中添加额外容器(如额外指标或日志导出器),可使用sidecars参数定义:
yamlsidecars: - name: your-image-name image: your-image imagePullPolicy: Always ports: - name: portname containerPort: 1234
如果这些sidecar导出额外端口,可使用service.extraPorts参数(如可用)添加额外端口定义,如下例所示:
yamlservice: extraPorts: - name: extraPort port: *** targetPort: ***
注意:此Helm chart已包含Prometheus导出器的sidecar容器(如适用)。可在部署时添加
--enable-metrics=true参数激活这些容器。因此,sidecars参数应仅用于额外的sidecar容器。
如果需要在同一Pod中添加额外的init容器,可使用initContainers参数定义,示例如下:
yamlinitContainers: - name: your-image-name image: your-image imagePullPolicy: Always ports: - name: portname containerPort: 1234
了解更多关于sidecar容器和init容器。
本chart允许使用affinity参数设置自定义亲和性。有关Pod亲和性的更多信息,请参见Kubernetes文档。
作为替代方案,可使用bitnami/common chart中提供的Pod亲和性、Pod反亲和性和节点亲和性预设配置。为此,需设置podAffinityPreset、podAntiAffinityPreset或nodeAffinityPreset参数。
| 名称 | 描述 | 值 |
|---|---|---|
global.imageRegistry | 全局Docker镜像仓库 | "" |
global.imagePullSecrets | 全局Docker仓库密钥名称数组 | [] |
global.security.allowInsecureImages | 允许跳过镜像验证 | false |
global.compatibility.openshift.adaptSecurityContext | 调整部署的securityContext部分,使其与OpenShift restricted-v2 SCC兼容:移除runAsUser、runAsGroup和fsGroup,让平台使用允许的默认ID。可能值:auto(如果检测到运行集群为OpenShift则应用)、force(始终执行调整)、disabled(不执行调整) | auto |
| 名称 | 描述 | 值 |
|---|---|---|
kubeVersion | 覆盖Kubernetes版本 | "" |
nameOverride | 部分覆盖common.names.fullname的字符串 | "" |
fullnameOverride | 完全覆盖common.names.fullname的字符串 | "" |
namespaceOverride | 完全覆盖common.names.namespace的字符串 | "" |
commonLabels | 添加到所有部署对象的标签 | {} |
commonAnnotations | 添加到所有部署对象的注解 | {} |
clusterDomain | Kubernetes集群域名 | cluster.local |
extraDeploy | 随发布一起部署的额外对象数组 | [] |
| 名称 | 描述 | 值 |
|---|---|---|
image.registry | Sealed Secrets镜像仓库 | REGISTRY_NAME |
image.repository | Sealed Secrets镜像存储库 | REPOSITORY_NAME/sealed-secrets |
image.digest | Sealed Secrets镜像摘要,格式为sha256:aa.... 注意:如果设置此参数,将覆盖标签 | "" |
image.pullPolicy | Sealed Secrets镜像拉取策略 | IfNotPresent |
image.pullSecrets | Sealed Secrets镜像拉取密钥 | [] |
image.debug | 启用Sealed Secrets镜像调试模式 | false |
command | 覆盖默认容器命令(使用自定义镜像时有用) | [] |
commandArgs | 额外参数(不覆盖默认参数) | [] |
args | 覆盖默认容器参数(使用自定义镜像时有用) | [] |
revisionHistoryLimit | 保留的旧历史记录数量,允许回滚(如果未设置,默认Kubernetes值为10) | "" |
createController | 指定是否创建Sealed Secrets控制器 | true |
secretName | 包含用于加密密钥的现有TLS密钥名称 | "" |
updateStatus | 指定Sealed Secrets控制器是否更新status子资源 | true |
skipRecreate | 指定Sealed Secrets控制器是否跳过重新创建已删除的密钥 | false |
keyRenewPeriod | 指定密钥续订周期。默认30天。例如keyRenewPeriod: "720h30m" | "" |
rateLimit | verify端点允许的持续请求数/秒 | "" |
rateLimitBurst | verify端点允许每秒超过速率限制的请求数 | "" |
additionalNamespaces | 用于管理Sealed Secrets的命名空间列表 | [] |
privateKeyAnnotations | 要设置在密封密钥对上的注解映射 | {} |
privateKeyLabels | 要设置在密封密钥对上的标签映射 | {} |
logInfoStdout | 指定Sealed Secrets控制器是否将info日志输出到stdout | false |
containerPorts.http | 要开放的控制器HTTP容器端口 | 8080 |
containerPorts.metrics | 控制器指标容器端口 | 8081 |
resourcesPreset | 根据通用预设设置容器资源(允许值:none、nano、micro、small、medium、large、xlarge、2xlarge)。 |
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429