阿里雲容器服務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
- Laravel服務容器Laravel
- 阿里雲Kubernetes容器服務Istio實踐之整合日誌服務Log Service阿里
- Windos NTP 服務設定
- 如何使用阿里雲容器服務保障容器的記憶體資源質量阿里記憶體
- 為什麼他們選擇阿里雲容器服務 ACK阿里
- 阿里雲 ACK 容器服務生產級可觀測體系建設實踐阿里
- 在容器服務中獲取客戶端真實源 IP客戶端
- CSDN 報告:阿里雲容器服務成為中國開發者首選阿里
- 服務設計的原則:服務模式與反模式模式
- 事件與服務容器事件
- 深入Laravel服務容器Laravel
- Dubbo服務降級設定
- Jave Web阿里雲簡訊服務傳送驗證碼Web阿里
- 如何設定iis服務更安全
- 深入剖析 Laravel 服務容器Laravel
- Docker容器服務搭建(一)Docker
- 記一次透過K8S ingress訪問業務服務出現404問題K8S
- 在 Kubernetes Ingress 中支援 Websocket/Socket 服務Web
- k8s中ingress訪問不到服務K8S
- 在阿里雲容器服務上基於Istio實現東西向流量管理阿里
- 阿里雲容器服務全線升級,ACK Pro開啟公測、邊緣容器商業化阿里
- 保護企業資訊保安,阿里雲滲透測試服務釋出阿里
- SNAT服務搭建:IP分享
- 從零入門 Serverless | 一文講透 Serverless Kubernetes 容器服務Server
- 阿里雲簡訊服務阿里
- centos 服務開機啟動設定CentOS
- Kubernetes基於haproxy實現ingress服務暴露
- 「Laravel 服務容器」自己的理解Laravel
- 簡單優化容器服務優化
- Laravel原始碼解析 — 服務容器Laravel原始碼
- Laravel 服務容器和提供器Laravel
- Laravel 服務容器實現原理Laravel
- 新課上線 | 每次 5 分鐘,輕鬆玩轉阿里雲容器服務!阿里
- Symfony 服務容器:使用 XML 或 YAML 檔案描述服務XMLYAML
- 容器、微服務、深度學習和阿里雲微服務深度學習阿里