阿里雲容器服務Ingress設定原IP透傳
問題
在很多業務場景裡,我們都需要知道客戶端的真實IP來控制業務邏輯。但是從客戶到真正的服務,中間總會進過多層的SLB(負載均衡),那麼如何才能獲取到客戶的真實IP呢?
在Kubernetes容器的環境下,通常一個客戶端訪問到業務要經過雲的SLB,Ingress才能達到業務的應用。所以我們需要每一層都能夠透傳客戶端的IP才行。
原理
在基於HTTP的協議裡,對於客戶端原IP的透傳,可以參考: RFC7239(Forwarded HTTP Extension, https://tools.ietf.org/html/rfc7239) 標準。沒經過一層鏈路,都會把對應地址加入到X-Forwarded-For
這個http的擴充套件頭裡,以逗號隔開,最早的客戶端是第一個地址。
例如:
X-Forwarded-For: 192.0.2.43, 2001:db8:cafe::17
根據RFC7239規範,有個需要注意:如果請求中只有X-Forwarded-For
,而沒有其它的X-xxxxx
的擴充套件頭,則規範是建議將其轉為
Forwarded: for=192.0.2.43, for="[2001:db8:cafe::17]"
阿里雲Kubernetes Ingress實踐
大家或許知道,在阿里雲的Kubernetes容器服務裡,公有云SLB和Ingress是已經自動在安裝的時候配置好的,但是如果需要透傳客戶端的IP,則必須針對ingress controller的service做些改動,具體如下:
kubectl edit service/nginx-ingress-lb -n kube-system
將下圖對應的紅色框的內容從Cluster
改為Local
原因是參見Kubernetes官網的文件說明:
該引數主要是保護客戶端IP,避免loadbalancer/nodeport的服務的第二跳。這樣nodeport的服務路口只會去找本節點的pod服務。如果本節點沒有對應的pod(部署的deployment的例項數少於節點數),則請求將路由不到服務上。為此阿里雲的Cloud Provider專門做了優化,只會把有pod的節點注!冊到阿里雲的SLB上,避免該問題。
這樣,Ingress controller被rolling update後就可以提供原IP給容器的應用了
相關文章
- 使用騰訊雲容器服務玩轉 Nginx IngressNginx
- 阿里雲Serverless Kubernetes通過Ingress提供7層服務訪問阿里Server
- 阿里雲Kubernetes容器服務Istio實踐之整合日誌服務Log Service阿里
- 為什麼他們選擇阿里雲容器服務 ACK阿里
- 阿里雲容器服務 ACK 產品技術動態(202208)阿里
- 阿里雲容器服務 ACK 產品技術動態(202209)阿里
- 阿里雲容器服務 ACK 產品技術動態(202210)阿里
- 阿里雲容器服務 ACK 產品技術動態(202207)阿里
- 阿里雲容器服務 ACK 產品技術動態(202302)阿里
- 阿里雲 ACK 容器服務生產級可觀測體系建設實踐阿里
- 如何使用阿里雲容器服務保障容器的記憶體資源質量阿里記憶體
- 阿里雲容器&服務網格產品技術動態(202203)阿里
- 阿里雲簡訊服務阿里
- Jave Web阿里雲簡訊服務傳送驗證碼Web阿里
- 阿里雲釋出 Elasticsearch 雲服務阿里Elasticsearch
- 容器、微服務、深度學習和阿里雲微服務深度學習阿里
- 2020最新 使用阿里雲的簡訊服務傳送簡訊阿里
- 在阿里雲容器服務上基於Istio實現東西向流量管理阿里
- CentOS 配置阿里雲 NTP 服務CentOS阿里
- 阿里雲容器服務全線升級,ACK Pro開啟公測、邊緣容器商業化阿里
- CSDN 報告:阿里雲容器服務成為中國開發者首選阿里
- 新課上線 | 每次 5 分鐘,輕鬆玩轉阿里雲容器服務!阿里
- 保護企業資訊保安,阿里雲滲透測試服務釋出阿里
- Laravel 阿里雲簡訊服務包Laravel阿里
- 阿里雲訊息服務使用教程阿里
- 阿里雲智慧對話分析服務阿里
- 阿里雲vscode的設定入口阿里VSCode
- 阿里雲安全組設定FTP阿里FTP
- 阿里雲安全組規則授權物件設定為固定IP段訪問阿里物件
- Windos NTP 服務設定
- 傳V社可能正建設Steam雲遊戲服務遊戲
- 在 Kubernetes Ingress 中支援 Websocket/Socket 服務Web
- 詳解華為雲基因容器服務GCSGC
- 雲容器例項服務入門必讀
- 基於ECS搭建FTP服務(阿里雲)FTP阿里
- 阿里雲安全管家服務重磅釋出!阿里
- 阿里雲伺服器部署Mongodb服務阿里伺服器MongoDB
- 容器服務 ACK 結合 MSE Ingress,讓叢集入口流量管理更豐富、更容易