vault-kubernetes-authenticator是一个用于Kubernetes环境与Vault集成的工具镜像,提供初始化容器(Init Container)和Sidecar容器,实现Vault令牌获取、Vault密钥同步至Kubernetes密钥以及令牌续期功能,保障Pod在生命周期内安全访问Vault资源。
vault-kubernetes-authenticator向Vault进行身份验证,获取一次性使用的Vault令牌。vault-kubernetes-synchronizer将Vault密钥同步至Kubernetes密钥,并支持标签管理和过期密钥清理。vault-kubernetes-token-renewer定期续期Vault令牌,确保Pod生命周期内令牌有效。启动初始化容器vault-kubernetes-authenticator向Vault进行身份验证并获取令牌,令牌将在指定TTL后过期,适用于一次性访问Vault的场景。
先通过vault-kubernetes-authenticator获取Vault令牌,再启动vault-kubernetes-synchronizer将指定Vault密钥同步为Kubernetes密钥,支持密钥映射、编码处理及标签管理。
先通过vault-kubernetes-authenticator获取令牌,再启动Sidecar容器vault-kubernetes-token-renewer定期续期令牌,确保Pod运行期间令牌持续有效。
vault-kubernetes-token-renewer续期失败时(restartPolicy=always),容器将重启。若令牌已过期无法续期,需重启Pod由vault-kubernetes-authenticator重新获取令牌。VAULT_REAUTH=true,令牌续期失败时将重新认证,此时需确保提供vault-kubernetes-authenticator所需的所有认证环境变量,且令牌消费者需支持重新读取令牌文件。支持通过环境变量配置Vault客户端,常用变量如下:
VAULT_ADDR:Vault服务器地址VAULT_CACERT:CA证书路径VAULT_SKIP_VERIFY:是否跳过TLS验证(默认false)VAULT_TOKEN:Vault令牌VAULT_ROLE:用于身份验证的Vault角色名称最小配置需设置
VAULT_ADDR,若未配置TLS验证,需设置VAULT_SKIP_VERIFY=true。
用于向Vault进行身份验证并获取令牌,存储至指定路径供其他容器使用。
| 环境变量 | 描述 | 是否必需 | 默认值 |
|---|---|---|---|
VAULT_ROLE | 用于身份验证的Vault角色名称 | 是 | - |
VAULT_TOKEN_PATH | 存储令牌的磁盘路径(通常为共享卷) | 否 | - |
VAULT_AUTH_MOUNT_PATH | Vault中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-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、secret/k8s/second | first、second |
Kubernetes密钥名称和标签需符合RFC-1123规范。
若Vault中存储的是二进制数据(如Java KeyStore),需使用base64编码并添加前缀base64:。例如:
bash# 生成Vault密钥内容 echo "base64:$(base64 -w0 filename)"
同步时会自动解码,避免双重编码。
| 环境变量 | 描述 | 是否必需 | 默认值 |
|---|---|---|---|
VAULT_TOKEN_PATH | 存储令牌的磁盘路径(与vault-kubernetes-authenticator共享) | 是 | - |
VAULT_SECRETS | 待同步的Vault密钥列表,逗号分隔(遵循密钥映射规则) | 是 | - |
SECRET_PREFIX | Kubernetes密钥名称前缀(如v3t_,则Vault密钥first同步为v3t_first) | 否 | - |
SYNCHRONIZER_ANNOTATION | 用于标记同步生成的Kubernetes密钥的注解键名 | 否 | 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 === Data === Key Value --- ----- one *** two 23456781 $ vault kv get secret/k8s/second === 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-authenticator获取的令牌,定期续期Vault令牌,确保Pod生命周期内令牌有效。
| 环境变量 | 描述 | 是否必需 | 默认值 |
|---|---|---|---|
VAULT_TOKEN_PATH | 存储令牌的磁盘路径(与vault-kubernetes-authenticator共享) | 是 | - |
VAULT_REAUTH | 令牌无效时是否重新认证(需提供vault-kubernetes-authenticator的认证环境变量) | 否 | 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 # Sidecar容器日志 $ 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
基于Seth Vargo的工作。


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