$ openssl rsa -in password_protected_tls.key -out tls.key
安全路由提供使用多种 TLS 终止类型来为客户端提供证书的能力。以下部分描述如何使用自定义证书创建重新加密、边缘和直通路由。
您可以使用oc create route
命令,通过重新加密 TLS 终止和自定义证书配置安全路由。
您必须拥有一个 PEM 编码的证书/密钥对文件,其中证书对于路由主机有效。
您可能拥有一个单独的 PEM 编码的 CA 证书文件,用于完成证书链。
您必须拥有一个单独的 PEM 编码的目标 CA 证书文件。
您必须拥有要公开的服务。
不支持密码保护的密钥文件。要从密钥文件中删除密码,请使用以下命令
|
此步骤创建一个具有自定义证书和重新加密 TLS 终止的Route
资源。以下假设证书/密钥对位于当前工作目录中的tls.crt
和tls.key
文件中。您还必须指定目标 CA 证书,以使 Ingress Controller 可信赖服务的证书。如果需要完成证书链,您也可以指定 CA 证书。请将tls.crt
、tls.key
、cacert.crt
和(可选)ca.crt
替换为实际路径名。将您要公开的Service
资源的名称替换为frontend
。将适当的主机名替换为www.example.com
。
使用重新加密 TLS 终止和自定义证书创建安全Route
资源
$ oc create route reencrypt --service=frontend --cert=tls.crt --key=tls.key --dest-ca-cert=destca.crt --ca-cert=ca.crt --hostname=www.example.com
如果您检查生成的Route
资源,它应该类似于以下内容
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: frontend
spec:
host: www.example.com
to:
kind: Service
name: frontend
tls:
termination: reencrypt
key: |-
-----BEGIN PRIVATE KEY-----
[...]
-----END PRIVATE KEY-----
certificate: |-
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
caCertificate: |-
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
destinationCACertificate: |-
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
有关更多选项,请参阅oc create route reencrypt --help
。
您可以使用oc create route
命令,通过边缘 TLS 终止和自定义证书配置安全路由。对于边缘路由,Ingress Controller 会在将流量转发到目标 Pod 之前终止 TLS 加密。路由指定 Ingress Controller 用于该路由的 TLS 证书和密钥。
您必须拥有一个 PEM 编码的证书/密钥对文件,其中证书对于路由主机有效。
您可能拥有一个单独的 PEM 编码的 CA 证书文件,用于完成证书链。
您必须拥有要公开的服务。
不支持密码保护的密钥文件。要从密钥文件中删除密码,请使用以下命令
|
此步骤创建一个具有自定义证书和边缘 TLS 终止的Route
资源。以下假设证书/密钥对位于当前工作目录中的tls.crt
和tls.key
文件中。如果需要完成证书链,您也可以指定 CA 证书。请将tls.crt
、tls.key
和(可选)ca.crt
替换为实际路径名。将您要公开的服务的名称替换为frontend
。将适当的主机名替换为www.example.com
。
使用边缘 TLS 终止和自定义证书创建安全Route
资源。
$ oc create route edge --service=frontend --cert=tls.crt --key=tls.key --ca-cert=ca.crt --hostname=www.example.com
如果您检查生成的Route
资源,它应该类似于以下内容
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: frontend
spec:
host: www.example.com
to:
kind: Service
name: frontend
tls:
termination: edge
key: |-
-----BEGIN PRIVATE KEY-----
[...]
-----END PRIVATE KEY-----
certificate: |-
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
caCertificate: |-
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
有关更多选项,请参阅oc create route edge --help
。
您可以使用oc create route
命令,通过直通终止配置安全路由。使用直通终止,加密流量将直接发送到目标,而路由器不提供 TLS 终止。因此,路由上不需要密钥或证书。
您必须拥有要公开的服务。
创建Route
资源
$ oc create route passthrough route-passthrough-secured --service=frontend --port=8080
如果您检查生成的Route
资源,它应该类似于以下内容
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: route-passthrough-secured (1)
spec:
host: www.example.com
port:
targetPort: 8080
tls:
termination: passthrough (2)
insecureEdgeTerminationPolicy: None (3)
to:
kind: Service
name: frontend
1 | 对象的名称,限制为 63 个字符。 |
2 | termination 字段设置为passthrough 。这是唯一必需的tls 字段。 |
3 | 可选insecureEdgeTerminationPolicy 。唯一有效的值为None 、Redirect 或空(禁用)。 |
目标 Pod 负责为端点处的流量提供证书。这是目前唯一可以支持要求客户端证书(也称为双向身份验证)的方法。
在 TLS 密钥中使用外部证书保护路由只是一个技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且功能可能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可以提前访问即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围。 |
您可以使用路由 API 的.spec.tls.externalCertificate
字段,通过使用第三方证书管理解决方案配置 Red Hat OpenShift Service on AWS 路由。您可以通过密钥引用外部管理的 TLS 证书,无需手动管理证书。使用外部管理的证书可以减少错误,确保更顺利地推出证书更新,使 OpenShift 路由器能够及时提供更新的证书。
此功能适用于边缘路由和重新加密路由。 |
您必须启用RouteExternalCertificate
功能开关。
您必须对routes/custom-host
具有create
和update
权限。
您必须拥有一个密钥,其中包含 PEM 编码格式的有效证书/密钥对,类型为kubernetes.io/tls
,其中包括tls.key
和tls.crt
密钥。
您必须将引用的密钥放置在与您要保护的路由相同的命名空间中。
通过运行以下命令,在与密钥相同的命名空间中创建一个role
,以允许路由器服务帐户读取访问权限
$ oc create role secret-reader --verb=get,list,watch --resource=secrets --resource-name=<secret-name> \ (1)
--namespace=<current-namespace> (2)
1 | 指定密钥的实际名称。 |
2 | 指定密钥和路由所在的命名空间。 |
在与密钥相同的命名空间中创建一个rolebinding
,并将路由器服务帐户绑定到新创建的角色,方法是运行以下命令
$ oc create rolebinding secret-reader-binding --role=secret-reader --serviceaccount=openshift-ingress:router --namespace=<current-namespace> (1)
1 | 指定密钥和路由所在的命名空间。 |
创建一个 YAML 文件,定义route
并使用以下示例指定包含证书的密钥。
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: myedge
namespace: test
spec:
host: myedge-test.apps.example.com
tls:
externalCertificate:
name: <secret-name> (1)
termination: edge
[...]
[...]
1 | 指定密钥的实际名称。 |
通过运行以下命令创建route
资源
$ oc apply -f <route.yaml> (1)
1 | 指定生成的 YAML 文件名。 |
如果密钥存在并具有证书/密钥对,则如果满足所有前提条件,路由器将提供生成的证书。
如果未提供 使用 |
要对具有外部管理证书的路由进行故障排除,请检查 Red Hat OpenShift Service on AWS 路由器 Pod 日志中的错误,请参阅调查 Pod 问题。