第 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 内容不会触发滚动更新。如需更多信息,请参阅红帽知识库解决方案。