资讯详情

Seldon Core v2 Clusterwide 部署实战:跨命名空间模型推理与全链路 TLS/SSL 安全配置

📅 2026/10/15 10:05:02 | 华诺云谱 👁 阅读
Seldon Core v2 Clusterwide 部署实战:跨命名空间模型推理与全链路 TLS/SSL 安全配置
人工智能大模型MLOpsLLMOps模型推理服务云原生后端【免费下载链接】seldon-coreAn MLOps framework to package, deploy, monitor and manage thousands of production machine learning models项目地址https://gitcode.com/gh_mirrors/se/seldon-core点击查看免费下载本指南以仓库samples/k8s-clusterwide-ssl-demo.md及配套 Notebooksamples/k8s-clusterwide-ssl-demo.ipynb为主体完整演示如何在 Kind 集群上以Clusterwide集群级模式部署 Seldon Core v2将控制面安装在seldon-mesh命名空间而 Runtime 与模型 Server 分布在多个业务命名空间ns1、ns2并同时开启控制面Control Plane与数据面Envoy Data Plane的 TLS/SSL 加密。读完本文你将掌握Helm Chart 的安装顺序与--set controller.clusterwidetrue的语义、seldon-core-v2-certs证书体系与各 Secret 的用途、TLS 配置文件逐段含义、seldon config系列命令为 CLI 配置 TLS 的方式以及跨命名空间发起加密推理请求与整体环境清理的完整流程。一、演示场景概述Seldon Core v2 的控制面组件scheduler、modelgateway、pipelinegateway、dataflow、envoy 等由seldon-core-v2-setupChart 安装而每个业务命名空间各自持有seldon-core-v2-runtime运行时组件与seldon-core-v2-servers模型 Servermlserver 与 triton。默认情况下 controller 只监听安装它的命名空间通过--set controller.clusterwidetrue安装时controller 会获得 ClusterRole 级别的权限可跨命名空间管理mlops.seldon.io组下的Model、Pipeline、Server等资源参见 k8s/helm-charts/seldon-core-v2-setup/templates/_components-deployments.tpl其中--clusterwide$(CLUSTERWIDE)参数与seldon-v2-manager-roleClusterRole 的创建均由该开关控制。与不带 TLS 的普通多命名空间示例见 docs-gb/examples/k8s-clusterwide.md相比本演示的核心差异在于安装控制面时额外传入values-tls-dataplane-controlplane-example.yaml把controlplane 与 envoy 两个安全通道的 protocol 都切到 SSL并在每个业务命名空间单独安装一套证书。最终效果是控制面组件间走 mTLSEnvoy 到上游模型 Server 走 mTLS而外部客户端到 Envoy 的推理入口走单向 TLS客户端不要求提供证书。二、环境准备创建 Kind 集群与生态组件演示在 Kind 本地集群上进行使用仓库ansible目录下的 Playbook 一键创建cd ansible ansible-playbook playbooks/kind-cluster.yamlansible/playbooks/kind-cluster.yaml 会调用kind角色关键变量如下集群名kind_cluster_name: seldon默认命名空间seldon-meshKind 版本v0.24.0节点镜像kindest/node:v1.31.0默认启用 metrics-serverChart 版本 3.8.3与MetalLBChart 版本 0.13.9。其中 MetalLB 对后续演示至关重要ansible/roles/kind/tasks/metallb.yaml会读取 dockerkind网络的子网并将x.x.255.1~x.x.255.255分配给 MetalLB 作为 LoadBalancer 地址池。这正是后文中seldon-meshService 能拿到172.21.255.2、172.21.255.4这类集群外可访问 IP 的原因。随后安装 Seldon Core v2 所依赖的生态组件Kafka、cert-manager、Prometheus、Grafana、Jaeger、OpenTelemetry 等cd ansible ansible-playbook playbooks/setup-ecosystem.yamlansible/playbooks/setup-ecosystem.yaml 中full_install: yes会同时安装并配置 prometheus、grafana、kafka、certmanager、jaeger、opentelemetryschema_registry 与 clickhouse 默认关闭。其中cert-manager是本演示的硬性前置条件——因为seldon-core-v2-certsChart 完全依赖 cert-manager 的Issuer/Certificate资源签发证书。三、安装 CRD 并创建业务命名空间首先在seldon-mesh命名空间安装 CRD Chartmlops.seldon.io/v1alpha1组下的 Model、Pipeline、Server、SeldonConfig 等自定义资源定义helm upgrade --install seldon-core-v2-crds ../k8s/helm-charts/seldon-core-v2-crds -n seldon-mesh预期输出REVISION: 2表示此前已安装过可重复执行Release seldon-core-v2-crds has been upgraded. Happy Helming! NAME: seldon-core-v2-crds LAST DEPLOYED: Thu Jun 22 09:11:26 2023 NAMESPACE: seldon-mesh STATUS: deployed REVISION: 2 TEST SUITE: NoneCRD 清单由 k8s/helm-charts/seldon-core-v2-crds/templates/seldon-v2-crds.yaml 渲染全集群只需安装一次。然后创建两个业务命名空间用于验证控制面跨命名空间管理模型kubectl create namespace ns1 kubectl create namespace ns2预期输出分别为namespace/ns1 created、namespace/ns2 created。四、在业务命名空间安装证书seldon-core-v2-certsChart 会为每个命名空间生成一套自签 CA 与成对的服务端/客户端证书k8s/helm-charts/seldon-core-v2-certs/templates/certs.yaml分别在两个命名空间安装helm install seldon-v2-certs ../k8s/helm-charts/seldon-core-v2-certs/ -n ns1 helm install seldon-v2-certs ../k8s/helm-charts/seldon-core-v2-certs/ -n ns24.1 证书体系拆解从 Chart 模板源码看它依次创建如下资源资源说明seldon-issuerIssuercert-manager 自签名 Issuer用于签发根 CAseldon-caCertificate自签根 CAisCA: truecommonName: seldon-caDNS 覆盖*.namespace与*.namespace.svc私钥为 ECDSA 256Secret 名为cacertseldon-ca-issuerIssuer基于cacert的 CA Issuer负责签发下面所有业务证书seldon-controlplane-server控制面服务端证书commonName为namespace.svcSAN 覆盖seldon-scheduler及其 svc 域名seldon-controlplane-client控制面客户端证书seldon-upstream-serverEnvoy 上游服务端证书SAN 覆盖*.namespace.svcseldon-upstream-clientEnvoy 上游客户端证书seldon-downstream-serverEnvoy 下游对外推理入口服务端证书seldon-downstream-clientEnvoy 下游客户端证书本演示的配置中未真正使用所有业务证书的duration均为 2160h90 天、renewBefore为 360h15 天并同时启用server auth与client auth两种用途从而一套证书可同时承担服务端与客户端角色。证书签发后以同名 Kubernetes Secret 保存tls.crt/tls.key/ca.crt供后续 Helm values 中的secret/clientValidationSecret/serverValidationSecret字段引用。安装输出示例NAME: seldon-v2-certs LAST DEPLOYED: Thu Jun 22 10:00:32 2023 NAMESPACE: ns1 STATUS: deployed REVISION: 1 TEST SUITE: None五、解读 TLS 配置控制面与数据面双重加密在安装控制面前先查看仓库提供的 TLS 样例配置cat ../k8s/samples/values-tls-dataplane-controlplane-example.yamlsecurity: controlplane: protocol: SSL ssl: server: secret: seldon-controlplane-server clientValidationSecret: seldon-controlplane-client client: secret: seldon-controlplane-client serverValidationSecret: seldon-controlplane-server envoy: protocol: SSL ssl: upstream: server: secret: seldon-upstream-server clientValidationSecret: seldon-upstream-client client: secret: seldon-upstream-client serverValidationSecret: seldon-upstream-server downstream: client: serverValidationSecret: seldon-downstream-server server: secret: seldon-downstream-server5.1 security 结构总览security段由seldon-core-v2-setupChart 的 values.yaml默认全部为PLAINTEXT扩展而来完整结构还包含kafka、schemaRegistry子段。每个ssl通道都由server与client两侧组成每侧又包含自己的secret本端身份证书与对方的校验 Secretserver.secret服务端本端身份证书 Secretserver.clientValidationSecret服务端用于校验客户端身份的 CA/证书 Secret开启 mTLS 时才有值client.secret客户端本端身份证书 Secretclient.serverValidationSecret客户端用于校验服务端身份的 CA/证书 Secret。5.2 controlplane双向 TLSmTLScontrolplane.protocol: SSL表示 scheduler 与 controller、modelgateway、pipelinegateway、dataflow、agent 之间的通信全部加密。两侧都同时配置了本端 Secret 与对端校验 Secret即双向认证服务端要求客户端出示证书clientValidationSecret客户端也校验服务端serverValidationSecret。这与 Helm 模板中 controller Deployment 的环境变量一一对应CONTROL_PLANE_SECURITY_PROTOCOL、CONTROL_PLANE_CLIENT_TLS_SECRET_NAME、CONTROL_PLANE_SERVER_TLS_SECRET_NAME等见 k8s/helm-charts/seldon-core-v2-setup/templates/_components-deployments.tpl。从模板还可看到 scheduler 容器暴露了scheduler-mtls9044与agent-mtls9055端口同时保留普通端口9004 等说明组件根据ALLOW_PLAINTXT/CONTROL_PLANE_SECURITY_PROTOCOL运行时决定走明文还是 mTLS 端口。模板中证书是以挂载卷方式注入容器的values.yaml.template给出了默认挂载路径例如控制面服务端证书位于/tmp/certs/cps/tls.key、/tmp/certs/cps/tls.crt、/tmp/certs/cps/ca.crt客户端证书位于/tmp/certs/cpc/Envoy 上游在/tmp/certs/dus/与/tmp/certs/duc/Envoy 下游在/tmp/certs/dds/与/tmp/certs/ddc/——本演示的简化 values 省略了这些路径直接使用默认值。5.3 envoy upstream与模型 Server 之间 mTLSenvoy.protocol: SSL且upstream侧server与client都配置了身份与校验 Secret说明Envoy 与上游模型 Servermlserver / triton之间同样是双向 TLS。这要求模型 Server 的 Pod 中也注入seldon-upstream-server/seldon-upstream-client证书运行时数据面流量在集群内全程加密。5.4 envoy downstream对外单向 TLSdownstream段的差异值得注意client 侧只有serverValidationSecret: seldon-downstream-server没有本端secretserver 侧也只有本端secret、没有clientValidationSecret。这意味着外部客户端调用推理接口时只做服务端认证单向 TLS——客户端需要信任seldon-downstream-server证书但服务端不校验客户端身份。这正是后文 CLI 配置中skipSSLVerify: true能工作的原因CLI 无需携带任何客户端证书即可发起 HTTPS 推理请求。仓库还提供了仅数据面加密的变体values-tls-dataplane-example.yamlk8s/samples/values-tls-dataplane-example.yaml其中 controlplane 保持PLAINTEXT、envoy 为SSL可用于只想保护推理流量、暂不加密控制面的场景可作为对照参考。六、安装控制面与各命名空间运行时6.1 以 Clusterwide 模式安装控制面helm install seldon-v2 ../k8s/helm-charts/seldon-core-v2-setup/ -n seldon-mesh --set controller.clusterwidetrue --values ../k8s/samples/values-tls-dataplane-controlplane-example.yaml三个关键点--set controller.clusterwidetrue让 controller 监听并管理集群内所有命名空间values.yaml 中默认值为false--values ...values-tls-dataplane-controlplane-example.yaml覆盖security.controlplane.protocol与security.envoy.protocol为SSLChart 由 seldon-v2-components.yaml 根据useDeploymentsForServers选择渲染 Deployment 版或 StatefulSet 版模板默认 StatefulSet。安装输出示例NAME: seldon-v2 LAST DEPLOYED: Thu Jun 22 09:11:40 2023 NAMESPACE: seldon-mesh STATUS: deployed REVISION: 1 TEST SUITE: None6.2 在 ns1 / ns2 分别安装 Runtime 与 Servershelm install seldon-v2-runtime ../k8s/helm-charts/seldon-core-v2-runtime -n ns1 helm install seldon-v2-servers ../k8s/helm-charts/seldon-core-v2-servers -n ns1 helm install seldon-v2-runtime ../k8s/helm-charts/seldon-core-v2-runtime -n ns2 helm install seldon-v2-servers ../k8s/helm-charts/seldon-core-v2-servers -n ns2各 Chart 职责seldon-core-v2-runtimevalues.yaml在业务命名空间部署 scheduler、envoy、dataflow、modelgateway、pipelinegateway 等运行时副本。注意scheduler.serviceType与envoy.serviceType默认均为LoadBalancer——这正是每个命名空间都会出现一个独立seldon-meshService带外部 IP的原因seldon-core-v2-serversvalues.yaml部署 mlserver 与 triton 两种模型 Server 的 StatefulSet默认各 1 副本PVC 保留策略为Retain。安装全部完成后分别等待两个命名空间中的 Server 就绪kubectl wait --for conditionready --timeout300s server --all -n ns1 kubectl wait --for conditionready --timeout300s server --all -n ns2预期输出server.mlops.seldon.io/mlserver condition met server.mlops.seldon.io/triton condition metserver.mlops.seldon.io是mlops.seldon.io/v1alpha1组下的 Server 资源类型该等待命令验证了 server CR 的ready条件。七、为 Seldon CLI 配置 TLS模型推理需要通过seldon-mesh的 LoadBalancer 入口进行。先获取两个命名空间各自的入口 IP使用 Jupyter 魔术命令的 Python 写法在普通 Shell 中可等价写成kubectl get svc seldon-mesh -n ns1 -o jsonpath{.status.loadBalancer.ingress[0].ip}MESH_IP!kubectl get svc seldon-mesh -n ns1 -o jsonpath{.status.loadBalancer.ingress[0].ip} MESH_IP_NS1MESH_IP[0] import os os.environ[MESH_IP_NS1] MESH_IP_NS1 MESH_IP_NS1输出172.21.255.2该 IP 即第 2 节中 MetalLB 从 Kind 网络子网分配出来的范围。MESH_IP!kubectl get svc seldon-mesh -n ns2 -o jsonpath{.status.loadBalancer.ingress[0].ip} MESH_IP_NS2MESH_IP[0] import os os.environ[MESH_IP_NS2] MESH_IP_NS2 MESH_IP_NS2输出172.21.255.4。两个命名空间各自持有独立的 Envoy 入口 IP是跨命名空间部署、各自独立暴露推理入口的直接体现。随后把仓库提供的 TLS 客户端配置加入 CLI 并激活seldon config add tls ${PWD}/config-dataplane-tls.json seldon config activate tls配置文件内容为samples/config-dataplane-tls.json{ dataplane: { tls: true, skipSSLVerify: true } }7.1 CLI 配置机制源码解读从源码看CLI 的配置体系位于 operator/pkg/cli/config.go 与 operator/pkg/cli/configs.goSeldonCLIConfig由dataplane、controlplane、kafka三段组成dataplane支持inferHost、tls、skipSSLVerify、keyPath、crtPath、caPath字段——本演示只用到tls与skipSSLVerify若需更严格的 mTLS可补充客户端证书三件套命名配置清单保存在~/.config/seldon/cli/configs.json每个名称映射到一个配置文件路径active字段指向当前生效的配置名seldon config add name path执行Add(key, configPath)写入映射并持久化seldon config activate tls执行Activate(key)把active指向tlsseldon model infer在发起请求前会通过LoadSeldonCLIConfig()读取当前 active 配置若dataplane.tlstrue则以 HTTPS 连接推理入口相关命令参数详见 docs-gb/cli/seldon_model_infer.md如--inference-host默认0.0.0.0:9000、--inference-mode默认rest、--show-headers、--sticky-session等。也就是说启用 TLS 后seldon model infer仍只需指定--inference-host握手加密与证书校验行为由 active 配置自动接管这也是演示中 CLI 命令本身没有任何--tls标志的原因。八、跨命名空间部署模型并执行加密推理8.1 模型清单解读两个命名空间部署的是同一个 sklearn Iris 模型kubectl create -f ./models/sklearn-iris-gs.yaml -n ns1模型清单 内容如下apiVersion: mlops.seldon.io/v1alpha1 kind: Model metadata: name: iris spec: storageUri: gs://seldon-models/scv2/samples/mlserver_1.6.0/iris-sklearn requirements: - sklearn memory: 100Ki要点requirements: [sklearn]让 scheduler 将模型调度到具备sklearn能力标签的 mlserver 上storageUri指向公共 GCS 存储memory: 100Ki是模型的内存预留。该资源通过kubectl直接提交到集群controller 在 clusterwide 模式下会接管并下发调度集群内管理请优先使用 kubectl/HelmSeldon CLI 主要用于非 Kubernetes 环境详见 docs-gb/getting-started/cli.md 的提示。创建后等待模型就绪kubectl wait --for conditionready --timeout300s model --all -n ns1输出model.mlops.seldon.io/iris condition met。ns2 执行完全相同的两步操作。8.2 在 ns1 发起加密推理seldon model infer iris --inference-host ${MESH_IP_NS1}:80 \ {inputs: [{name: predict, shape: [1, 4], datatype: FP32, data: [[1, 2, 3, 4]]}]}请求体是 KServe/V2 数据平面协议单个输入张量predict形状[1,4]类型FP32。由于dataplane.tlstrue已激活该请求实际通过 HTTPS 访问 Envoy 的 80 端口skipSSLVerify: true跳过了对自签证书的信任校验与第 5.4 节分析的下游单向 TLS、客户端不携带证书设计吻合。响应示例{ model_name: iris_1, model_version: 1, id: 77f21360-b6cf-4c50-a000-1f219f5e9e29, parameters: {}, outputs: [ { name: predict, shape: [ 1, 1 ], datatype: INT64, parameters: { content_type: np }, data: [ 2 ] } ] }响应中model_name: iris_1表明模型被调度到编号 1 的模型实例输出为 INT64 标量2Iris 三分类[1,2,3,4]四个特征预测为类别 2。8.3 在 ns2 发起加密推理kubectl create -f ./models/sklearn-iris-gs.yaml -n ns2 kubectl wait --for conditionready --timeout300s model --all -n ns2 seldon model infer iris --inference-host ${MESH_IP_NS2}:80 \ {inputs: [{name: predict, shape: [1, 4], datatype: FP32, data: [[1, 2, 3, 4]]}]}输出与 ns1 一致响应 id 不同如902b8483-0ede-4136-97be-dbf266f05a0cdata: [2]。这验证了同一个模型清单在 ns1、ns2 各部署一份通过各自命名空间的 Envoy 入口不同 LoadBalancer IP在 TLS 加密通道上独立完成推理控制面则以 clusterwide 方式统一管理两套运行时。九、环境清理TearDown演示结束后按依赖顺序清理先删模型与各命名空间内的 release再删控制面与 CRD最后删除命名空间。kubectl delete -f ./models/sklearn-iris-gs.yaml -n ns1 kubectl delete -f ./models/sklearn-iris-gs.yaml -n ns2预期输出model.mlops.seldon.io iris deleted两次。helm delete seldon-v2-servers -n ns1 helm delete seldon-v2-runtime -n ns1 helm delete seldon-v2-certs -n ns1预期输出release seldon-v2-servers uninstalled release seldon-v2-runtime uninstalled release seldon-v2-certs uninstalled注意原演示在 ns2 清理时重复执行了两次helm delete seldon-v2-runtime -n ns2第二次会返回Error: uninstall: Release not loaded: seldon-v2-runtime: release: not found——这是 Helm 对重复删除的正常报错实际只需执行一次helm delete seldon-v2-runtime -n ns2 helm delete seldon-v2-certs -n ns2helm delete seldon-v2 -n seldon-mesh helm delete seldon-core-v2-crds -n seldon-mesh kubectl delete namespace ns1 kubectl delete namespace ns2预期输出依次为release seldon-v2 uninstalled、release seldon-core-v2-crds uninstalled、namespace ns1 deleted、namespace ns2 deleted。若还需要彻底还原环境可再用ansible-playbook或kind delete cluster销毁 Kind 集群与 Kafka 等生态组件。十、要点总结与延伸建议安装顺序不可颠倒cert-manager随 setup-ecosystem 安装→ CRD → 业务命名空间证书 → 控制面clusterwide TLS values→ 各命名空间 runtime/servers → 模型。Clusterwide 的核心开关controller.clusterwidetrue决定 controller 是否跨命名空间管理mlops.seldon.io资源对应 Helm 模板中 ClusterRole/ClusterRoleBinding 的创建逻辑。TLS 分为三段控制面 mTLS、Envoy 上游与模型 ServermTLS、Envoy 下游外部客户端单向 TLS。若需要更高级的客户端认证可参考 k8s/helm-charts/seldon-core-v2-setup/values.yaml.template 中downstream.client.mtls、keyPath/crtPath/caPath等字段并为 CLI 配置keyPath/crtPath/caPath后关闭skipSSLVerify。CLI 配置是命名空间级别的档案seldon config add/activate/list/deactivate/remove系列命令管理~/.config/seldon/cli/configs.json下的多套配置档案可随时切换参见 docs-gb/cli/seldon_config.md。生产环境注意演示使用自签 CA 与skipSSLVerify仅用于功能验证生产环境应替换为企业 CA 或 cert-manager 的 ACME 签发并落实证书轮换证书默认 90 天、提前 15 天续期。赞分享人工智能大模型MLOpsLLMOps模型推理服务云原生后端【免费下载链接】seldon-coreAn MLOps framework to package, deploy, monitor and manage thousands of production machine learning models项目地址https://gitcode.com/gh_mirrors/se/seldon-core点击查看免费下载相关推荐Seldon Core V2 多命名空间部署实战clusterwide 控制器、命名空间隔离运行时与 Kafka 主题前缀Seldon Core V2 多命名空间部署实战clusterwide 控制器、命名空间隔离运行时与 Kafka 主题前缀 本文基于 Seldon Core人工智能大模型MLOpsLLMOps模型推理服务云原生后端Seldon Core V2 多命名空间集群部署指南clusterwide 控制平面与 Kafka 主题隔离实战Seldon Core V2 多命名空间集群部署指南clusterwide 控制平面与 Kafka 主题隔离实战 本文基于 Seldon Core V2ML人工智能大模型MLOpsLLMOps模型推理服务云原生后端Seldon Core v2 中的 SeldonRuntime 资源在命名空间内创建与管理 Seldon 实例Seldon Core v2 中的 SeldonRuntime 资源在命名空间内创建与管理 Seldon 实例 导读 SeldonRuntime 是 Seld人工智能大模型MLOpsLLMOps模型推理服务云原生后端上一篇约10分钟完成QQ空间历史说说导出GetQzonehistory 手把手零代码备份教程下一篇被删的QQ空间说说还能找回来吗我用GetQzonehistory把留言、配图和评论全搬进了本地文件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑