本文发布时间已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
Kubernetes 中的动态 Ingress
Kubernetes 使部署由许多微服务组成的应用程序变得容易,但这种类型架构的关键挑战之一是如何将入口流量动态路由到每个服务。一种方法是 Ambassador,这是一个基于 Envoy Proxy 构建的 Kubernetes 原生开源 API 网关。Ambassador 专为服务可能频繁来去的动态环境而设计。
Ambassador 使用 Kubernetes 注解进行配置。注解用于配置从给定 Kubernetes 服务到特定 URL 的特定映射。一个映射可以包含多个注解,用于配置路由。示例包括速率限制、协议、跨域请求共享、流量影子和路由规则。
Ambassador 基本示例
Ambassador 通常作为 Kubernetes 部署安装,也可以作为 Helm chart 使用。要配置 Ambassador,请创建一个带有 Ambassador 注解的 Kubernetes 服务。以下示例配置 Ambassador 将对 /httpbin/ 的请求路由到公共 httpbin.org 服务
apiVersion: v1
kind: Service
metadata:
name: httpbin
annotations:
getambassador.io/config: |
---
apiVersion: ambassador/v0
kind: Mapping
name: httpbin_mapping
prefix: /httpbin/
service: httpbin.org:80
host_rewrite: httpbin.org
spec:
type: ClusterIP
ports:
- port: 80
创建一个前缀为 /httpbin/ 且服务名为 httpbin.org 的映射对象。host_rewrite 注解指定 HTTP host
标头应设置为 httpbin.org。
Kubeflow
Kubeflow 提供了一种在 Kubernetes 上轻松部署机器学习基础设施的简单方法。Kubeflow 团队需要一个代理,该代理为 Kubeflow 中使用的各种服务提供集中的身份验证和路由,其中许多服务本质上是临时的。
服务配置
借助 Ambassador,Kubeflow 可以使用分布式配置模型。Ambassador 允许每个服务通过 Kubernetes 注解配置其在 Ambassador 中的路由,而不是使用中央配置文件。以下是一个简化的示例配置
---
apiVersion: ambassador/v0
kind: Mapping
name: tfserving-mapping-test-post
prefix: /models/test/
rewrite: /model/test/:predict
method: POST
service: test.kubeflow:8000
在此示例中,“test” 服务使用 Ambassador 注解来动态配置到该服务的路由,该路由仅在 HTTP 方法为 POST 时触发,并且该注解还指定了重写规则。
Kubeflow 和 Ambassador
借助 Ambassador,Kubeflow 可以使用 Kubernetes 注解轻松管理路由。Kubeflow 配置一个将流量定向到 Ambassador 的入口对象,然后根据需要创建带有 Ambassador 注解的服务,以将流量定向到特定的后端。例如,在部署 TensorFlow 服务时,Kubeflow 会创建并注释一个 K8s 服务,以便该模型将在 https://
如果您有兴趣将 Ambassador 与 Kubeflow 一起使用,则标准 Kubeflow 安装会自动安装和配置 Ambassador。
如果您有兴趣将 Ambassador 用作非 Kubeflow 服务的 API 网关或 Kubernetes 入口解决方案,请查看Ambassador 入门指南。