本文已发布一年多。较旧的文章可能包含过时的内容。请检查页面信息自发布以来是否已失效。
Kubernetes 中的动态 Ingress
Kubernetes 使部署由许多微服务组成的应用变得容易,但这种架构的关键挑战之一是动态地将入口流量路由到每个服务。一种方法是 Ambassador,这是一个基于 Envoy Proxy 构建的 Kubernetes 原生开源 API 网关。Ambassador 专为服务频繁出现和消失的动态环境而设计。
Ambassador 使用 Kubernetes 注解进行配置。注解用于配置从特定 Kubernetes 服务到特定 URL 的映射。一个映射可以包含多个用于配置路由的注解。示例包括速率限制、协议、跨域请求共享、流量镜像和路由规则。
一个基本的 Ambassador 示例
Ambassador 通常作为 Kubernetes Deployment 安装,也提供 Helm Chart。要配置 Ambassador,请创建一个带有 Ambassador 注解的 Kubernetes Service。下面是一个配置 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 配置单个 Ingress 对象将流量导向 Ambassador,然后根据需要创建带有 Ambassador 注解的服务,将流量导向特定的后端。例如,部署 TensorFlow 服务时,Kubeflow 创建并注解一个 K8s 服务,以便模型可以通过 https:// 提供服务
如果您有兴趣在 Kubeflow 中使用 Ambassador,标准的 Kubeflow 安装会自动安装和配置 Ambassador。
如果您有兴趣将 Ambassador 用作非 Kubeflow 服务的 API 网关或 Kubernetes 入口解决方案,请查阅Ambassador 入门指南。