
本文详解 openshift 0.3.3 sample-app 部署时因工作目录错位导致的自签名证书校验失败问题,指出关键在于 `openshift ex` 命令需在正确子目录下执行,以确保客户端能自动加载生成的本地证书。
在 OpenShift Origin v0.3.3 的早期部署流程中(如 CentOS 6.6 环境),运行 openshift ex policy add-user 或 openshift ex registry --create 时频繁报出如下错误:
x509: certificate signed by unknown authority
该错误并非证书本身无效,而是客户端无法定位或加载 OpenShift 自动签发的本地 CA 证书与客户端证书对。根本原因在于文档中隐含的目录上下文切换未被明确强调:
- 步骤 1(可选但关键):在 origin/sample/ 子目录下执行 ./build.sh(或类似初始化脚本),该过程会生成一套自签名证书(如 admin.crt、admin.key、ca.crt),并写入默认配置路径(如 ~/.kube/config 或当前目录下的 openshift.local.config/);
- 步骤 4 及后续命令(如 openshift ex policy add-user、openshift ex registry --create)必须在 origin/ 根目录下执行——因为此时 openshift 二进制会按约定路径(如 openshift.local.config/master/ca.crt)查找证书;若在 sample/ 目录下执行,则证书路径解析失败,导致 TLS 握手拒绝。
✅ 正确操作顺序示例:
# 1. 进入 sample 目录生成证书和配置
cd origin/sample/
./build.sh # 或按 README 执行初始化
# 2. 切回 origin 根目录(关键!)
cd ../
# 3. 在 origin/ 下执行所有 openshift ex 命令
openshift ex policy add-user view anypassword:test-admin
openshift ex registry --create --credentials="${KUBECONFIG}"⚠️ 注意事项:
- 不要手动修改 Go 源码(如注释 Fatal())或硬编码跳过证书校验——这会破坏安全模型且不可持续;
- 不建议通过系统级信任(如向 /etc/pki/tls/certs/ca-bundle.crt 追加证书)来“绕过”问题,因为 OpenShift 客户端依赖的是其自身生成的 ca.crt,而非系统 CA 仓库;
- 若已误操作导致配置混乱,可清理后重试:
rm -rf openshift.local.config/ ~/.kube/config cd sample && ./build.sh && cd ..
? 总结:OpenShift v0.3.3 的证书机制高度依赖工作目录结构。严格遵循「在 sample/ 初始化 → 在 origin/ 执行命令」的路径约定,即可让 openshift ex 自动发现并使用正确的证书链,彻底避免 x509: certificate signed by unknown authority 错误。










