9.9. 使用 Red Hat OpenShift 的 cert-manager Operator 保护路由
在 OpenShift Container Platform 中,路由 API 被扩展为提供可配置的选项,以通过 secret 引用 TLS 证书。启用 外部管理的证书技术预览功能创建路由 后,您可以最小化手动干预的错误,简化证书管理过程,并使 OpenShift Container Platform 路由器能够及时提供引用的证书。
使用 cert-manager Operator for Red Hat OpenShift 保护路由只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
9.9.1. 配置证书以保护集群中的路由 复制链接链接已复制到粘贴板!
以下步骤演示了在 OpenShift 中使用 cert-manager Operator for Red Hat OpenShift 的流程,并带有 Let's Encrypt ACME HTTP-01 challenge 类型来保护 OpenShift 中的路由资源。
先决条件
- 您已为 Red Hat OpenShift 安装了 cert-manager Operator 版本 1.14.0 或更高版本。
-
您已启用了
RouteExternalCertificate
功能门。 -
在
routes/custom-host
子资源上具有create
和update
权限。 -
您有一个要公开的
Service
资源。
流程
运行以下命令,创建一个
Issuer
来配置 HTTP-01 solver。有关其他 ACME 签发者类型,请参阅"配置 ACME 签发者"。Issuer.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
Issuer
所在的命名空间。它应与您的路由的命名空间相同。
运行以下命令,为路由创建
Certificate
对象。secretName
指定将由 cert-manager 发布和管理的 TLS secret,并在下一步中在路由中引用。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令,创建一个
Role
来提供路由器服务帐户权限来读取引用的 secret:oc create role secret-reader \ --verb=get,list,watch \ --resource=secrets \ --resource-name=<secret_name> \ --namespace=<namespace>
$ oc create role secret-reader \ --verb=get,list,watch \ --resource=secrets \ --resource-name=<secret_name> \
1 --namespace=<namespace>
2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令,创建一个
RoleBinding
资源,将 router 服务帐户与新创建的Role
资源绑定:oc create rolebinding secret-reader-binding \ --role=secret-reader \ --serviceaccount=openshift-ingress:router \ --namespace=<namespace>
$ oc create rolebinding secret-reader-binding \ --role=secret-reader \ --serviceaccount=openshift-ingress:router \ --namespace=<namespace>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 secret 和路由所在的命名空间。
运行以下命令,为您的服务资源创建一个路由,它使用边缘 TLS 终止和自定义主机名。在下一步中创建一个
Certificate
资源时使用的主机名。oc create route edge <route_name> \ --service=<service_name> \ --hostname=<hostname> \ --namespace=<namespace>
$ oc create route edge <route_name> \
1 --service=<service_name> \
2 --hostname=<hostname> \
3 --namespace=<namespace>
4 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新路由的
.spec.tls.externalCertificate
字段来引用之前创建的 secret,并使用 cert-manager 发布的证书:oc patch route <route_name> \ -n <namespace> \ --type=merge \ -p '{"spec":{"tls":{"externalCertificate":{"name":"<secret_name>"}}}}'
$ oc patch route <route_name> \
1 -n <namespace> \
2 --type=merge \ -p '{"spec":{"tls":{"externalCertificate":{"name":"<secret_name>"}}}}'
3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证证书是否已创建并就绪:
oc get certificate -n <namespace> oc get secret -n <namespace>
$ oc get certificate -n <namespace>
1 $ oc get secret -n <namespace>
2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证路由器是否使用引用的外部证书。该命令应该返回状态代码
200 OK
。curl -IsS https://<hostname>
$ curl -IsS https://<hostname>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定路由的主机名。
运行以下命令,从 curl 详细输出验证服务器证书 的
subject
,subjectAltName
和issuer
都如预期:curl -v https://<hostname>
$ curl -v https://<hostname>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定路由的主机名。
现在,路由可以被 cert-manager 发布的引用的 secret 的证书成功保护。cert-manager 将自动管理证书的生命周期。