Envoy 作为 Kubernetes 的 API 网关

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

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

部署 Ambassador

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

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

如果您没启动 RBAC:

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

---
apiVersion: v1
kind: Service
metadata:
  labels:
    service: ambassador
  name: ambassador
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    service: ambassador

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

kubectl apply -f ambassador-svc.yaml

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

配置 Ambassador

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

---
apiVersion: v1
kind: Service
metadata:
  name: google
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v0
      kind:  Mapping
      name:  google_mapping
      prefix: /google/
      service: https://google.com:443
      host_rewrite: www.google.com
spec:
  type: ClusterIP
  clusterIP: None

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

kubectl apply -f google.yaml

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

测试映射

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

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

更多

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

Copyright © ServiceMesher 2018 all right reserved,powered by Gitbook 最后更新于 2018-05-17 19:50:36

results matching ""

    No results matching ""