自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何快速的在 Kubernetes 上部署云原生微服務(wù)網(wǎng)關(guān) APISIX

系統(tǒng) Linux 云原生
本文主要簡述了幾種網(wǎng)關(guān)的區(qū)別,思考了 APISIX 主要能幫助我們解決什么問題,最后在 Kubernetes 上進行了實踐。

 1、幾種常見網(wǎng)關(guān)的比較

  •  Nginx, 模塊化設(shè)計的反向代理軟件,C 語言開發(fā)
  •  OpenResty, 以 Nginx 為核心的 Web 開發(fā)平臺,可以解析執(zhí)行 Lua 腳本
  •  Kong, OpenResty 的一個應(yīng)用,是一個 API 網(wǎng)關(guān),具有 API 管理和請求代理的功能,使用 PostgreSQL 存儲
  •  APISIX, 替換了 Kong 的 PostgreSQL 為 Etcd,基于 Nginx 的核心庫實現(xiàn)

APISIX 的優(yōu)勢在于提供了 API 的管理和擴展能力,讓網(wǎng)關(guān)不再僅僅轉(zhuǎn)發(fā)服務(wù),而是可以被配置、定制化。相較于 Nginx,APISIX 使用的是動態(tài)路由,避免了配置之后 reload 產(chǎn)生的風險。同時,APISIX 支持 HTTP(S)、HTTP2、Dubbo、QUIC、MQTT、TCP/UDP 等更多的協(xié)議,具有更好的使用生態(tài)。

上面是 APISIX 的架構(gòu)圖,數(shù)據(jù)面處理客戶端請求,控制面管理路由。

2、APISIX 能解決什么問題

  •  邊緣路由

機房對外暴露的訪問入口 IP 數(shù)量,通常是極少的,但是卻支撐了很多個服務(wù)。比如,訪問的 IP 是 1.2.3.4,但卻同時提供了 a.domain.com、b.domain.com 的訪問服務(wù)。這就需要用到邊緣路由,邊緣路由會將不同域名的訪問,轉(zhuǎn)發(fā)到不同的內(nèi)網(wǎng)地址。

APISIX 中三種方式可以注冊邊緣路由,dashboard、ingress-controller、admin api。

  •  基礎(chǔ)網(wǎng)關(guān)能力

網(wǎng)關(guān)的功能不限于轉(zhuǎn)發(fā)流量,更重要的是限流、熔斷等。

APISIX 內(nèi)置了很多插件,提供 APM、日志、熔斷、鑒權(quán)、證書管理、故障注入等功能。同時,也支持拖拽組合新的插件、開發(fā)新插件以滿足業(yè)務(wù)需求。

  •  Serverless

APISIX 通過插件的方式提供 Serverless,目前僅支持 Lua。但 APIGateway + Serverless 的組合,極具想象力。

利用 Serverless 可以快速對外提供無服務(wù)的 API,粘合各種服務(wù),也可以對外直接提供功能服務(wù)。

  •  灰度發(fā)布

由于對網(wǎng)關(guān)層進行了控制,APISIX 允許用戶通過配置權(quán)重控制流量的轉(zhuǎn)發(fā)行為,可以用來做灰度發(fā)布使用。

3、Kubernetes 上安裝 APISIX

(1)添加 Helm 源

  •  添加 Helm 源 
  1. $ helm repo add apisix https://charts.apiseven.com  
  2. $ helm repo update 
  •  查找 Chart 包 
  1. $ helm search repo apisix  
  2. NAME                             CHART VERSION APP VERSION DESCRIPTION  
  3. apisix/apisix                    0.3.5         2.7.0       A Helm chart for Apache APISIX  
  4. apisix/apisix-dashboard          0.1.5         2.7.0       A Helm chart for Apache APISIX Dashboard  
  5. apisix/apisix-ingress-controller 0.5.0         1.0.0       Apache APISIX Ingress Controller for Kubernetes 

(2)安裝 APISIX

  •  安裝 APISIX 
  1. $ helm install apisix apisix/apisix  --set gateway.type=NodePort --set admin.allow.ipList="{0.0.0.0/0}"  -n apisix --create-namespace 
  •  查看入口地址 
  1. $ export NODE_PORT=$(kubectl get --namespace apisix -o jsonpath="{.spec.ports[0].nodePort}" services apisix-gateway)  
  2. $ export NODE_IP=$(kubectl get nodes --namespace apisix -o jsonpath="{.items[0].status.addresses[0].address}" 
  3. $ echo http://$NODE_IP:$NODE_PORT  
  4. http://1.1.1.1:32462 

這里的入口地址是后端服務(wù)的入口地址,如果是生成環(huán)境,應(yīng)該使用 LoadBalancer 提供的地址。

  •  查看 apisix-admin 接口 key 
  1. $ export POD_NAME=$(kubectl get pods --namespace apisix -l "app.kubernetes.io/instance=apisix,app.kubernetes.io/name=apisix" -o jsonpath="{.items[0].metadata.name}") 
  2. $ kubectl -n apisix exec -it $POD_NAME cat conf/config.yaml |grep key   
  3.   admin_key:  
  4.       key: edd1c9f034335f136f87ad84b625c8f1  
  5.       key: 4054f7cf07e344346cd3f287985e76a2 

第一個 key 是 admin,第二個 key 是 viewer。這里的 key 可以用來通過 admin api 來配置 APISIX,給其他系統(tǒng)集成 APISIX 提供了入口。

(3)安裝 Dashboard

  •  安裝 Dashboard 
  1. $ helm install apisix-dashboard apisix/apisix-dashboard -n apisix --create-namespace 

默認賬戶是:admin 默認密碼是:admin

  •  查看 Dashboard 訪問入口 
  1. $ export NODE_PORT=$(kubectl get --namespace apisix -o jsonpath="{.spec.ports[0].nodePort}" services apisix-gateway)  
  2. $ export NODE_IP=$(kubectl get nodes --namespace apisix -o jsonpath="{.items[0].status.addresses[0].address}" 
  3. $ echo http://$NODE_IP:$NODE_PORT  
  4. http://1.1.1.1:31501 

(4)安裝 ingress-controller

  •  安裝 ingress-controller 
  1. $ helm install apisix-ingress-controller apisix/apisix-ingress-controller   --set config.apisix.baseURL=http://apisix-admin:9180/apisix/admin  --set config.apisix.adminKey=edd1c9f034335f136f87ad84b625c8f1  -n apisix 

這里就會需要設(shè)置上面獲取到的 admin key, 實際上 ingress-controller 也是通過調(diào)用 admin api 來配置路由的。

4、創(chuàng)建服務(wù)測試

前面提到 APISIX 通過 admin api 配置路由,有三種方式可以操作。這里主要驗證使用 Dashboard 和 Ingress 兩種方式:

  •  創(chuàng)建一個服務(wù) 
  1. $ kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0 
  •  暴露服務(wù) 
  1. $ kubectl expose deployment web --type=NodePort --port=8080 
  •  查看服務(wù)

$ kubectl get service web

NAME   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE

web    NodePort   10.233.58.113   <none>        8080:30572/TCP   28d

(1)Dashboard 配置路由

  •  新建一個上游服務(wù)

這里需要填入上面創(chuàng)建的集群訪問地址:web.default.svc.cluster.local

  •  新建一個路由

點擊下一步之后,選擇上面創(chuàng)建的服務(wù) web,相關(guān)的參數(shù)就會自動填充。

  •  訪問測試

(2)Ingress 配置路由

  •  創(chuàng)建一個 ApisixRoute 路由

雖然這里部署的是 ingress-controller 組件,但是使用時創(chuàng)建的是 ApisixRoute 對象。 

  1. apiVersion: apisix.apache.org/v1   
  2. kind: ApisixRoute   
  3. metadata:   
  4.   name: web-route   
  5. spec:  
  6.   http:  
  7.   - name: web  
  8.     match:  
  9.       hosts:  
  10.       - dev4.chenshaowen.com  
  11.       paths:  
  12.       - "/router-web/*"  
  13.     backend:  
  14.      serviceName: web  
  15.      servicePort: 8080 
  •  訪問測試

  •  查看創(chuàng)建的路由    

可以發(fā)現(xiàn)路由是被 ingress-controller 接管的,人工不要編輯。

  •  查看服務(wù) 

可以看到服務(wù)主要是由四個后端提供。

  •  查看服務(wù) Pod 的 IP 
  1. $ kubectl get pod  -o wide  
  2. NAME                   READY   STATUS    RESTARTS   AGE   IP              NODE    NOMINATED NODE   READINESS GATES  
  3. web-79d88c97d6-2sdlj   1/1     Running   0          27d   10.233.105.34   node4   <none>           <none>  
  4. web-79d88c97d6-7bfbb   1/1     Running   0          27d   10.233.105.32   node4   <none>           <none>  
  5. web-79d88c97d6-hccqk   1/1     Running   0          27d   10.233.105.33   node4   <none>           <none>  
  6. web-79d88c97d6-mh9gz   1/1     Running   0          28d   10.233.105.22   node4   <none>           <none> 

APISIX 會將 Pod 的 IP 地址直接作為流量后端,而不需要經(jīng)過 Service 的轉(zhuǎn)發(fā),這有別于 Kubernetes 的服務(wù)轉(zhuǎn)發(fā)、負載均衡機制。

5、總結(jié)

本文主要簡述了幾種網(wǎng)關(guān)的區(qū)別,思考了 APISIX 主要能幫助我們解決什么問題,最后在 Kubernetes 上進行了實踐。內(nèi)容如下:

  •  APISIX 是基于 Nginx 網(wǎng)絡(luò)庫實現(xiàn)的 API 網(wǎng)關(guān)應(yīng)用,使用 Etcd 作為存儲后端
  •  APISIX 能作為邊緣路由使用,其動態(tài)特性,避免了 Nginx reload 帶來的抖動
  •  APISIX 提供了 admin api 管理路由,有三種方式可以進行配置
  •  Kubernetes 下的 APISIX 跳過了 Kubernetes Service 直接將流量轉(zhuǎn)發(fā)到 Pod IP

6、參考

 

責任編輯:龐桂玉 來源: 奇妙的Linux世界
相關(guān)推薦

2022-09-01 08:17:15

Gateway微服務(wù)網(wǎng)關(guān)

2024-08-05 10:03:53

2024-10-29 08:44:18

2020-04-29 14:33:49

微服務(wù)網(wǎng)關(guān)Kong

2019-07-18 09:30:37

架構(gòu)運維技術(shù)

2017-09-04 16:15:44

服務(wù)網(wǎng)關(guān)架構(gòu)

2023-04-03 08:51:06

2020-11-15 23:48:57

服務(wù)網(wǎng)格微服務(wù)網(wǎng)絡(luò)網(wǎng)絡(luò)技術(shù)

2020-09-25 09:55:14

微服務(wù)云原生技術(shù)

2020-08-28 08:29:40

云原生微服務(wù)編程

2024-07-22 15:49:07

KubernetesRedis

2022-08-21 16:50:36

Kubeadm?Kubernetes

2023-09-26 07:34:24

Docker部署依賴包

2023-11-09 08:31:56

Spring微服務(wù)網(wǎng)關(guān)

2018-08-01 22:52:24

微服務(wù)容器云平臺API網(wǎng)關(guān)

2020-10-10 10:37:54

微服務(wù)架構(gòu)技術(shù)API

2025-01-13 16:00:00

服務(wù)網(wǎng)關(guān)分布式系統(tǒng)架構(gòu)

2021-08-13 07:00:41

云原生k8sspringboot

2021-08-26 07:20:05

云原生K8sSpringboot

2021-03-17 10:05:42

KubernetesRedis數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號