Envoy 作为 Kubernetes 的 API 网关

使用 Ambassador 的一个常见场景是将其部署为 Kubernetes 的 edge 服务( API 网关)。Ambassador 是开源 Envoy 的分布式版本,专门为 kubernetes 设计的。

本例将介绍如何通过 Ambassador 在 Kubernetes 上部署 Ambassador 。

部署 Ambassador

Ambassador 的设置是通过 kubernetes 部署的。为了在 kubernetes 安装 Ambassador/Envoy,如果你的集群启动了 RBAC:

  1. kubectl apply -f https://www.getambassador.io/yaml/ambassador/ambassador-rbac.yaml

如果您没启动 RBAC:

  1. kubectl apply -f https://www.getambassador.io/yaml/ambassador/ambassador-no-rbac.yaml

上面的 YAML 将会为 Ambassador 创建 kubernetes 部署,包含 readiness 和 liveness 检查。默认,将会创建3个 Ambassador 实例。每一个 Ambassador 实例包含一个 Envoy 代理以及一个 Ambassador 控制器。

我们现在需要创建一个 Kubernetes 服务来指向 Ambassador 的部署,我们将使用 LoadBalancer 服务。如果你的集群不支持 LoadBalancer 服务,你需要改成 NodePort 或者 ClusterIP

  1. ---
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. labels:
  6. service: ambassador
  7. name: ambassador
  8. spec:
  9. type: LoadBalancer
  10. ports:
  11. - port: 80
  12. targetPort: 80
  13. selector:
  14. service: ambassador

将上面的 YAML 文件保存成ambassador-svc.yaml文件。然后将这个服务部署到 kubernetes:

  1. kubectl apply -f ambassador-svc.yaml

这时候 Envoy 和 Ambassador 控制器已经在你的集群上运行。

配置 Ambassador

Ambassador 使用 Kubernetes 注解来添加或删除配置。这个示例 YAML 将添加一条到 Google 的路由,类似于入门指南中的基本配置示例。

  1. ---
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: google
  6. annotations:
  7. getambassador.io/config: |
  8. ---
  9. apiVersion: ambassador/v0
  10. kind: Mapping
  11. name: google_mapping
  12. prefix: /google/
  13. service: https://google.com:443
  14. host_rewrite: www.google.com
  15. spec:
  16. type: ClusterIP
  17. clusterIP: None

保存上面的文件,命名为 google.yaml。然后运行:

  1. kubectl apply -f google.yaml

Ambassador 将发现您的 Kubernetes 注解的更改,并添加到 Envoy 的路由。注意,我们在这个例子中使用了一个虚拟服务;通常,您会将注解与真正的 Kubernetes 服务关联起来。

测试映射

您可以通过获得 Ambassador 服务的外部 IP 地址来测试这个映射,然后通过curl发送请求:

  1. $ kubectl get svc ambassador
  2. NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. ambassador 10.19.241.98 35.225.154.81 80:32491/TCP 15m
  4. $ curl -v 35.225.154.81/google/

更多

Ambassador 在上公开了多个 Envoy 的特性映射,比如 CORS 、加权循环调度算法、gRPC、TLS 和超时设定。要了解更多信息,请阅读配置文档