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.2. 创建 OpenShift Service Mesh 实例
以下流程演示了如何创建 Red Hat OpenShift Service Mesh 实例。
先决条件
- 有 OpenShift 集群的集群管理员特权。
- 您的集群有一个有 4 个 CPU 和 16 GB 内存的节点。
- 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI (Red Hat OpenShift Dedicated)或 安装 OpenShift CLI (Red Hat OpenShift Service on AWS)。
- 已安装 Red Hat OpenShift Service Mesh Operator 和依赖的 Operator。
流程
在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
为 Red Hat OpenShift Service Mesh 创建所需的命名空间。
$ oc create ns istio-system
您会看到以下输出:
namespace/istio-system created
在名为
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
如需有关 YAML 文件中的值的更多信息,请参阅 Service Mesh control plane 配置参考。
创建服务网格 control plane。
$ oc apply -f smcp.yaml
验证
验证服务网格实例的创建,如下所示:
在 OpenShift CLI 中输入以下命令:
$ oc get pods -n istio-system
前面的命令列出了
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
3.3.3. 创建 Knative Serving 实例
以下流程演示了如何安装 Knative Serving,然后创建实例。
先决条件
- 有 OpenShift 集群的集群管理员特权。
- 您的集群有一个有 4 个 CPU 和 16 GB 内存的节点。
- 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI (Red Hat OpenShift Dedicated)或 安装 OpenShift CLI (Red Hat OpenShift Service on AWS)。
- 您已创建了 Red Hat OpenShift Service Mesh 实例。
- 已安装 Red Hat OpenShift Serverless Operator。
流程
在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
检查 Knative Serving 所需的项目(即 命名空间)是否已存在。
$ oc get ns knative-serving
如果项目存在,您会看到类似以下示例的输出:
NAME STATUS AGE knative-serving Active 4d20h
如果
knative-serving
项目不存在,请创建它。$ oc create ns knative-serving
您会看到以下输出:
namespace/knative-serving created
在名为
default-smm.yaml
的 YAML 文件中定义ServiceMeshMember
对象,其内容如下:apiVersion: maistra.io/v1 kind: ServiceMeshMember metadata: name: default namespace: knative-serving spec: controlPlaneRef: namespace: istio-system name: minimal
在
istio-system
命名空间中创建ServiceMeshMember
对象。$ oc apply -f default-smm.yaml
您会看到以下输出:
servicemeshmember.maistra.io/default created
在名为
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
前面的文件为
KnativeServing
对象定义自定义资源(CR)。CR 还为每个激活器和自动扩展 pod 添加以下操作:注意如果为 Knative 服务配置自定义域,您可以使用 TLS 证书来保护映射的服务。要做到这一点,您必须创建一个 TLS secret,然后更新
DomainMapping
CR 以使用您创建的 TLS secret。如需更多信息,请参阅 Red Hat OpenShift Serverless 文档中的使用 TLS 证书保护映射的服务。在指定的
knative-serving
命名空间中创建KnativeServing
对象。$ oc apply -f knativeserving-istio.yaml
您会看到以下输出:
knativeserving.operator.knative.dev/knative-serving created
验证
查看
istio-system
命名空间中的默认ServiceMeshMemberRoll
对象。$ oc describe smmr default -n istio-system
在
ServiceMeshMemberRoll
对象的描述中,找到Status.Members
字段,并确认它包含knative-serving
命名空间。验证 Knative Serving 实例的创建,如下所示:
在 OpenShift CLI 中输入以下命令:
$ oc get pods -n knative-serving
前面的命令列出了
knative-serving
项目中运行的所有 Pod。这是在其中创建 Knative Serving 实例的项目。确认
knative-serving
项目中有许多正在运行的 Pod,包括 activator、autoscaler、controller 和域映射 Pod,以及用于 Knative Istio 控制器的 Pod,用于控制 OpenShift Serverless 和 OpenShift Service Mesh 集成。显示了一个示例。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
3.3.4. 为 Knative Serving 创建安全网关
要保护 Knative Serving 实例和服务网格之间的流量,您必须为 Knative Serving 实例创建安全网关。
以下流程描述了如何使用 OpenSSL 生成通配符证书和密钥,然后使用它们为 Knative Serving 创建本地和入口网关。
如果您有自己的通配符证书和密钥在配置网关时指定,您可以跳过到此流程的第 11 步。
先决条件
- 有 OpenShift 集群的集群管理员特权。
- 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI (Red Hat OpenShift Dedicated)或 安装 OpenShift CLI (Red Hat OpenShift Service on AWS)。
- 您已创建了 Red Hat OpenShift Service Mesh 实例。
- 您已创建了 Knative Serving 实例。
- 如果要生成通配符证书和密钥,您已 下载并安装 OpenSSL。
流程
在一个终端窗口中,如果您还没有以集群管理员登录到 OpenShift 集群,请登录 OpenShift CLI,如下例所示:
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
重要如果您有自己的通配符证书和密钥在配置网关时指定,请跳至此步骤的第 11 步。
设置环境变量,以定义为网关生成通配符证书和密钥的基础目录。
$ export BASE_DIR=/tmp/kserve $ export BASE_CERT_DIR=${BASE_DIR}/certs
设置环境变量以定义 OpenShift 集群的入口控制器使用的通用名称。
$ export COMMON_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}' | awk -F'.' '{print $(NF-1)"."$NF}')
设置环境变量以定义 OpenShift 集群的入口控制器使用的域名。
$ export DOMAIN_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}')
根据之前设置的环境变量,为证书生成创建所需的基础目录。
$ mkdir ${BASE_DIR} $ mkdir ${BASE_CERT_DIR}
为生成通配符证书创建 OpenSSL 配置。
$ cat <<EOF> ${BASE_DIR}/openssl-san.config [ req ] distinguished_name = req [ san ] subjectAltName = DNS:*.${DOMAIN_NAME} EOF
生成 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
生成由 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
验证通配符证书。
$ openssl verify -CAfile ${BASE_DIR}/root.crt ${BASE_DIR}/wildcard.crt
将脚本创建的通配符密钥和证书导出到新的环境变量。
$ export TARGET_CUSTOM_CERT=${BASE_CERT_DIR}/wildcard.crt $ export TARGET_CUSTOM_KEY=${BASE_CERT_DIR}/wildcard.key
可选: 要将 您自己的 通配符密钥和证书导出到新环境变量,请输入以下命令:
$ export TARGET_CUSTOM_CERT=<path_to_certificate> $ export TARGET_CUSTOM_KEY=<path_to_key>
注意在您提供的证书中,您必须指定 OpenShift 集群的入口控制器使用的域名。您可以运行以下命令来检查这个值:
$ oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}'
使用您为通配符证书和密钥设置的环境变量,在
istio-system
命名空间中创建 TLS secret。$ oc create secret tls wildcard-certs --cert=${TARGET_CUSTOM_CERT} --key=${TARGET_CUSTOM_KEY} -n istio-system
使用以下内容创建
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: - "*"
应用
gateways.yaml
文件来创建定义的资源。$ oc apply -f gateways.yaml
您会看到以下输出:
service/knative-local-gateway created gateway.networking.istio.io/knative-ingress-gateway created gateway.networking.istio.io/knative-local-gateway created
验证
查看您创建的网关。
$ oc get gateway --all-namespaces
确认您看到在
knative-serving
命名空间中创建的本地和入口网关,如下例所示:NAMESPACE NAME AGE knative-serving knative-ingress-gateway 69s knative-serving knative-local-gateway 2m
3.3.5. 安装 KServe
要完成 KServe 的手动安装,您必须安装 Red Hat OpenShift AI 附加组件,它将安装 Red Hat OpenShift AI Operator。然后,您可以使用 Operator 来安装 KServe。
先决条件
- 有 OpenShift 集群的集群管理员特权。
- 您的集群有一个有 4 个 CPU 和 16 GB 内存的节点。
- 您已下载并安装 OpenShift 命令行界面 (CLI)。请参阅安装 OpenShift CLI (Red Hat OpenShift Dedicated)或 安装 OpenShift CLI (Red Hat OpenShift Service on AWS)。
- 您已创建了 Red Hat OpenShift Service Mesh 实例。
- 您已创建了 Knative Serving 实例。
- 您已为 Knative Serving 创建安全网关。
-
您已在 OpenShift 集群中安装了 Red Hat OpenShift AI 附加组件。这会安装 Red Hat OpenShift AI Operator,并创建一个默认的
DataScienceCluster
对象。
流程
- 以集群管理员身份登录 OpenShift Web 控制台。
-
在 Web 控制台中,点 Operators
Installed Operators,然后点 Red Hat OpenShift AI Operator。 要安装 KServe,请按如下所示配置 OpenShift Service Mesh 组件:
- 点 DSC 初始化选项卡。
- 点 default-dsci 对象。
- 点 YAML 标签。
在
spec
部分,添加和配置serviceMesh
组件,如下所示:spec: serviceMesh: managementState: Unmanaged
- 点击 Save。
要安装 KServe,请配置 KServe 和 OpenShift Serverless 组件,如下所示:
-
在 Web 控制台中,点 Operators
Installed Operators,然后点 Red Hat OpenShift AI Operator。 - 点 Data Science Cluster 选项卡。
- 单击 default-dsc DSC 对象。
- 点 YAML 标签。
在
spec.components
部分中,配置kserve
组件,如下所示:spec: components: kserve: managementState: Managed
在
kserve
组件中,添加服务组件
并配置它,如下所示:spec: components: kserve: managementState: Managed serving: managementState: Unmanaged
- 点击 Save。
-
在 Web 控制台中,点 Operators
3.3.6. 禁用 KServe 依赖项
如果您还没有 启用 KServe 组件(即,将 managementState
字段设置为 Removed
),还必须禁用依赖 Service Mesh 组件以避免错误。
先决条件
- 您已使用 OpenShift 命令行界面(CLI)或 Web 控制台来禁用 KServe 组件。
流程
- 以集群管理员身份登录 OpenShift Web 控制台。
-
在 Web 控制台中,点 Operators
Installed Operators,然后点 Red Hat OpenShift AI Operator。 禁用 OpenShift Service Mesh 组件,如下所示:
- 点 DSC 初始化选项卡。
- 点 default-dsci 对象。
- 点 YAML 标签。
在
spec
部分中,添加serviceMesh
组件(如果还没有存在),并配置managementState
字段,如下所示:spec: serviceMesh: managementState: Removed
- 点击 Save。
验证
在 Web 控制台中,点 Operators
Installed Operators,然后点 Red Hat OpenShift AI Operator。 Operator 详情页面将打开。
- 在 Conditions 部分中,确认没有 ReconcileComplete 条件,状态为 Unknown。