×

您可以将 Knative Serving 与 OpenShift Ingress 分片一起使用,以根据域名拆分 Ingress 流量。这使您可以更有效地管理和路由到集群不同部分的网络流量。

即使 OpenShift Ingress 分片已到位,OpenShift Serverless 流量仍通过 `knative-serving` 项目中的单个 Knative Ingress 网关和激活器组件进行路由。

有关隔离网络流量的更多信息,请参阅 使用 Service Mesh 隔离 OpenShift Serverless 的网络流量

先决条件
  • 您已安装 OpenShift Serverless 运算符和 Knative Serving。

  • 您拥有 OpenShift Container Platform 的集群管理员权限,或者您拥有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。

配置 OpenShift Ingress 分片

在配置 Knative Serving 之前,必须先配置 OpenShift Ingress 分片。

步骤
  • 在 `IngressController` CR 中使用标签选择器,将 OpenShift Serverless 配置为将特定的 Ingress 分片与不同的域名匹配。

    示例 `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)
      # ...
    1 第一个 Ingress 分片的名称。
    2 用于匹配 `ingress-dev` 分片的标签选择器。
    3 `ingress-dev` 分片的自定义域名。
    4 第二个 Ingress 分片的名称。
    5 用于匹配 `ingress-prod` 分片的标签选择器。
    6 `ingress-prod` 分片的自定义域名。

在 KnativeServing CR 中配置自定义域名

配置 OpenShift Ingress 分片后,必须配置 Knative Serving 以与它们匹配。

步骤
  • 在 `KnativeServing` CR 中,通过添加 `spec.config.domain` 字段,配置 Serving 以使用与 Ingress 分片相同的域名和标签。

    示例 `KnativeServing` CR
    spec:
      config:
        domain: (1)
          dev.serverless.cluster.example.com: |
            selector:
              router: dev
          prod.serverless.cluster.example.com: |
            selector:
              router: prod
      # ...
    1 这些值需要与 Ingress 分片配置中的值匹配。

在 Knative 服务中定位特定的 Ingress 分片

配置 Ingress 分片和 Knative Serving 后,可以使用标签在 Knative 服务资源中定位特定的 Ingress 分片。

步骤
  • 在 `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 (1)
    spec:
      template:
        spec:
          containers:
          - image: docker.io/openshift/hello-openshift
      # ...
    1 标签必须与 `KnativeServing` CR 中的配置匹配。

验证具有 OpenShift Ingress 分片配置的 Serving

配置好入口分片、Knative Serving 和您的服务后,您可以验证您的服务是否使用了正确的路由和选定的入口分片。

步骤
  1. 运行以下命令打印集群中服务的相关信息:

    $ 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
  2. 运行以下命令验证您的服务是否使用了正确的路由和选定的入口分片:

    $ 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