7.10. 使用带有 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.10.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
      # ...

    1
    第一个入口分片的名称。
    2
    ingress-dev 分片匹配的标签选择器。
    3
    ingress-dev 分片的自定义域。
    4
    第二个入口分片的名称。
    5
    ingress-prod 分片匹配的标签选择器。
    6
    ingress-prod 分片的自定义域。

7.10.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.10.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
      # ...

    1 2
    标签必须与 KnativeServing CR 中的配置匹配。

7.10.4. 使用 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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.