K3s+Ambassador,強(qiáng)大的輕量級K8S解決方案
作者簡介
Kubernetes為微服務(wù)提供了一個強(qiáng)大的網(wǎng)絡(luò)模式。該模式的主要部分之一是每個pod都有自己的IP地址,在集群內(nèi)可以尋址。因此,每個Kubernetes集群通常有一個扁平的虛擬網(wǎng)絡(luò),使得外部host不能夠直接訪問。那意味著從集群外部的客戶端路由流量到部署在集群內(nèi)的服務(wù)需要進(jìn)行一些額外的工作。對于路由流量到Kubernetes集群內(nèi)部有各種策略,其中最常的方法是使用ingress controller。
Ingress Controllers
Ingress controller路由來自集群外部的流量,并負(fù)責(zé)將流量路由到集群內(nèi)部的各個服務(wù)中。Ingress controller的名稱來源與它可以處理Ingress資源,這是一種特殊類型的Kubernetes資源,它指定了這些路由規(guī)則。
Ingress controller構(gòu)建在諸如HAProxy、NGINX、Traefik以及Envoy Proxy等代理上。Envoy Proxy起初由Lyft編寫和部署,但發(fā)展至今已經(jīng)成為CNCF的其中一個項目,數(shù)十家企業(yè)都對其做了貢獻(xiàn),包括亞馬遜、Airbnb、Google、Pinterest以及VMware。
K3s、Rancher以及Ambassador
K3s是一個輕量級Kubernetes發(fā)行版,可以運行在資源有限環(huán)境,例如IoT或邊緣設(shè)備以及部署筆記本上。對于將容器構(gòu)建在Kubernetes上的團(tuán)隊來說,Rancher是一個完整的軟件堆棧。無論是K3s還是Rancher均支持各類功能不同的Ingress controller。
在本文中,我們將了解如何在K3s上部署Ambassador。Ambassador是基于Envoy Proxy構(gòu)建的開源Ingress controller和API網(wǎng)關(guān)。Ambassador向Kubernetes用戶公開了許多Envoy Proxy的核心功能,包括零宕機(jī)重載、高級流量管理、服務(wù)網(wǎng)格集成(支持Consul、Linkerd和Istio)、可觀察性、TLS終止和靈活的API用于速率限制和認(rèn)證。Ambassador已經(jīng)進(jìn)行了諸多調(diào)整,以便在Kubernetes上獲得最大的性能,并能夠以最少的資源運行。
部署帶有Ambassador的K3s
默認(rèn)情況下,K3s將Traefik作為ingress controller。要使用Ambassador和Envoy Proxy需要按照以下步驟操作(這些步驟假設(shè)你已經(jīng)安裝好了K3s,如果你尚未安裝請根據(jù)先快速指南進(jìn)行安裝:
https://rancher.com/docs/k3s/latest/en/quick-start/)
1、 使用--disable treafik選項啟動K3s。你可以通過編輯/etc/systemd/system/k3s.service進(jìn)行此操作并且編輯ExecStart行:
ExecStart=/usr/local/bin/k3s \server \--disable traefik \
2、 重啟K3s
sudo systemctl daemon-reloadsudo systemctl restart k3s.service
3、 通過應(yīng)用標(biāo)準(zhǔn)的Ambassador Kubernetes manifest安裝Ambassador(Ambassador也支持Helm安裝:
https://www.getambassador.io/docs/latest/topics/install/helm/)
kubectl apply -f https://www.getambassador.io/yaml/ambassador/ambassador-crds.yamlkubectl apply -f https://www.getambassador.io/yaml/ambassador/ambassador-rbac.yamlkubectl apply -f https://www.getambassador.io/yaml/ambassador/ambassador-service.yaml
4、 現(xiàn)在我們將部署一個簡單的服務(wù)。保存以下Kubernetes YAML到文件中,稱為quote.yaml.
---apiVersion: v1kind: Servicemetadata:name: quotespec:ports:name: httpport: 80targetPort: 8080selector:app: quote---apiVersion: apps/v1kind: Deploymentmetadata:name: quotespec:replicas: 1selector:matchLabels:app: quotestrategy:type: RollingUpdatetemplate:metadata:labels:app: quotespec:containers:name: backendimage: docker.io/datawire/quote:0.4.1ports:name: httpcontainerPort: 8080
5、 部署quote服務(wù)到K3s:kubectl apply -f quote.yaml
6、 Ambassador支持標(biāo)準(zhǔn)的Kubernetes ingress資源進(jìn)行路由。Ingress資源是單體對象,既包括Ingress本身的配置(如TLS配置),也包括路由。然而,官方的ingress標(biāo)準(zhǔn)相當(dāng)有限,所以大多數(shù)Ambassador用戶都依賴Mapping,Mapping是Ambassador特有的自定義資源定義。Mapping資源與Ambassador的部署完全解耦,使得Mapping資源只是用來描述請求路由。將下面的YAML配置保存到一個名為quote-mapping.yaml的文件中。
---apiVersion: getambassador.io/v2kind: Mappingmetadata:name: quote-backendspec:prefix: /give-me-a-quote/service: quote
7、 應(yīng)用配置到集群:
kubectl apply -f quote-mapping.yaml
8、 獲取Ambassador LoadBalancer 服務(wù)的IP地址:
sudo kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.43.0.1443/TCP 60m NodePort 10.43.134.748877:31032/TCP 5m15s ambassador LoadBalancer 10.43.61.86 10.128.0.111 80:31347/TCP 89squote ClusterIP 10.43.129.24980/TCP 31s
9、 復(fù)制IP地址并測試配置:
curl http://
$ curl 10.128.0.111/give-me-a-quote/{"server": "harmonious-strawberry-z6onbsu2","quote": "A small mercy is nothing at all?","time": "2020-07-15T13:59:50.716712445Z"}
恭喜你!你已經(jīng)成功使用Ambassador來路由一個HTTP請求到quote服務(wù)。
總? 結(jié)
Ambassador提供了一套豐富的功能,包括認(rèn)證、速率限制和豐富的協(xié)議支持(如TCP、WebSockets、gRPC、HTTP)。Ambassador還擁有一套經(jīng)過測試的與其他云原生基礎(chǔ)設(shè)施的集成,如監(jiān)控系統(tǒng)和服務(wù)網(wǎng)格。K3s和Ambassador一起使用是一個強(qiáng)大的輕量級Kubernetes解決方案,非常適用于開發(fā)和生產(chǎn)。
推薦閱讀
這應(yīng)該是最適合國內(nèi)用戶的K3s HA方案
掃碼添加k3s中文社區(qū)助手
加入官方中文技術(shù)社區(qū)
官網(wǎng):https://k3s.io

