使用 Ambassador 的一個常見場景是將其部署爲 Kubernetes 的 edge 服務( API 網關)。Ambassador 是開源 Envoy 的分佈式版本,專門爲 kubernetes 設計的。html
本例將介紹如何經過 Ambassador 在 Kubernetes 上部署 Ambassador 。git
Ambassador 的設置是經過 kubernetes 部署的。爲了在 kubernetes 安裝 Ambassador/Envoy,若是你的集羣啓動了 RBAC:github
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 控制器。api
咱們如今須要建立一個 Kubernetes 服務來指向 Ambassador 的部署,咱們將使用 LoadBalancer
服務。若是你的集羣不支持 LoadBalancer
服務,你須要改爲 NodePort
或者 ClusterIP
。app
--- 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:curl
kubectl apply -f ambassador-svc.yaml
這時候 Envoy 和 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
。而後運行:google
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 和超時設定。要了解更多信息,請閱讀配置文檔。