使用 Istio 和 Keycloak 保护 NVIDIA 服务#

引言#

在不断发展的 AI 和机器学习领域,检索增强生成 (RAG) 因其动态检索和集成外部知识以生成实时响应的能力而脱颖而出。然而,在分布式环境中实施 RAG 会带来重大挑战,尤其是在安全服务通信方面。本文档提出了一个参考架构,该架构利用服务网格框架来确保 RAG 系统内安全、高效的通信,同时与外部 OpenID Connect (OIDC) 提供商集成,以实现强大的身份验证和授权。

NVIDIA NIM 概述#

NVIDIA NIM 微服务是一组易于使用的微服务,用于加速在任何云或数据中心部署基础模型,并帮助确保您的数据安全。 NIM 微服务具有生产级运行时,包括持续的安全更新。通过企业级支持的稳定 API 运行您的业务应用程序。有关更多信息,请参阅 NVIDIA NIM

NIM 中的服务网格#

服务网格是一个可配置的基础设施层,旨在处理微服务架构中的服务间通信,确保可靠的数据传输、服务发现、负载均衡等。在 NIM 微服务中,多个服务(如检索微服务、编码微服务和语言模型)需要高效通信,服务网格充当管理这些交互的骨干。

通过服务网格实现安全通信#

  • 加密

    确保传输中的数据经过加密,免受外部威胁,以确保数据隐私和合规性。

  • 身份验证

    验证网格内服务的身份。

  • 授权

    控制哪些服务可以相互通信以及它们可以访问哪些资源。

  • 与 OIDC 提供商集成

    OpenID Connect (OIDC) 是此 RAG 架构中 OAuth 2.0 之上的身份验证层。

    • OIDC 的作用

      它为服务提供了一种使用令牌进行身份验证的标准化方法,确保只有经过授权的服务和用户才能访问 RAG 系统的组件。

    • 集成步骤

      服务网格可以配置为与 OIDC 提供商协同工作,以验证每个请求的令牌,从而确保经过身份验证和授权的通信。

    • 优势

      当用户或服务尝试访问 RAG 系统时,服务网格会拦截此请求并检查 OIDC/OAuth2 服务提供的有效身份验证令牌。这确保了只有经过身份验证的用户和服务才能与 RAG 系统交互,从而增强了安全性和访问控制。

  • 性能和可扩展性

    该架构支持水平扩展,可以处理不同的负载,从而确保高可用性和最小延迟。

架构图#

该图可视化了 Operator 的第一个版本。稍后可以添加更多微服务。

Sample network topology

用例#

安全 API 端点#

实施:服务网格采用 mTLS(相互传输层安全)来加密 API 端点之间传输的数据。

功能:来自 API 端点的所有传入和传出流量都通过服务网格,在其中进行加密,从而确保数据完整性和机密性。

优势:此加密保护 API 端点免受拦截和未经授权的访问。

Ingress 管理#

实施:服务网格充当智能 Ingress 控制器,管理外部流量流入 RAG 系统的流量。

功能:它过滤传入请求并将其路由到 RAG 系统内适当的服务,应用必要的安全检查和负载均衡。

优势:这确保了对系统资源的可控和安全访问,防止未经授权的访问并优化资源利用率。

OpenTelemetry 协议 (OTLP) 遥测#

实施:服务网格配置为支持 OTLP,以收集和导出网络遥测数据。

功能:它捕获来自 RAG 系统不同部分的指标、访问日志和跟踪,并通过 OTLP 将它们转发到可观测性平台。

优势:这实现了对系统性能和安全性的实时监控和分析,有助于及时检测和解决问题。

API 端点的 RBAC#

实施:基于角色的访问控制 (RBAC) 集成在服务网格中,以管理对 API 端点的访问。

功能:服务网格根据预定义的策略检查经过身份验证的用户或服务的角色和权限,以授予或拒绝访问特定端点。

优势:这确保了只有具有适当权限的用户或服务,尤其是属于特定组的用户或服务,才能访问某些端点,从而加强细粒度的访问控制。

负载均衡#

网格内的服务间通信具有源负载均衡和自动服务发现。网格入口端点创建 Kubernetes Load Balancer 类型的服务,并且通常在基础设施层上自动实现。