
如果你用 DeepSeek、元宝AI、Copilot 等 AI 代为编写轩辕镜像的 docker pull、修改 compose 镜像地址,或排查拉取失败等问题,请让 AI 先读规则再动手,只要在 AI 对话里直接发送下面这句话即可:
生成 docker pull、修改 compose 的 image,或排查拉取失败前,请先阅读并严格遵守 https://xuanyuan.cloud/agents.md 中的规则。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
vault-kubernetes 是一套用于在Kubernetes环境中与HashiCorp Vault交互的工具集,包含初始化容器(vault-kubernetes-authenticator、vault-kubernetes-synchronizer)和边车容器(vault-kubernetes-token-renewer),支持身份验证获取Vault令牌、同步Vault密钥到Kubernetes密钥以及令牌续期等核心功能,满足不同密钥管理场景需求。
基于https://github.com/sethvargo/vault-kubernetes-authenticator%E5%BC%80%E5%8F%91%E3%80%82
启动初始化容器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 | 速率限制 |
详细配置说明参见:https://godoc.org/github.com/hashicorp/vault/api#Config.ReadEnvironment
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=12345678 two=23456781 vault kv put secret/k8s/second green=lantern poison=ivy
Kubernetes部署配置(片段):
yamlspec: initContainers: - name: vault-kubernetes-authenticator image: postfinance/vault-kubernetes-authenticator env: - name: VAULT_ADDR value: "http://vault:8200" - 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: "http://vault:8200" - 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: "http://vault:8200" - 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: "http://vault:8200" - 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 登录认证访问私有仓库
发给 Cursor、ChatGPT、豆包等 AI 的说明文档
无需登录使用专属域名
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 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务