第 3 章 配置证书
3.1. 替换默认入口证书 复制链接链接已复制到粘贴板!
3.1.1. 了解默认入口证书 复制链接链接已复制到粘贴板!
默认情况下,OpenShift Container Platform 使用 Ingress Operator 创建内部 CA 并发布对 .apps
子域下应用程序有效的通配符证书。web 控制台和 CLI 也使用此证书。
内部基础架构 CA 证书是自签名的。虽然这种流程被某些安全或 PKI 团队认为是不当做法,但这里的风险非常小。隐式信任这些证书的客户端仅是集群中的其他组件。将默认通配符证书替换为由 CA bundle 中已包括的公共 CA 发布的证书,该证书由容器用户空间提供,允许外部客户端安全地连接到 .apps
子域下运行的应用程序。
3.1.2. 替换默认入口证书 复制链接链接已复制到粘贴板!
您可以替换 .apps
子域下所有应用程序的默认入口证书。替换了证书后,包括 web 控制台和 CLI 在内的所有应用程序都会具有指定证书提供的加密。
先决条件
-
您必须有用于完全限定
.apps
子域及其对应私钥的通配符证书。每个文件都应该采用单独的 PEM 格式。 - 私钥必须取消加密。如果您的密钥是加密的,请在将其导入到 OpenShift Container Platform 前对其进行解密。
-
证书必须包含显示
*.apps.<clustername>.<domain>
的subjectAltName
扩展。 - 证书文件可以包含链中的一个或者多个证书。该文件必须将通配符证书列为第一个证书,后跟其他中间证书,然后以 root CA 证书结尾。
- 将 root CA 证书复制到额外的 PEM 格式文件中。
-
验证所有包含
-----END CERTIFICATE-----
的证书在该行后有一个回车。
流程
创建仅包含用于为通配符证书签名的 root CA 证书的配置映射:
oc create configmap custom-ca \ --from-file=ca-bundle.crt=</path/to/example-ca.crt> \ -n openshift-config
$ oc create configmap custom-ca \ --from-file=ca-bundle.crt=</path/to/example-ca.crt> \
1 -n openshift-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
</path/to/cert.crt>
是 root CA 证书文件在本地文件系统中的路径。例如,/etc/pki/ca-trust/source/anchors
。
使用新创建的配置映射更新集群范围的代理配置:
oc patch proxy/cluster \ --type=merge \ --patch='{"spec":{"trustedCA":{"name":"custom-ca"}}}'
$ oc patch proxy/cluster \ --type=merge \ --patch='{"spec":{"trustedCA":{"name":"custom-ca"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您只更新集群的可信 CA,MCO 会更新
/etc/pki/ca-trust/source/anchors/openshift-config-user-ca-bundle.crt
文件,Machine Config Controller (MCC) 将可信 CA 更新应用到每个节点,以便不需要重启节点。但是,在这些更改时,Machine Config Daemon (MCD) 会在每个节点上重启关键服务,如 kubelet 和 CRI-O。这些服务重启会导致每个节点简要进入NotReady
状态,直到服务完全重启为止。如果您更改了
openshift-config-user-ca-bundle.crt
文件中的任何其他参数,如noproxy
,MCO 会重启集群中的每个节点。创建包含通配符证书链和密钥的 secret :
oc create secret tls <secret> \ --cert=</path/to/cert.crt> \ --key=</path/to/cert.key> \ -n openshift-ingress
$ oc create secret tls <secret> \
1 --cert=</path/to/cert.crt> \
2 --key=</path/to/cert.key> \
3 -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用新创建的 secret 更新 Ingress Controller 配置:
oc patch ingresscontroller.operator default \ --type=merge -p \ '{"spec":{"defaultCertificate": {"name": "<secret>"}}}' \ -n openshift-ingress-operator
$ oc patch ingresscontroller.operator default \ --type=merge -p \ '{"spec":{"defaultCertificate": {"name": "<secret>"}}}' \
1 -n openshift-ingress-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<secret>
替换为上一步中用于 secret 的名称。
重要要触发 Ingress Operator 执行滚动更新,您必须更新 secret 的名称。因为 kubelet 会自动将更改传播到卷挂载中的 secret,所以更新 secret 内容不会触发滚动更新。如需更多信息,请参阅红帽知识库解决方案。