该镜像提供与Vault集成的工具,用于在Kubernetes环境中实现Vault认证、密钥同步及令牌管理。基于Seth Vargo的vault-kubernetes-authenticator项目,支持三种核心场景:获取一次性Vault令牌、同步Vault密钥至Kubernetes密钥、以及为Pod生命周期内提供持续有效的Vault令牌。
启动初始化容器vault-kubernetes-authenticator向Vault认证并获取令牌,该令牌将在指定TTL后过期,适用于一次性密钥访问场景。
先通过vault-kubernetes-authenticator认证获取令牌,再启动vault-kubernetes-synchronizer初始化容器,将Vault密钥同步至Kubernetes密钥,适用于需要在Kubernetes中持久化使用Vault密钥的场景。
通过vault-kubernetes-authenticator初始化容器获取令牌,再启动vault-kubernetes-token-renewer边车容器定期续期令牌,确保Pod运行期间令牌持续有效。
通过以下环境变量配置Vault客户端,最小配置需包含VAULT_ADDR(建议配合VAULT_SKIP_VERIFY=true用于测试环境):
VAULT_ADDR:Vault服务地址VAULT_CACERT:CA证书路径VAULT_CAPATH:CA证书目录VAULT_CLIENT_CERT:客户端证书路径VAULT_CLIENT_KEY:客户端密钥路径VAULT_CLIENT_TIMEOUT:客户端超时时间VAULT_SKIP_VERIFY:是否跳过TLS验证(布尔值)VAULT_TLS_SERVER_NAME:TLS服务器名称VAULT_WRAP_TTL:包装令牌TTLVAULT_MAX_RETRIES:最大重试次数VAULT_TOKEN:Vault令牌VAULT_MFA:MFA配置VAULT_RATE_LIMIT:速率限制vault-kubernetes-authenticator用于向Vault认证并获取令牌,存储至指定路径供后续使用。
VAULT_ROLE:必填,用于认证的Vault角色名称VAULT_TOKEN_PATH:令牌存储路径(通常为共享卷)VAULT_AUTH_MOUNT_PATH:Kubernetes认证方法挂载路径(默认:kubernetes)SERVICE_ACCOUNT_TOKEN_PATH:Kubernetes服务账户JWT令牌路径(默认:/var/run/secrets/kubernetes.io/serviceaccount/token)ALLOW_FAIL:认证失败时是否允许容器成功终止(默认:false,需后续容器处理无令牌场景)bash# 查看容器日志 $ k logs vault-kubernetes-authenticator-5675d58d95-4wd8v -c vault-kubernetes-authenticator 2018/11/26 14:56:29 successfully authenticated to vault 2018/11/26 14:56:29 successfully stored vault token at /home/vault/.vault-token # 验证令牌 $ k exec -ti vault-kubernetes-authenticator-5675d58d95-4wd8v sh ~ $ VAULT_TOKEN=$(cat /home/vault/.vault-token) ~ $ echo $VAULT_TOKEN 8Pj0EzFLWQv8uWcjbP9hF1MB
vault-kubernetes-synchronizer依赖vault-kubernetes-authenticator,将Vault密钥同步至Kubernetes密钥,支持密钥映射、编码处理及标签管理。
| 映射格式 | Vault密钥路径 | Kubernetes密钥名称 |
|---|---|---|
secret/k8s/first | secret/k8s/first | first |
secret/k8s/first:third | secret/k8s/first | third |
secret/k8s/ | secret/k8s/first | first |
secret/k8s/second | second |
Kubernetes中的标签/名称需符合RFC-1123规范。
若Vault中存储的是二进制数据(如Java KeyStore),需使用base64编码并添加前缀base64:。例如:
bash# 创建Vault密钥(包含base64编码数据) echo "base64:$(base64 -w0 filename)" | vault kv put secret/k8s/jks keystore=-
同步器会自动解码base64:前缀的内容,避免双重编码。
VAULT_TOKEN_PATH:令牌存储路径(与认证容器共享)VAULT_SECRETS:逗号分隔的Vault密钥路径列表(支持上述映射格式)SECRET_PREFIX:Kubernetes密钥名称前缀(如v3t_,则Vault密钥first同步为v3t_first)SYNCHRONIZER_ANNOTATION:用于标记同步器管理的密钥的注解(默认:vault-secret)SYNCHRONIZER_LABELS:添加到同步密钥的标签(格式:k1=v1,k2=v2,重复键会覆盖)vault-kubernetes-authenticator认证失败且ALLOW_FAIL=true:
VAULT_SECRETS对应的Kubernetes密钥是否已存在,存在则继续,缺失则失败Vault中存在两个密钥:
bash$ vault kv get secret/k8s/first ====== Metadata ====== ... === Data === Key Value --- ----- one *** two 23456781 $ vault kv get secret/k8s/second ====== Metadata ====== ... ===== Data ===== Key Value --- ----- green *** poison ivy
配置同步参数:
yaml# deployment.yaml 片段 env: - name: VAULT_SECRETS value: "secret/data/k8s/first,secret/data/k8s/second"
同步后验证:
bash$ k get secrets | grep -e first -e second first Opaque 2 16m second Opaque 2 16m $ k describe secret first Name: first Namespace: vault-test Annotations: vault-secret=secret/data/k8s/first Type: Opaque Data ==== one: 8 bytes two: 8 bytes
vault-kubernetes-token-renewer依赖vault-kubernetes-authenticator,定期续期Vault令牌,确保Pod生命周期内令牌有效。
VAULT_TOKEN_PATH:令牌存储路径(与认证容器共享)VAULT_REAUTH:令牌无效时是否重新认证(默认:false,需同时提供认证容器的环境变量)VAULT_TTL:请求的令牌TTL(Vault可能覆盖此值)bash# 查看认证容器日志 $ k logs vault-kubernetes-token-renewer-844488f7bc-c6ztf -c vault-kubernetes-authenticator 2018/11/26 14:56:30 successfully authenticated to vault 2018/11/26 14:56:30 successfully stored vault token at /home/vault/.vault-token # 查看边车容器日志 $ k logs vault-kubernetes-token-renewer-844488f7bc-c6ztf -c vault-kubernetes-token-renewer 2018/11/26 14:56:32 start renewer loop 2018/11/26 14:56:32 token renewed
permission denied时,需为服务账户添加sys/mounts路径的read权限:
hclpath "sys/mounts" { capabilities = ["read"] }
strconv.Atoi: parsing "": invalid syntax时,需启用KV引擎版本:
bashvault secrets enable -version=2 kv # 启用v2版本 vault kv enable-versioning secret/ # 为现有路径启用版本控制


来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 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