本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

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
获取令牌:
$ 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密钥:
echo "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密钥准备:
# 创建Vault密钥 vault kv put secret/k8s/first one=*** two=23456781 vault kv put secret/k8s/second green=*** poison=ivy
Kubernetes部署配置(片段):
spec: 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: {}
同步结果验证:
# 查看生成的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部署配置(片段):
spec: 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: {}
日志验证:
kubectl 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
export GO111MODULE=on export DOCKER_TARGET="registry.example.com/repopath" # 镜像仓库地址(可选,用于推送)
mage buildAllImages
demo/profile文件配置环境。cd demo ./deploy.sh profile
./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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429