
本文详解 openshift 0.3.3 `sample-app` 部署过程中因工作目录错位导致的自签名证书校验失败问题(如 `x509: certificate signed by unknown authority`),并提供精准的目录切换方案与安全实践建议。
在 OpenShift Origin v0.3.3 的早期样例应用(sample-app)部署流程中,一个极易被忽略却至关重要的细节是命令执行路径。错误通常表现为以下两类典型报错:
x509: certificate signed by unknown authority
例如运行以下命令时:
openshift ex policy add-user view anypassword:test-admin
# 或
openshift ex registry --create --credentials="${KUBECONFIG}"根本原因并非证书本身无效或未被信任,而是 OpenShift 客户端(openshift 二进制)默认尝试从当前工作目录下加载本地生成的 TLS 证书与密钥(如 openshift.local.config/master/ca.crt、admin.kubeconfig 等)。而官方文档中的步骤存在隐式路径依赖:
- 可选步骤 1(生成配置与证书):需在 origin/examples/sample-app/ 子目录中执行(例如 ./setup.sh),此时证书将生成于该目录下的 openshift.local.config/;
- 后续步骤 4 及之后的 CLI 命令(如 openshift ex policy、openshift ex registry):文档默认假设你已返回 origin/ 根目录(即 openshift 二进制所在位置),并期望从 origin/openshift.local.config/ 加载证书。
⚠️ 若你在 sample-app/ 目录中生成了证书,却在 origin/ 根目录下运行命令,客户端将无法定位正确的 CA 证书,从而拒绝连接本地 https://localhost:8443 —— 这正是 x509: certificate signed by unknown authority 的真实来源。
✅ 正确做法是严格统一工作目录:
-
进入样例应用目录并完成初始化:
cd origin/examples/sample-app/ ./setup.sh # 此步生成 openshift.local.config/
-
所有后续 OpenShift CLI 命令必须在此目录(sample-app/)中执行:
# ✅ 正确:证书路径可被自动识别 ../openshift ex policy add-user view anypassword:test-admin # ✅ 正确:使用相对路径调用二进制,且当前目录含有效配置 ../openshift ex registry --create --credentials="openshift.local.config/master/admin.kubeconfig"
? 补充建议:
- 不要通过注释 Fatal() 或跳过证书校验来“绕过”错误——这会破坏集群安全性,且掩盖根本问题;
- 不推荐手动修改系统 CA 信任库(如向 /etc/pki/tls/certs/ca-bundle.crt 添加证书),因为 OpenShift 自签名证书仅对本机调试有效,且应由客户端配置而非系统级信任;
- 检查当前使用的 kubeconfig 是否指向正确证书:
grep "certificate-authority:" openshift.local.config/master/admin.kubeconfig # 应输出类似:certificate-authority: openshift.local.config/master/ca.crt
总结:该问题本质是路径敏感型配置管理问题,而非证书信任配置问题。遵循「在哪生成,就在哪运行」原则,即可彻底规避自签名证书校验失败,无需修改源码、不需调整系统证书库,安全、简洁、符合 OpenShift 设计预期。










