
该镜像提供与Vault集成的工具,用于在Kubernetes环境中实现Vault认证、密钥同步及令牌管理。基于Seth Vargo的https://github.com/sethvargo/vault-kubernetes-authenticator%E9%A1%B9%E7%9B%AE%EF%BC%8C%E6%94%AF%E6%8C%81%E4%B8%89%E7%A7%8D%E6%A0%B8%E5%BF%83%E5%9C%BA%E6%99%AF%EF%BC%9A%E8%8E%B7%E5%8F%96%E4%B8%80%E6%AC%A1%E6%80%A7Vault%E4%BB%A4%E7%89%8C%E3%80%81%E5%90%8C%E6%AD%A5Vault%E5%AF%86%E9%92%A5%E8%87%B3Kubernetes%E5%AF%86%E9%92%A5%E3%80%81%E4%BB%A5%E5%8F%8A%E4%B8%BAPod%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%86%85%E6%8F%90%E4%BE%9B%E6%8C%81%E7%BB%AD%E6%9C%89%E6%95%88%E7%9A%84Vault%E4%BB%A4%E7%89%8C%E3%80%82
启动初始化容器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 12345678 two 23456781 $ vault kv get secret/k8s/second ====== Metadata ====== ... ===== Data ===== Key Value --- ----- green lantern 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 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务