日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dapr 集成 APISIX 做API网关

發布時間:2023/12/4 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dapr 集成 APISIX 做API网关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在這篇文章中,我將展示如何創建一個 APISIX控制器,該控制器在 Kubernetes 集群中公開啟用 Dapr 的應用程序。本質上,APISIX控制器將配置相同的標準 Dapr annotations以注入daprd sidecar。通過公開這個 sidecar,它將允許外部應用程序與集群中啟用 Dapr 的應用程序進行通信,請參閱 Dapr API 參考。下圖是我們實際項目中的架構圖:

Apache APISIX Ingress 概覽

在 K8s 生態中,Ingress 作為表示 K8s 流量入口的一種資源,想要讓其生效,就需要有一個 Ingress Controller 去監聽 K8s 中的 Ingress 資源,并對這些資源進行相應規則的解析和實際承載流量。在當下趨勢中,像 Kubernetes Ingress Nginx 就是使用最廣泛的 Ingress Controller 實現。

而 APISIX Ingress 則是另一種 Ingress Controller 的實現。跟 Kubernetes Ingress Nginx 的區別主要在于 APISIX Ingress 是以 Apache APISIX 作為實際承載業務流量的數據面。如下圖所示,當用戶請求到具體的某一個服務/API/網頁時,通過外部代理將整個業務流量/用戶請求傳輸到 K8s 集群,然后經過 APISIX Ingress 進行后續處理。

從上圖可以看到,APISIX Ingress 分成了兩部分。一部分是 APISIX Ingress Controller,作為控制面它將完成配置管理與分發。另一部分 APISIX Proxy Pod 負責承載業務流量,它是通過 CRD(Custom Resource Definitions) 的方式實現的。Apache APISIX Ingress 除了支持自定義資源外,還支持原生的 K8s Ingress 資源。詳細內容參見:https://www.apiseven.com/zh/blog/apisix-ingress-details

Dapr 概覽

Dapr是一個可移植,事件驅動的運行時。它使開發人員簡單地去構建運行在云和edge上彈性、無狀態和有狀態的應用,并且包含多種語言和開發人員框架。

Any language, any framework, anywhere

今天,我們正在經歷一波云應用浪潮。開發人員熟悉web +數據庫應用程序架構(例如經典的3層設計),但不熟悉本質上是分布式的微服務應用程序架構。成為分布式系統專家很難,你也不應該這樣做。開發人員希望專注于業務邏輯,同時依靠平臺為他們的應用程序注入伸縮性、彈性、可維護性、彈性和其他本地云架構的屬性。

這就是Dapr的用武之地。Dapr將構建微服務應用程序的最佳實踐編入開放的、獨立的構建塊中,使您能夠使用自己選擇的語言和框架構建可移植的應用程序。每個構建塊都是完全獨立的,您可以在應用程序中使用其中的一個、一些或全部。

此外,Dapr與平臺無關,這意味著您可以在任何Kubernetes集群和其他與Dapr集成的托管環境上本地運行應用程序。這使您能夠構建可以在云和edge上運行的微服務應用程序。

詳細內容參見:https://docs.dapr.io/zh-hans/concepts/overview/

APISIX 支持Dapr 的部署

前提條件

?Kubernetes 1.19+ 集群,集群上已經配置了?Dapr?。

?安裝了 Helm CLI 3x。

?Kubectl CLI 已安裝并配置為訪問集群。

?可選:用于創建自簽名證書的OpenSSL。

?APISIX的Helm Chart 版本0.7.2+,具體原因0.7.2 版本修復的issue:https://github.com/apache/apisix-helm-chart/issues/167

準備APISIX Helm

通過運行以下命令為 APISIX控制器添加最新的 helm chart repo:

$ helm repo add apisix https://charts.apiseven.com

$ helm repo update

創建APISIX Ingerss命名空間

確保當前 kubectl 上下文指向正確的 Kubernetes 集群,然后運行以下命令:

kubectl create namespace ingress-apisix

安裝支持 Dapr 的 APISIX 控制器

使用以下內容創建一個名為 dapr-annotations.yaml 的文件,以在 APISIX Proxy Pod 上設置注釋:

apisix:

? podAnnotations:

??? dapr.io/enabled:?"true"

??? dapr.io/app-id:?" apisix-gateway"

dapr.io/app-port: "9080"

dapr.io/enable-metrics: "true"

dapr.io/metrics-port: "9099"

dapr.io/sidecar-listen-addresses: 0.0.0.0

dapr.io/config: ingress-apisix-config

注意:上面的app-port告訴 daprd sidecar Proxy在監聽哪個端口。有關受支持的注釋的完整列表,請參閱 Dapr Kubernetes pod 注釋規范。

下面是我在AKS上安裝的示例dapr-annotations.yaml:

?apisix:

? podAnnotations:

??? dapr.io/app-id:?apisix-gateway

??? dapr.io/app-port:?'9080'

??? dapr.io/enable-metrics:?'true'

??? dapr.io/enabled:?'true'

??? dapr.io/metrics-port:?'9099'

dapr.io/sidecar-listen-addresses: 0.0.0.0

dapr.io/config: ingress-apisix-config

gateway:

? type:?LoadBalancer

ingress-controller:

? enabled:?true

dashboard:

? enabled:?true

運行以下命令,該命令引用上述文件:

helm install apisix apisix/apisix -f dapr-annotations.yaml -n ingress-apisix

創建APISIX的Dapr Sidecar 資源

1、配置一個Apisix 上游 upstream—apisix-dapr

主機名 填寫:apisix-gateway-dapr,端口號填寫3500

{

? "nodes":?[

??? {

????? "host":?"apisix-gateway-dapr",

????? "port":?3500,

????? "weight":?1

??? }

? ],

? "retries":?1,

? "timeout":?{

??? "connect":?6,

??? "read":?6,

??? "send":?6

? },

? "type":?"roundrobin",

? "scheme":?"http",

? "pass_host":?"pass",

? "name":?"apisix-dapr"

}

2、配置一個apisix 服務 apisix-gateway-dapr , 上游服務選擇apisix-dapr:

{

? "name":?"apisix-gateway-dapr",

? "upstream_id":?"376187148778341098"

}

部署測試示例項目

HTTPBin是以Python+Flask寫的一款工具,它cover了各類的HTTP場景,且每個接口一定都有返回。我們使用 kennethreitz/httpbin 作為示例項目進行演示:

kubectl apply -f 01.namespace.yaml

kubectl apply -f 02.deployment.yaml

kubectl apply -f 03.svc.yaml

上面假設有一個使用 Dapr app-id kennethreitz-httpbin運行的微服務,

路徑匹配改寫?

比如請求網關是 /httpbin/*, 然后后端接收的路徑應該是 /*, 中間的httpbin只是充當服務名的標識。

路徑 填?/*? ? 匹配/get這種請求

路徑改寫選正則改寫?

匹配^/ httpbin/(.*) ?表示匹配/之后的部分,作為第一個匹配到的值,變量名為$1

轉發路徑模板 /v1.0/invoke/svc-kennethreitz-httpbin.kind-test/method/$1 ?? 即取上一個匹配后的參數拼接轉發。在支持命名空間的托管平臺上,Dapr 應用 ID 是符合有效的 FQDN 格式,其中包括目標名稱空間。例如,以下字符串包含應用 ID (svc-kennethreitz-httpbin) 以及應用運行在 命名空間(kind-test)。

測試是否代理成功,訪問http://20.195.90.43/httpbin/get:

可以看到也正常代理了。

刪除 APISIX控制器

為方便起見,這里是刪除 APISIX控制器的命令:

helm delete apisix -n ingress-apisix

不要忘記刪除之前創建的命名空間ingress-apisix。

總結

你可以在 Kubernetes 中使用 Apache APISIX 的官方 Helm 倉庫直接部署 Apache APISIX 和 APISIX Ingress Controller。并且 Apache APISIX可通過作為網關,承載 APISIX Ingress Controller 的數據面來承載業務流量。將Dapr 通過Sidecar 的annotations 注入到APISIX Proxy Pod,通過Dapr的服務調用模塊調用集群中的微服務。

總結

以上是生活随笔為你收集整理的Dapr 集成 APISIX 做API网关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。