3.3. 手动安装 KServe


如果您已经安装了 Red Hat OpenShift Service Mesh Operator 并创建了 ServiceMeshControlPlane 资源,或者已安装 Red Hat OpenShift Serverless Operator 并创建了 KNativeServing 资源,Red Hat OpenShift AI Operator 无法安装 KServe 及其依赖项。在这种情况下,您必须手动安装 KServe。

重要

本节中的步骤演示了如何执行 KServe 及其依赖项的新安装,并作为完整的安装和配置参考。如果您已经安装并配置了 OpenShift Service Mesh 或 OpenShift Serverless,则可能不需要遵循所有步骤。如果您不确定要应用到现有配置的哪些更新以使用 KServe,请联系红帽支持。

3.3.1. 安装 KServe 依赖项

在安装 KServe 前,您必须安装和配置一些依赖项。具体来说,您必须创建 Red Hat OpenShift Service Mesh 和 Knative Serving 实例,然后为 Knative Serving 配置安全网关。

注意

目前,只支持 OpenShift Service Mesh v2。如需更多信息,请参阅 支持的配置

3.3.1.1. 创建 OpenShift Service Mesh 实例

以下流程演示了如何创建 Red Hat OpenShift Service Mesh 实例。

先决条件

  • 具有 OpenShift Container Platform 集群的集群管理员特权。
  • 您的集群有 4 个 CPU 和 16 GB 内存的节点。
  • 您已下载并安装 OpenShift 命令行界面(CLI)。请参阅安装 OpenShift CLI
  • 已安装 Red Hat OpenShift Service Mesh Operator 和依赖的 Operator。

步骤

  1. 在终端窗口中,如果您还没有以集群管理员身份登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
    Copy to Clipboard Toggle word wrap
  2. 为 Red Hat OpenShift Service Mesh 创建所需的命名空间。

    $ oc create ns istio-system
    Copy to Clipboard Toggle word wrap

    您会看到以下输出:

    namespace/istio-system created
    Copy to Clipboard Toggle word wrap
  3. 在名为 smcp.yaml 的 YAML 文件中定义 ServiceMeshControlPlane 对象,其内容如下:

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: minimal
      namespace: istio-system
    spec:
      tracing:
        type: None
      addons:
        grafana:
          enabled: false
        kiali:
          name: kiali
          enabled: false
        prometheus:
          enabled: false
        jaeger:
          name: jaeger
      security:
        dataPlane:
          mtls: true
        identity:
          type: ThirdParty
      techPreview:
        meshConfig:
          defaultConfig:
            terminationDrainDuration: 35s
      gateways:
        ingress:
          service:
            metadata:
              labels:
                knative: ingressgateway
      proxy:
        networking:
          trafficControl:
            inbound:
              excludedPorts:
                - 8444
                - 8022
    Copy to Clipboard Toggle word wrap

    如需有关 YAML 文件中值的更多信息,请参阅 Service Mesh control plane 配置参考

  4. 创建服务网格 control plane。

    $ oc apply -f smcp.yaml
    Copy to Clipboard Toggle word wrap

验证

  • 验证服务网格实例的创建,如下所示:

    • 在 OpenShift CLI 中输入以下命令:

      $ oc get pods -n istio-system
      Copy to Clipboard Toggle word wrap

      前面的命令列出了 istio-system 项目中所有正在运行的 pod。这是安装 OpenShift Service Mesh 的项目。

    • 确认已经为服务网格 control plane、入口网关和出口网关运行 pod。这些 pod 具有以下命名模式:

      NAME                                          READY   STATUS   	  RESTARTS    AGE
      istio-egressgateway-7c46668687-fzsqj          1/1     Running     0           22h
      istio-ingressgateway-77f94d8f85-fhsp9         1/1     Running     0           22h
      istiod-data-science-smcp-cc8cfd9b8-2rkg4      1/1     Running     0           22h
      Copy to Clipboard Toggle word wrap

3.3.1.2. 创建 Knative Serving 实例

以下流程演示了如何安装 Knative Serving,然后创建实例。

先决条件

  • 具有 OpenShift Container Platform 集群的集群管理员特权。
  • 您的集群有 4 个 CPU 和 16 GB 内存的节点。
  • 您已下载并安装 OpenShift 命令行界面(CLI)。请参阅安装 OpenShift CLI
  • 您已创建了 Red Hat OpenShift Service Mesh 实例。
  • 已安装 Red Hat OpenShift Serverless Operator。

步骤

  1. 在终端窗口中,如果您还没有以集群管理员身份登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
    Copy to Clipboard Toggle word wrap
  2. 检查 Knative Serving 所需的项目(即 命名空间)是否已存在。

    $ oc get ns knative-serving
    Copy to Clipboard Toggle word wrap

    如果项目存在,您会看到类似以下示例的输出:

    NAME              STATUS   AGE
    knative-serving   Active   4d20h
    Copy to Clipboard Toggle word wrap
  3. 如果 knative-serving 项目不存在,请创建它。

    $ oc create ns knative-serving
    Copy to Clipboard Toggle word wrap

    您会看到以下输出:

    namespace/knative-serving created
    Copy to Clipboard Toggle word wrap
  4. 在名为 default-smm.yaml 的 YAML 文件中定义 ServiceMeshMember 对象,其内容如下:

    apiVersion: maistra.io/v1
    kind: ServiceMeshMember
    metadata:
      name: default
      namespace: knative-serving
    spec:
      controlPlaneRef:
        namespace: istio-system
        name: minimal
    Copy to Clipboard Toggle word wrap
  5. istio-system 命名空间中创建 ServiceMeshMember 对象。

    $ oc apply -f default-smm.yaml
    Copy to Clipboard Toggle word wrap

    您会看到以下输出:

    servicemeshmember.maistra.io/default created
    Copy to Clipboard Toggle word wrap
  6. 在名为 knativeserving-istio.yaml 的 YAML 文件中定义 KnativeServing 对象,其内容如下:

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
      annotations:
        serverless.openshift.io/default-enable-http2: "true"
    spec:
      workloads:
        - name: net-istio-controller
          env:
            - container: controller
              envVars:
                - name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
                  value: 'true'
        - annotations:
            sidecar.istio.io/inject: "true" 
    1
    
            sidecar.istio.io/rewriteAppHTTPProbers: "true" 
    2
    
          name: activator
        - annotations:
            sidecar.istio.io/inject: "true"
            sidecar.istio.io/rewriteAppHTTPProbers: "true"
          name: autoscaler
      ingress:
        istio:
          enabled: true
      config:
        features:
          kubernetes.podspec-affinity: enabled
          kubernetes.podspec-nodeselector: enabled
          kubernetes.podspec-tolerations: enabled
    Copy to Clipboard Toggle word wrap

    前面的文件为 KnativeServing 对象定义自定义资源(CR)。CR 还为每个激活器和自动扩展 pod 添加以下操作:

    1
    将 Istio sidecar 注入 pod。这使得 pod 成为服务网格的一部分。
    2
    启用 Istio sidecar 为 pod 重写 HTTP 存活度和就绪度探测。
    注意

    如果为 Knative 服务配置自定义域,您可以使用 TLS 证书来保护映射的服务。要做到这一点,您必须创建一个 TLS secret,然后更新 DomainMapping CR 以使用您创建的 TLS secret。如需更多信息,请参阅 Red Hat OpenShift Serverless 文档中的使用 TLS 证书保护映射的服务

  7. 在指定的 knative-serving 命名空间中创建 KnativeServing 对象。

    $ oc apply -f knativeserving-istio.yaml
    Copy to Clipboard Toggle word wrap

    您会看到以下输出:

    knativeserving.operator.knative.dev/knative-serving created
    Copy to Clipboard Toggle word wrap

验证

  • 查看 istio-system 命名空间中的默认 ServiceMeshMemberRoll 对象。

    $ oc describe smmr default -n istio-system
    Copy to Clipboard Toggle word wrap

    ServiceMeshMemberRoll 对象的描述中,找到 Status.Members 字段,并确认它包含 knative-serving 命名空间。

  • 验证 Knative Serving 实例的创建,如下所示:

    • 在 OpenShift CLI 中输入以下命令:

      $ oc get pods -n knative-serving
      Copy to Clipboard Toggle word wrap

      前面的命令列出了 knative-serving 项目中所有正在运行的 pod。这是您在其中创建 Knative Serving 实例的项目。

    • 确认 knative-serving 项目中有多个正在运行的 pod,包括 activator、自动扩展器、控制器和域映射 pod,以及控制 OpenShift Serverless 和 OpenShift Service Mesh 的集成的 pod。此时会显示一个示例。

      NAME                                     	READY       STATUS    	RESTARTS   	AGE
      activator-7586f6f744-nvdlb               	2/2         Running   	0          	22h
      activator-7586f6f744-sd77w               	2/2         Running   	0          	22h
      autoscaler-764fdf5d45-p2v98             	2/2         Running   	0          	22h
      autoscaler-764fdf5d45-x7dc6              	2/2         Running   	0          	22h
      autoscaler-hpa-7c7c4cd96d-2lkzg          	1/1         Running   	0          	22h
      autoscaler-hpa-7c7c4cd96d-gks9j         	1/1         Running   	0          	22h
      controller-5fdfc9567c-6cj9d              	1/1         Running   	0          	22h
      controller-5fdfc9567c-bf5x7              	1/1         Running   	0          	22h
      domain-mapping-56ccd85968-2hjvp          	1/1         Running   	0          	22h
      domain-mapping-56ccd85968-lg6mw          	1/1         Running   	0          	22h
      domainmapping-webhook-769b88695c-gp2hk   	1/1         Running     0          	22h
      domainmapping-webhook-769b88695c-npn8g   	1/1         Running   	0          	22h
      net-istio-controller-7dfc6f668c-jb4xk    	1/1         Running   	0          	22h
      net-istio-controller-7dfc6f668c-jxs5p    	1/1         Running   	0          	22h
      net-istio-webhook-66d8f75d6f-bgd5r       	1/1         Running   	0          	22h
      net-istio-webhook-66d8f75d6f-hld75      	1/1         Running   	0          	22h
      webhook-7d49878bc4-8xjbr                 	1/1         Running   	0          	22h
      webhook-7d49878bc4-s4xx4                 	1/1         Running   	0          	22h
      Copy to Clipboard Toggle word wrap

3.3.1.3. 为 Knative Serving 创建安全网关

要保护 Knative Serving 实例和服务网格之间的流量,您必须为 Knative Serving 实例创建安全网关。

以下流程演示了如何使用 OpenSSL 生成通配符证书和密钥,然后使用它们为 Knative Serving 创建本地和入口网关。

重要

如果您有自己的通配符证书和密钥在配置网关时指定,您可以跳过这个过程的第 11 步。

先决条件

步骤

  1. 在终端窗口中,如果您还没有以集群管理员身份登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
    Copy to Clipboard Toggle word wrap
    重要

    如果您有自己的通配符证书和密钥在配置网关时指定,请跳至此流程的第 11 步。

  2. 设置环境变量,以定义用于为网关生成通配符证书和密钥的基础目录。

    $ export BASE_DIR=/tmp/kserve
    $ export BASE_CERT_DIR=${BASE_DIR}/certs
    Copy to Clipboard Toggle word wrap
  3. 设置环境变量,以定义 OpenShift 集群的入口控制器使用的通用名称。

    $ export COMMON_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}' | awk -F'.' '{print $(NF-1)"."$NF}')
    Copy to Clipboard Toggle word wrap
  4. 设置环境变量,以定义 OpenShift 集群的入口控制器使用的域名。

    $ export DOMAIN_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}')
    Copy to Clipboard Toggle word wrap
  5. 根据之前设置的环境变量,为证书生成创建所需的基础目录。

    $ mkdir ${BASE_DIR}
    $ mkdir ${BASE_CERT_DIR}
    Copy to Clipboard Toggle word wrap
  6. 创建用于生成通配符证书的 OpenSSL 配置。

    $ cat <<EOF> ${BASE_DIR}/openssl-san.config
    [ req ]
    distinguished_name = req
    [ san ]
    subjectAltName = DNS:*.${DOMAIN_NAME}
    EOF
    Copy to Clipboard Toggle word wrap
  7. 生成 root 证书。

    $ openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 \
    -subj "/O=Example Inc./CN=${COMMON_NAME}" \
    -keyout $BASE_DIR/root.key \
    -out $BASE_DIR/root.crt
    Copy to Clipboard Toggle word wrap
  8. 生成由 root 证书签名的通配符证书。

    $ openssl req -x509 -newkey rsa:2048 \
    -sha256 -days 3560 -nodes \
    -subj "/CN=${COMMON_NAME}/O=Example Inc." \
    -extensions san -config ${BASE_DIR}/openssl-san.config \
    -CA $BASE_DIR/root.crt \
    -CAkey $BASE_DIR/root.key \
    -keyout $BASE_DIR/wildcard.key  \
    -out $BASE_DIR/wildcard.crt
    
    $ openssl x509 -in ${BASE_DIR}/wildcard.crt -text
    Copy to Clipboard Toggle word wrap
  9. 验证通配符证书。

    $ openssl verify -CAfile ${BASE_DIR}/root.crt ${BASE_DIR}/wildcard.crt
    Copy to Clipboard Toggle word wrap
  10. 将脚本创建的通配符密钥和证书导出到新环境变量。

    $ export TARGET_CUSTOM_CERT=${BASE_CERT_DIR}/wildcard.crt
    $ export TARGET_CUSTOM_KEY=${BASE_CERT_DIR}/wildcard.key
    Copy to Clipboard Toggle word wrap
  11. 可选: 要将 自己的 通配符密钥和证书导出到新环境变量,请输入以下命令:

    $ export TARGET_CUSTOM_CERT=<path_to_certificate>
    $ export TARGET_CUSTOM_KEY=<path_to_key>
    Copy to Clipboard Toggle word wrap
    注意

    在您提供的证书中,您必须指定 OpenShift 集群的 ingress 控制器使用的域名。您可以运行以下命令来检查这个值:

    $ oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}'

  12. 使用您为通配符证书和密钥设置的环境变量在 istio-system 命名空间中创建 TLS secret。

    $ oc create secret tls wildcard-certs --cert=${TARGET_CUSTOM_CERT} --key=${TARGET_CUSTOM_KEY} -n istio-system
    Copy to Clipboard Toggle word wrap
  13. 使用以下内容创建一个 gateways.yaml YAML 文件:

    apiVersion: v1
    kind: Service 
    1
    
    metadata:
      labels:
        experimental.istio.io/disable-gateway-port-translation: "true"
      name: knative-local-gateway
      namespace: istio-system
    spec:
      ports:
        - name: http2
          port: 80
          protocol: TCP
          targetPort: 8081
      selector:
        knative: ingressgateway
      type: ClusterIP
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: knative-ingress-gateway 
    2
    
      namespace: knative-serving
    spec:
      selector:
        knative: ingressgateway
      servers:
        - hosts:
            - '*'
          port:
            name: https
            number: 443
            protocol: HTTPS
          tls:
            credentialName: wildcard-certs
            mode: SIMPLE
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
     name: knative-local-gateway 
    3
    
     namespace: knative-serving
    spec:
     selector:
       knative: ingressgateway
     servers:
       - port:
           number: 8081
           name: https
           protocol: HTTPS
         tls:
           mode: ISTIO_MUTUAL
         hosts:
           - "*"
    Copy to Clipboard Toggle word wrap
    1
    为 Knative 本地网关在 istio-system 命名空间中定义一个服务。
    2
    knative-serving 命名空间中 定义一个入口网关。网关使用您此流程前面创建的 TLS secret。入口网关处理到 Knative 的外部流量。
    3
    knative-serving 命名空间中为 Knative 定义本地网关。
  14. 应用 gateways.yaml 文件以创建定义的资源。

    $ oc apply -f gateways.yaml
    Copy to Clipboard Toggle word wrap

    您会看到以下输出:

    service/knative-local-gateway created
    gateway.networking.istio.io/knative-ingress-gateway created
    gateway.networking.istio.io/knative-local-gateway created
    Copy to Clipboard Toggle word wrap

验证

  • 查看您创建的网关。

    $ oc get gateway --all-namespaces
    Copy to Clipboard Toggle word wrap

    确认您看到在 knative-serving 命名空间中创建的本地和入口网关,如下例所示:

    NAMESPACE         	NAME                      	AGE
    knative-serving   	knative-ingress-gateway   	69s
    knative-serving     knative-local-gateway     	2m
    Copy to Clipboard Toggle word wrap

3.3.2. 安装 KServe

要完成 KServe 的手动安装,您必须安装 Red Hat OpenShift AI Operator。然后,您可以将 Operator 配置为安装 KServe。

先决条件

步骤

  1. 以集群管理员身份登录 OpenShift Web 控制台。
  2. 在 Web 控制台中,点 Operators Installed Operators,然后点 Red Hat OpenShift AI Operator。
  3. 要安装 KServe,请配置 OpenShift Service Mesh 组件,如下所示:

    1. 单击 DSC 初始化 选项卡。
    2. default-dsci 对象。
    3. YAML 标签。
    4. spec 部分,添加并配置 serviceMesh 组件,如下所示:

      spec:
       serviceMesh:
         managementState: Unmanaged
      Copy to Clipboard Toggle word wrap
    5. 点击 Save
  4. 要安装 KServe,请配置 KServe 和 OpenShift Serverless 组件,如下所示:

    1. 在 Web 控制台中,点 Operators Installed Operators,然后点 Red Hat OpenShift AI Operator。
    2. Data Science Cluster 选项卡。
    3. 单击 default-dsc DSC 对象。
    4. YAML 标签。
    5. spec.components 部分中,配置 kserve 组件,如下所示:

      spec:
       components:
         kserve:
           managementState: Managed
      Copy to Clipboard Toggle word wrap
    6. kserve 组件中,添加 serving 组件并进行配置,如下所示:

      spec:
       components:
         kserve:
           managementState: Managed
           serving:
             managementState: Unmanaged
      Copy to Clipboard Toggle word wrap
    7. 点击 Save
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat