成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何快速的在 Kubernetes 上部署云原生微服務網關 APISIX

系統 Linux 云原生
本文主要簡述了幾種網關的區別,思考了 APISIX 主要能幫助我們解決什么問題,最后在 Kubernetes 上進行了實踐。

 1、幾種常見網關的比較

  •  Nginx, 模塊化設計的反向代理軟件,C 語言開發
  •  OpenResty, 以 Nginx 為核心的 Web 開發平臺,可以解析執行 Lua 腳本
  •  Kong, OpenResty 的一個應用,是一個 API 網關,具有 API 管理和請求代理的功能,使用 PostgreSQL 存儲
  •  APISIX, 替換了 Kong 的 PostgreSQL 為 Etcd,基于 Nginx 的核心庫實現

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

上面是 APISIX 的架構圖,數據面處理客戶端請求,控制面管理路由。

2、APISIX 能解決什么問題

  •  邊緣路由

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

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

  •  基礎網關能力

網關的功能不限于轉發流量,更重要的是限流、熔斷等。

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

  •  Serverless

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

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

  •  灰度發布

由于對網關層進行了控制,APISIX 允許用戶通過配置權重控制流量的轉發行為,可以用來做灰度發布使用。

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 

這里的入口地址是后端服務的入口地址,如果是生成環境,應該使用 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,給其他系統集成 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 

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

4、創建服務測試

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

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

$ 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 配置路由

  •  新建一個上游服務

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

  •  新建一個路由

點擊下一步之后,選擇上面創建的服務 web,相關的參數就會自動填充。

  •  訪問測試

(2)Ingress 配置路由

  •  創建一個 ApisixRoute 路由

雖然這里部署的是 ingress-controller 組件,但是使用時創建的是 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 
  •  訪問測試

  •  查看創建的路由    

可以發現路由是被 ingress-controller 接管的,人工不要編輯。

  •  查看服務 

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

  •  查看服務 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 地址直接作為流量后端,而不需要經過 Service 的轉發,這有別于 Kubernetes 的服務轉發、負載均衡機制。

5、總結

本文主要簡述了幾種網關的區別,思考了 APISIX 主要能幫助我們解決什么問題,最后在 Kubernetes 上進行了實踐。內容如下:

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

6、參考

 

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

2022-09-01 08:17:15

Gateway微服務網關

2024-08-05 10:03:53

2024-10-29 08:44:18

2020-04-29 14:33:49

微服務網關Kong

2017-09-04 16:15:44

服務網關架構

2020-08-28 08:29:40

云原生微服務編程

2020-09-25 09:55:14

微服務云原生技術

2019-07-18 09:30:37

架構運維技術

2023-04-03 08:51:06

2020-11-15 23:48:57

服務網格微服務網絡網絡技術

2022-08-21 16:50:36

Kubeadm?Kubernetes

2024-07-22 15:49:07

KubernetesRedis

2023-09-26 07:34:24

Docker部署依賴包

2018-08-01 22:52:24

微服務容器云平臺API網關

2020-10-10 10:37:54

微服務架構技術API

2021-08-13 07:00:41

云原生k8sspringboot

2021-08-26 07:20:05

云原生K8sSpringboot

2023-11-09 08:31:56

Spring微服務網關

2025-01-13 16:00:00

服務網關分布式系統架構

2021-03-17 10:05:42

KubernetesRedis數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线欧美亚洲 | 国产精品日日摸夜夜添夜夜av | 国产亚洲精品久久久优势 | 黄色大片免费网站 | 国产成人精品一区二区三区在线 | 婷婷色在线 | 91精品国产91久久久久久吃药 | 欧美专区日韩专区 | 91精品国产高清一区二区三区 | 国内自拍偷拍一区 | 拍真实国产伦偷精品 | 四色成人av永久网址 | 精品国产1区2区3区 在线国产视频 | 综合久久99| 国产精品永久免费 | 伊人免费观看视频 | 91在线观看| 狠狠操狠狠色 | 国产精品成人一区二区三区 | 6996成人影院网在线播放 | 99精品一区二区三区 | 精品少妇一区二区三区在线播放 | 久久综合av | 国产一区二区三区久久久久久久久 | 91av视频在线观看 | 中文字幕av网 | 黑人巨大精品欧美一区二区免费 | 久久99精品久久久久久 | 操久久 | 一区二区三区影院 | 羞羞羞视频 | 特黄色一级毛片 | 亚洲不卡在线观看 | 夜夜精品浪潮av一区二区三区 | 日韩激情在线 | 亚洲成人蜜桃 | 人人九九 | 日本一区二区三区免费观看 | av高清 | 亚洲一区二区久久 | 在线观看亚洲专区 |