Kubernetes中的动态入口

作者:理查德·李(Datawire)

Kubernetes使部署包含许多微服务的应用程序变得容易,但是这种架构的主要挑战之一是动态地将入口流量路由到这些服务中的每一个。一种方法是 大使,这是Kubernetes原生的开源API网关,基于 特使代理。大使是为动态环境设计的,在该环境中服务可能会频繁出现或出现。

使用Kubernetes注释配置了大使。注释用于配置从给定Kubernetes服务到特定URL的特定映射。映射可以包括许多用于配置路线的注释。示例包括速率限制,协议,跨域请求共享,流量屏蔽和路由规则。

基本大使的例子

大使通常作为Kubernetes部署安装,也可以作为Helm图表提供。要配置Ambassador,请使用Ambassador批注创建一个Kubernetes服务。这是一个配置大使以将请求发送到/ 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

A mapping object is created with a prefix of /httpbin/ and a service name of httpbin.org. The host_rewrite annotation specifies that the HTTP host header should be set to httpbin.org.

Kubeflow

Kubeflow 提供了一种简单的方法来轻松在Kubernetes上部署机器学习基础架构。 Kubeflow团队需要一个代理,该代理提供身份验证和路由的中心点,以用于Kubeflow中使用的各种服务,其中许多服务都是短暂的。

kubeflow

大使前的Kubeflow架构

服务配置

有了大使,Kubeflow可以使用分布式模型进行配置。代替中央配置文件,Ambassador允许每个服务通过Kubernetes注释在Ambassador中配置其路由。这是一个简化的示例配置:

---
apiVersion: ambassador/v0
kind:  Mapping
name: tfserving-mapping-test-post
prefix: /楷模/test/
rewrite: /model/test/:predict
method: POST
service: test.kubeflow:8000

在此示例中,“测试”服务使用Ambassador批注动态配置到该服务的路由,仅当HTTP方法为POST时触发,并且批注还指定了重写规则。

Kubeflow和大使

kubeflow-ambassador

借助大使,Kubeflow借助Kubernetes注释轻松管理路由。 Kubeflow配置单个入口对象,该对象将流量引导到Ambassador,然后根据需要创建带有Ambassador批注的服务,以将流量引导到特定的后端。例如,在部署TensorFlow服务时,Kubeflow会创建并注释K8s服务,以便在http:// _处提供模型/楷模//。 Kubeflow还可以使用Envoy代理进行实际的L7路由。通过使用大使,Kubeflow利用了额外的路由配置,例如URL重写和基于方法的路由。

如果您对将Ambassador与Kubeflow结合使用感兴趣,则标准的Kubeflow安装会自动安装和配置Ambassador。

如果您有兴趣将Ambassador用作非Kubeflow服务的API网关或Kubernetes入口解决方案,请查看 大使入门指南.