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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

etcd 笔记(04)— etcd 网关与 gRPC 网关

發布時間:2023/11/28 生活经验 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 etcd 笔记(04)— etcd 网关与 gRPC 网关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. etcd 網關

etcd 網關是一個簡單的 TCP 代理,可將網絡數據轉發到 etcd 集群。網關是無狀態且透明的,它既不會檢查客戶端請求,也不會干擾集群響應,支持多個 etcd 服務器實例,并采用簡單的循環策略。

etcd 網關將請求路由到可用端點,并向客戶端隱藏故障,使得客戶端感知不到服務端的故障。

1.1 適用場景

我們使用客戶端連接到 etcd 服務器時,每個訪問 etcd 的應用程序必須知道所要訪問的 etcd 集群實例的地址,即用來提供客戶端服務的地址:ETCD_LISTEN_CLIENT_URLS

如果同一服務器上的多個應用程序訪問相同的 etcd 集群,每個應用程序仍需要知道 etcd 集群的廣播的客戶端端點地址。如果將 etcd 集群重新配置,擁有不同的端點,那么每個應用程序還需要更新其端點列表。在大規模集群環境下,重新配置的操作既造成了重復又容易出錯。

以上問題,都可以通過 etcd 網關來解決:

  • 使用 etcd 網關作為穩定的本地端點,對于客戶端應用程序來說,不會感知到集群實例的變化。
  • 典型的 etcd 網關配置是使每臺運行網關的計算機在本地地址上偵聽,并且每個 etcd 應用程序都連接對應的本地網關,發生 etcd 集群實例的變更時,只需要網關更新其端點,而不需要更新每個客戶端應用程序的代碼實現。

1.2 不適用場景

  • 性能提升

etcd 網關不是為提高 etcd 集群性能設計的。它不提供緩存、watch 流合并或批量處理等功能。

  • 在集群上運行管理系統

類似 Kubernetes 的高級集群管理系統本身支持服務發現。應用程序可以使用系統默認的 DNS 名稱或虛擬 IP 地址訪問 etcd 集群。例如,負責為 Service 提供 Cluster 內部的服務發現和負載均衡的 Kube-proxy 其實等效于 etcd 網關的職能。

總而言之,為了自動傳播集群端點更改,etcd 網關在每臺機器上都運行,為多個應用提供訪問相同的 etcd 集群服務。

2. gRPC 網關

gRPC-Gateway 為非 gRPC 的客戶端提供 HTTP 接口。

etcd v3 使用 gRPC 作為消息傳輸協議。

etcd 項目中包括了基于 gRPCGo client 和命令行工具 etcdctl,客戶端通過 gRPC 框架與 etcd 集群通訊。對于不支持 gRPC 的客戶端語言,etcd 提供 JSONgRPC-Gateway,通過 gRPC-Gateway 提供 RESTful 代理,轉換 HTTP/JSON 請求為 gRPCProtocol Buffer 格式的消息。

這里你需要注意的是,在 HTTP 請求體中的 JSON 對象,其包含的 keyvalue 字段都被定義成了 byte 數組,因此必須在 JSON 對象中,使用 base64 編碼對內容進行處理

2.1 etcd 版本與 gRPC-Gateway 接口對應的關系

gRPC-Gateway 提供的接口路徑自 etcd v3.3 已經變更:

  • etcd v3.2 及之前的版本只能使用 [CLIENT-URL]/v3alpha/* 接口;

  • etcd v3.3 使用 CLIENT-URL/v3alpha/*

  • etcd v3.4 使用 CLIENT-URL/v3beta/,且廢棄了 [CLIENT-URL]/v3alpha/

  • etcd v3.5 只使用 CLIENT-URL/v3beta/

通過上面的接口與 etcd 版本的對應關系,你可以看到,即使是 v3 版本下的 APIgRPC-Gateway 提供的接口路徑在內部細分的版本下也有不同,所以需要注意當前正在使用的 etcd 版本。

2.2 鍵值對讀寫操作

如果沒有使用 base64 對鍵值對進行編碼,那么會報以下錯誤:

wohu@ubuntu:~$ curl -L http://localhost:2379/v3/kv/put -X POST -d '{"key": "/demo", "value": "AAA"}'
{"error":"illegal base64 data at input byte 4","message":"illegal base64 data at input byte 4","code":3}

對其進行 base64 編碼

  • demo 字符串的 base64 編碼結果為 ZGVtbw==
  • AAA 字符串的 base64 編碼結果為 QUFB
wohu@ubuntu:~$ curl -L http://localhost:2379/v3/kv/put -X POST -d '{"key": "ZGVtbw==", "value": "QUFB"}'
{"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"26","raft_term":"3"}}

接著,我們通過 /v3/kv/range 接口,來讀取剛剛寫入的鍵值對:

wohu@ubuntu:~$ curl -L http://localhost:2379/v3/kv/range -X POST -d '{"key": "ZGVtbw=="}'
{"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"26","raft_term":"3"},"kvs":[{"key":"ZGVtbw==","create_revision":"26","mod_revision":"26","version":"1","value":"QUFB"}],"count":"1"}

當我們想要獲取前綴為指定值的鍵值對時,可以使用如下請求:

wohu@ubuntu:~$ curl -L http://localhost:2379/v3/kv/range -X POST -d '{"key": "ZGVtbw==", "range_end": "Zm9w"}'
{"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"26","raft_term":"3"},"kvs":[{"key":"ZGVtbw==","create_revision":"26","mod_revision":"26","version":"1","value":"QUFB"}],"count":"1"}

因為只有一個值,所以返回正確。

2.3 watch 鍵值

etcd 中提供了 /v3/watch 接口來監測 keys,我們來 watch 剛剛寫入的 ZGVtbw==,請求如下所示:

curl -N http://localhost:2379/v3/watch -X POST -d '{"create_request": {"key":"ZGVtbw=="}}'

然后另開一個窗口,執行以下命令

etcdctl put demo 123

查看 watch 結果輸出:

wohu@ubuntu:~$ curl -N http://localhost:2379/v3/watch -X POST -d '{"create_request": {"key":"ZGVtbw=="} }'
{"result":{"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"26","raft_term":"3"},"created":true}}
{"result":{"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"27","raft_term":"3"},"events":[{"kv":{"key":"ZGVtbw==","create_revision":"26","mod_revision":"27","version":"2","value":"MTIz"}}]}}

當寫入鍵值后,觸發了監測事件的發生,控制臺輸出了時間的細節。HTTP 請求客戶端與 etcd 服務端建立長連接,當監聽的鍵值對發生變更時,便會將事件通知給客戶端。

2.4 HTTP 請求的安全認證

HTTP 的方式訪問 etcd 服務端,需要考慮安全的問題,gRPC-Gateway 中提供的 API 接口支持開啟安全認證。通過 /v3/auth 接口設置認證,需要實現以下 4 個步驟:

  1. 創建用戶
wohu@ubuntu:~$  curl -L http://localhost:2379/v3/auth/user/add -X POST -d '{"name": "root", "password": "123456"}'
{"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"27","raft_term":"3"}}
  1. 創建角色
wohu@ubuntu:~$ curl -L http://localhost:2379/v3/auth/role/add -X POST -d '{"name": "root"}'
{"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"27","raft_term":"3"}}
  1. 用戶授予角色
wohu@ubuntu:~$ curl -L http://localhost:2379/v3/auth/user/grant -X POST -d '{"user": "root", "role": "root"}'
{"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"27","raft_term":"3"}}
  1. 開啟認證權限
wohu@ubuntu:~$ curl -L http://localhost:2379/v3/auth/enable -X POST -d '{}'
{"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"27","raft_term":"3"}}

如上的請求中,我們首先創建了 root 用戶和角色,將 root 角色賦予到 root 用戶,這樣就可以開啟用戶的權限。接下來就是進行身份驗證,并進行 HTTP 訪問。流程如下圖所示:

使用 /v3/auth/authenticate API 接口對 etcd 進行身份驗證以獲取身份驗證令牌:

wohu@ubuntu:~$ curl -L http://localhost:2379/v3/auth/authenticate -X POST -d '{"name": "root", "password": "123456"}'
{"header":{"cluster_id":"14841639068965178418","member_id":"10276657743932975437","revision":"27","raft_term":"3"},"token":"BGQDrdEVPaGQBCGh.51"}

請求獲取到 token 的值為 BGQDrdEVPaGQBCGh.51。接下來,設置請求的頭部 Authorization 為剛剛獲取到的身份驗證令牌,以使用身份驗證憑據設置 key 值:

curl -L http://localhost:2379/v3/kv/put -H 'Authorization:BGQDrdEVPaGQBCGh.51' -X POST -d '{"key": "ZGVtbw==", "value": "QUFB"}'

如果 token 不合法會報錯誤:

{"error":"etcdserver: invalid auth token","message":"etcdserver: invalid auth token","code":16}

etcd gRPC-Gateway 中提供的 API 接口還有諸如 /v3/auth/role/delete/v3/auth/role/get 等其他接口,請參考 官網

3. 總結

  • etcd 網關通常用于 etcd 集群的門戶,是一個簡單的 TCP 代理,將客戶端請求轉發到 etcd 集群,對外屏蔽了 etcd 集群內部的實際情況,在集群出現故障或者異常時,可以通過 etcd 網關進行切換;

  • gRPC-Gateway 則是對于 etcdgRPC 通信協議的補充,有些語言的客戶端不支持 gRPC 通信協議,此時就可以使用 gRPC-Gateway 對外提供的 HTTP API 接口。通過 HTTP 請求,實現與 gRPC 調用協議同樣的功能。

總結

以上是生活随笔為你收集整理的etcd 笔记(04)— etcd 网关与 gRPC 网关的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 在线观看a网站 | 人人综合网 | 成人动漫免费在线观看 | 天天摸天天做天天爽 | 三女同志亚洲人狂欢 | 欧美少妇诱惑 | 日本视频久久 | 国产精品66 | 亚洲精品乱码久久久久 | 色播视频在线观看 | 欧美亚洲在线观看 | 久草福利资源在线观看 | 亚洲欲| 国产成人精品一区二区三区网站观看 | 91尤物视频在线观看 | 操欧美老逼| 欧美男同又粗又长又大 | 成人在线综合 | 91爱爱网站 | 国精品一区二区 | 亚洲xx网| 五月天天色 | 亚洲色图15p| 海角社区在线 | 免费精品视频在线 | 日本道中文字幕 | 懂色av一区二区三区免费 | 污网站在线观看免费 | 国产馆av| 高潮毛片 | 国模二区| 日韩av手机在线播放 | 鲁一鲁一鲁一鲁一av | 日韩日b视频| 老汉av网站| 亚洲高清影院 | 色爽爽一区二区三区 | 亚洲一区网站 | a片在线免费观看 | 亚洲成人精品久久 | 一级片黄色 | 日本道在线观看 | 久插视频 | 69午夜 | 伊人色爱 | 亚洲毛片一区二区三区 | 午夜精品极品粉嫩国产尤物 | 久久免费看视频 | 日韩欧美亚洲 | 99久久精品国产一区二区成人 | 日韩毛片大全 | 亚洲另类欧美日韩 | av毛片网 | 亚洲av日韩av在线观看 | 人妻熟女一区二区aⅴ水野 91在线观看视频 | 中国美女性猛交 | 一本到在线| 国产一区999 | 狠狠躁夜夜躁人 | 国产无遮挡免费视频 | 亚洲欧美激情在线 | 精品久久久久久久无码 | 成人在线观看免费视频 | 欧美a一级片 | 狠狠干2019| 日韩色网站 | 国产白浆在线 | 男女黄网站 | 先锋影音av资源网站 | 麻豆福利在线 | 亚洲国产一区在线观看 | 福利一区在线 | 欧美一区二区三区粗大 | 操操干干 | 亚洲毛片a | 11一12免费毛片 | 亚洲午夜久久久久 | 久在线观看 | 亚洲色图偷 | 青青草老司机 | 搡8o老女人老妇人老熟 | 国产精品第72页 | 日本成人免费在线视频 | 六月丁香色婷婷 | 大桥未久av一区二区三区中文 | 91精品人妻互换一区二区 | 日本女人毛片 | 二区视频在线观看 | 国产探花一区 | 日韩爱爱网 | 久久综合久色欧美综合狠狠 | 狠狠鲁狠狠干 | 国精产品一区二区 | 成人免费一区二区三区 | 天天爽视频 | 六月天婷婷 | 日韩免费专区 | 中文字幕无码毛片免费看 | 91av中文字幕|