9.3. 为 Knative 服务配置路由
如果要将 Knative 服务配置为在 OpenShift Container Platform 上使用 TLS 证书,则必须禁用 OpenShift Serverless Operator 为服务自动创建路由,而是手动为服务创建路由。
完成以下步骤时,不会创建 knative-serving-ingress
命名空间中的默认 OpenShift Container Platform 路由。但是,应用程序的 Knative 路由仍然在此命名空间中创建。
9.3.1. 为 Knative 服务配置 OpenShift Container Platform 路由
先决条件
- OpenShift Serverless Operator 和 Knative Serving 组件必须安装在 OpenShift Container Platform 集群中。
-
安装 OpenShift CLI (
oc
) 。
流程
创建包含
service.knative.openshift.io/disableRoute=true
注解的 Knative 服务:重要service.knative.openshift.io/disableRoute=true
注解指示 OpenShift Serverless 不自动为您创建路由。但是,该服务仍然会显示 URL 并达到Ready
状态。除非使用与 URL 中主机名相同的主机名创建自己的路由,此 URL 才能在外部工作。创建 Knative
Service
资源:资源示例
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> annotations: serving.knative.openshift.io/disableRoute: "true" spec: template: spec: containers: - image: <image> ...
应用
Service
资源:$ oc apply -f <filename>
可选。使用
kn service create
命令创建 Knative 服务:kn
命令示例$ kn service create <service_name> \ --image=gcr.io/knative-samples/helloworld-go \ --annotation serving.knative.openshift.io/disableRoute=true
验证没有为服务创建 OpenShift Container Platform 路由:
示例命令
$ $ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=$KSERVICE_NAME \ -l serving.knative.openshift.io/ingressNamespace=$KSERVICE_NAMESPACE \ -n knative-serving-ingress
您将看到以下输出:
No resources found in knative-serving-ingress namespace.
在
knative-serving-ingress
命名空间中创建Route
资源:apiVersion: route.openshift.io/v1 kind: Route metadata: annotations: haproxy.router.openshift.io/timeout: 600s 1 name: <route_name> 2 namespace: knative-serving-ingress 3 spec: host: <service_host> 4 port: targetPort: http2 to: kind: Service name: kourier weight: 100 tls: insecureEdgeTerminationPolicy: Allow termination: edge 5 key: |- -----BEGIN PRIVATE KEY----- [...] -----END PRIVATE KEY----- certificate: |- -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- caCertificate: |- -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE---- wildcardPolicy: None
应用
Route
资源:$ oc apply -f <filename>