Cloud Service

在 Kubernetes 內取得使用者 IP - HTTP Loadbalancer

介紹如何在 GKE 上透過 HTTP LB 取得使用者真實 IP

ta-ching chen

2 minute read

前言

對於提供 HTTP 服務的系統來說,取得來源 IP 方式有兩種:

  • 利用封包標頭取得來源 IP

此方案是直接讀取封包的來源 IP,但由於容器和外界溝通不像傳統 Linux 主機有實體網卡對接,而是透過一系列的 NAT 規則置換封包標頭後才傳進容器內 (Understand container communication),導致取得錯誤的使用者 IP。

此方案則是利用 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

GCP LB Type

從 Google Kubernetes Engine 移除節點

學習如何手動移除 GKE 指定節點

ta-ching chen

1 minute read

前言

在 GKE 上運作的 Kubernetes 叢集支援多個 node pool,每個 pool 可以根據需求調配不同的機器規格、自動擴展等設定,但當我們從網頁設定縮小 node pool 時,GKE 會隨機選擇 pool 中的機器來移除。有時我們會希望移除指定的機器,因此下面會介紹該如何手動移除特定節點。

Hands-On

找出想要移除的節點,比方說 gke-dummy-server-default-pool-16ce3e71-9192

$ kubectl get node
NAME                                                 STATUS     AGE       VERSION
gke-dummy-server-default-pool-16ce3e71-9192          Ready          15h       v1.6.7
gke-dummy-server-default-pool-16ce3e71-s8w0          Ready          4d        v1.6.7

透過 kubectl drain 指令,將原本部署在該節點的 Pod 移到其他節點上。

$ kubectl drain <node> --force --ignore-daemonsets

並且執行後可以看到將該節點狀態變成 Ready,SchedulingDisabled

$ kubectl get node
NAME                                                 STATUS                     AGE       VERSION
gke-dummy-server-default-pool-16ce3e71-9192          Ready,SchedulingDisabled   15h       v1.6.7
gke-dummy-server-default-pool-16ce3e71-s8w0          Ready                      4d        v1.6.7

實作 Google Cloud Pub/Sub Push Subscription

學習如何透過 Golang 來撰寫 Google Cloud Pub/Sub Subscriber

ta-ching chen

3 minute read

Prerequisite

Subscriber

在 Cloud Pub/Sub 中,訊息的傳遞分成 Pull SubscriptionPush Subscription 兩種,本篇主要說明 Push Subscription 模式,以及適用的場景。