在 Kubernetes 內取得使用者 IP - HTTP Loadbalancer
介紹如何在 GKE 上透過 HTTP LB 取得使用者真實 IP
前言
對於提供 HTTP 服務的系統來說,取得來源 IP 方式有兩種:
- 利用封包標頭取得來源 IP
此方案是直接讀取封包的來源 IP,但由於容器和外界溝通不像傳統 Linux 主機有實體網卡對接,而是透過一系列的 NAT 規則置換封包標頭後才傳進容器內 (Understand container communication),導致取得錯誤的使用者 IP。
- 通過夾帶在 HTTP 請求的 X-Forwarded-For 來取得
此方案則是利用 PROXY Protocol,此方案是讓 Proxy Server 將 IP 附加在 HTTP 標頭 X-Forwarded-For
內,因此該標頭內的第一個位址即是使用者的真實 IP。
X-Forwarded-For:[61.219.125.41, 10.140.0.2]
下面會介紹在 GKE (Google Container Engine) 上透過 L7 HTTP Load Balancer 取得使用者真實 IP。
架構說明
下圖為目前 Google 支援三種 LB