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

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

討論 Label 對於 Service 的影響

2 minute read

系列文章

前言

前篇文章介紹 Service 不同存取路徑間的差異,這次我們來討論 Service 和 Label 之間是如何互相影響的。

Service 與 Label Selector 共舞

We encourage use of a unique collection of labels rather than a single unique label value since the additional attributes are generally needed — bgrant0607

在 Kubernetes 最佳實踐中,Pod 本身會帶著許多不同標籤 (Label) 來辨別其實際用途。透過賦予一組唯一的標籤組合 (a unique collection of labels),不僅能擁有更精確的粒度 (granularity) 以外,也能避免操作上出現異常。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: python-http-server
spec:
  replicas: 1
  selector:
    matchLabels:
      lang: python
      svc: http-server
  template:
    metadata:
      labels:
        lang: python
        svc: http-server
    spec:
      containers:
      - name: http-server
        image: trinitronx/python-simplehttpserver
        command:
          - python
        args:
          - -m
          - SimpleHTTPServer
          - "80"
        ports:
        - containerPort: 80
          protocol: TCP

說明後端開發語言轉換至 Golang 原因

1 minute read

演講投影片

  • 2017 iTHome GopherDay