7.8. 使用带有 OpenShift ingress 分片的 Serving
您可以将 Knative Serving 与 OpenShift ingress 分片搭配使用,以根据域分割入口流量。这可让您更有效地管理和将网络流量路由到集群的不同部分。
即使使用 OpenShift ingress 分片,OpenShift Serverless 流量仍然通过单个 Knative Ingress 网关和 knative-serving
项目中的 activator 组件路由。
有关隔离网络流量的更多信息,请参阅使用 Service Mesh 与 OpenShift Serverless 隔离网络流量。
先决条件
- 安装了 OpenShift Serverless Operator 和 Knative Serving。
- 在 OpenShift Container Platform 上具有集群管理员权限,或者对 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 有集群或专用管理员权限。
7.8.1. 配置 OpenShift ingress 分片
在配置 Knative Serving 前,您必须配置 OpenShift ingress 分片。
流程
使用
IngressController
CR 中的标签选择器配置 OpenShift Serverless,以匹配具有不同域的特定入口分片:IngressController
CR 示例apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: ingress-dev 1 namespace: openshift-ingress-operator spec: routeSelector: matchLabels: router: dev 2 domain: "dev.serverless.cluster.example.com" 3 # ... --- apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: ingress-prod 4 namespace: openshift-ingress-operator spec: routeSelector: matchLabels: router: prod 5 domain: "prod.serverless.cluster.example.com" 6 # ...
7.8.2. 在 KnativeServing CR 中配置自定义域
配置 OpenShift ingress 分片后,您必须配置 Knative Serving 以匹配它们。
流程
在
KnativeServing
CR 中,通过添加spec.config.domain
字段将 Serving 配置为使用与入口分片相同的域和标签:KnativeServing
CR 示例spec: config: domain: 1 dev.serverless.cluster.example.com: | selector: router: dev prod.serverless.cluster.example.com: | selector: router: prod # ...
- 1
- 这些值需要与 ingress 分片配置中的值匹配。
7.8.3. 以 Knative Service 中的特定入口分片为目标
配置入口分片和 Knative Serving 后,您可以使用标签将 Knative Service 资源中的特定入口分片作为目标。
流程
在
Service
CR 中,添加与特定分片匹配的标签选择器:Service CR 示例
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello-dev labels: router: dev 1 spec: template: spec: containers: - image: docker.io/openshift/hello-openshift --- apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello-prod labels: router: prod 2 spec: template: spec: containers: - image: docker.io/openshift/hello-openshift # ...
7.8.4. 使用 OpenShift ingress 分片配置验证 Serving
配置入口分片、Knative Serving 和服务后,您可以验证您的服务是否使用正确的路由和所选入口分片。
流程
运行以下命令输出集群中服务的信息:
$ oc get ksvc
输出示例
NAME URL LATESTCREATED LATESTREADY READY REASON hello-dev https://hello-dev-default.dev.serverless.cluster.example.com hello-dev-00001 hello-dev-00001 True hello-prod https://hello-prod-default.prod.serverless.cluster.example.com hello-prod-00001 hello-prod-00001 True
运行以下命令,验证您的服务是否使用正确的路由和所选入口分片:
$ oc get route -n knative-serving-ingress -o jsonpath='{range .items[*]}{@.metadata.name}{" "}{@.spec.host}{" "}{@.status.ingress[*].routerName}{"\n"}{end}'
输出示例
route-19e6628b-77af-4da0-9b4c-1224934b2250-323461616533 hello-prod-default.prod.serverless.cluster.example.com ingress-prod route-cb5085d9-b7da-4741-9a56-96c88c6adaaa-373065343266 hello-dev-default.dev.serverless.cluster.example.com ingress-dev