vault-kubernetes 是一套用于在Kubernetes环境中与HashiCorp Vault交互的工具集,包含初始化容器(vault-kubernetes-authenticator、vault-kubernetes-synchronizer)和边车容器(vault-kubernetes-token-renewer),支持身份验证获取Vault令牌、同步Vault密钥到Kubernetes密钥以及令牌续期等核心功能,满足不同密钥管理场景需求。
基于Seth Vargo的工作开发。
启动初始化容器vault-kubernetes-authenticator,向Vault进行身份验证并获取Vault令牌。该令牌将在指定TTL(生存时间)后过期,适用于一次性密钥访问场景。
首先启动初始化容器vault-kubernetes-authenticator进行身份验证获取令牌,随后启动初始化容器vault-kubernetes-synchronizer,将Vault中的密钥同步到Kubernetes密钥中,支持密钥映射和编码处理。
启动初始化容器vault-kubernetes-authenticator获取Vault令牌,再启动边车容器vault-kubernetes-token-renewer,定期续期令牌,确保令牌在Pod整个生命周期内有效。
vault-kubernetes-token-renewer续期失败(如令牌已过期),容器将重启(需设置restartPolicy=always)。此时可通过两种方式恢复:1)利用Kubernetes的进程命名空间共享和容器生命周期钩子,让Pod终止并重启,由初始化容器重新获取令牌;2)启用VAULT_REAUTH=true,让续期容器重新身份验证并更新令牌,应用需监听令牌文件变化。k8s.io/client-go兼容性问题,仓库中已移除go.sum文件。工具集通过以下环境变量配置Vault客户端,最小配置需设置VAULT_ADDR(Vault地址),若禁用TLS验证需添加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验证(默认false) |
VAULT_TLS_SERVER_NAME | TLS服务器名称 |
VAULT_WRAP_TTL | 包装令牌TTL |
VAULT_MAX_RETRIES | 最大重试次数 |
VAULT_TOKEN | Vault令牌(通常由工具集自动生成,无需手动设置) |
VAULT_MFA | MFA认证信息 |
VAULT_RATE_LIMIT | 速率限制 |
详细配置说明参见:Vault API文档
vault-kubernetes-authenticator用于向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 |
Pod日志输出:
$ kubectl logs vault-kubernetes-authenticator-5675d58d95-4wd8v -c vault-kubernetes-authenticator 2018/11/26 14:56:29 成功向Vault进行身份验证 2018/11/26 14:56:29 成功将Vault令牌存储到 /home/vault/.vault-token
获取令牌:
bash$ kubectl 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密钥名称):
| 映射表达式 | 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:。例如,创建Vault密钥:
bashecho "base64:$(base64 -w0 filename)" | vault kv put secret/path key=-
同步时工具集会自动解码,避免双重编码。
| 环境变量 | 描述 | 是否必填 | 默认值 |
|---|---|---|---|
VAULT_TOKEN_PATH | 令牌存储路径(与vault-kubernetes-authenticator一致) | 是 | - |
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,且身份验证失败:
sys/mounts的read权限)或Vault KV引擎版本未配置(需启用版本控制,如vault kv enable-versioning secret/)。Vault密钥准备:
bash# 创建Vault密钥 vault kv put secret/k8s/first one=*** two=23456781 vault kv put secret/k8s/second green=*** poison=ivy
Kubernetes部署配置(片段):
yamlspec: initContainers: - name: vault-kubernetes-authenticator image: postfinance/vault-kubernetes-authenticator env: - name: VAULT_ADDR value: "[***]" - name: VAULT_ROLE value: "my-vault-role" - name: VAULT_TOKEN_PATH value: "/vault/token" volumeMounts: - name: vault-token mountPath: "/vault" - name: vault-kubernetes-synchronizer image: postfinance/vault-kubernetes-synchronizer env: - name: VAULT_ADDR value: "[***]" - name: VAULT_TOKEN_PATH value: "/vault/token" - name: VAULT_SECRETS value: "secret/data/k8s/first,secret/data/k8s/second" volumeMounts: - name: vault-token mountPath: "/vault" volumes: - name: vault-token emptyDir: {}
同步结果验证:
bash# 查看生成的Kubernetes密钥 kubectl get secrets | grep -e first -e second # 查看密钥详情 kubectl describe secret first # 输出包含注解:vault-secret=secret/data/k8s/first,数据包含one和two字段
vault-kubernetes-token-renewer用于定期续期Vault令牌,确保Pod生命周期内令牌有效。
| 环境变量 | 描述 | 是否必填 | 默认值 |
|---|---|---|---|
VAULT_TOKEN_PATH | 令牌存储路径(与初始化容器一致) | 是 | - |
VAULT_REAUTH | 令牌无效时是否重新身份验证(需同时配置VAULT_ROLE等身份验证参数) | 否 | false |
VAULT_TTL | 请求的令牌TTL(Vault可能覆盖此值) | 否 | - |
Kubernetes部署配置(片段):
yamlspec: initContainers: - name: vault-kubernetes-authenticator image: postfinance/vault-kubernetes-authenticator env: - name: VAULT_ADDR value: "[***]" - name: VAULT_ROLE value: "my-vault-role" - name: VAULT_TOKEN_PATH value: "/vault/token" volumeMounts: - name: vault-token mountPath: "/vault" containers: - name: vault-kubernetes-token-renewer image: postfinance/vault-kubernetes-token-renewer env: - name: VAULT_ADDR value: "[***]" - name: VAULT_TOKEN_PATH value: "/vault/token" - name: VAULT_REAUTH value: "true" - name: VAULT_ROLE value: "my-vault-role" volumeMounts: - name: vault-token mountPath: "/vault" volumes: - name: vault-token emptyDir: {}
日志验证:
bashkubectl logs <pod-name> -c vault-kubernetes-token-renewer # 输出包含:2018/11/26 14:56:32 start renewer loop,2018/11/26 14:56:32 token renewed
bashexport GO111MODULE=on export DOCKER_TARGET="registry.example.com/repopath" # 镜像仓库地址(可选,用于推送)
bashmage buildAllImages
demo/profile文件配置环境。bashcd demo ./deploy.sh profile
bash./delete.sh namespace
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 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