Envoy Gateway 最佳實踐:正式上線前,先替未來的自己積點德

6 min read

功能跑得動,跟系統真的穩,完全是兩個宇宙。很多入口層事故不是因為 Envoy Gateway 不夠強,而是因為設定流程太隨興,最後維運像在拆驚喜包。這篇就把比較實戰的建議整理成清單。

推薦做法

1. 先分清楚誰管 Gateway、誰管 Route

如果團隊多人協作,建議把責任拆開:

  • 平台團隊管理 GatewayClassGateway
  • 應用團隊管理自己的 HTTPRoute

這樣做的好處是,入口層安全與暴露面不會被每個 app 隨手亂改,而應用團隊還是能保有路由彈性。這就是 Gateway API 設計很香的地方,別把它又用回單體大 YAML。

2. TLS 一開始就當基本配備

不要想著「先 HTTP,之後再補 HTTPS」。
通常這個「之後」最後就會變成某個禮拜五晚上。

至少做到:

  • 對外 listener 預設走 HTTPS
  • 憑證來源有固定管理方式
  • 測試、自簽、正式 CA 的流程分開

如果你已經有 cert-manager,盡量整合它。憑證輪替自動化,比你每次手動 patch Secret 靠譜太多。

3. Route 規則盡量明確,不要過度貪方便

例如這種全吃規則雖然方便,但很容易變成黑洞:

rules:
  - backendRefs:
      - name: backend
        port: 8080

它不是錯,只是當你的系統開始變大時,太多「預設全收」的規則會讓除錯很痛苦。
能寫 hostnames、能寫 path,就盡量寫清楚。

4. 用小流量分流,不要一次梭哈

新版本上線時,先切小比例流量:

backendRefs:
  - name: api-v1
    port: 8080
    weight: 90
  - name: api-v2
    port: 8080
    weight: 10

這比「整個 service selector 一把切過去」溫柔太多。
遇到問題時,回切速度也會快得多,半夜起來救火時你會很感謝這件事。

5. 養成看 status 與事件的習慣

只看 YAML 不夠,你要看 controller 有沒有真的接受設定:

kubectl get gateway -A
kubectl get httproute -A
kubectl describe gateway eg
kubectl describe httproute app-route

尤其是這幾類問題,光看 spec 常常看不出來:

  • route 沒被接受
  • cross-namespace reference 被擋
  • listener 狀態異常

工程師最怕的不是錯,而是「我以為有生效,結果根本沒接單」。

常見誤區

誤區 1:把 Envoy Gateway 當成只會轉發的黑盒子

它不是只會把封包從 A 搬到 B。
官方文件明確把它定位成 Kubernetes-native API Gateway,後面還能疊更多流量與安全策略。你如果只把它當 Ingress 替代品,會低估它很多能力。

誤區 2:跨 namespace 指憑證卻沒建 ReferenceGrant

很多人看到 certificateRefs 能寫 namespace,就直接指過去,然後想說「怎麼沒反應」。
答案通常不是鬧鬼,而是少了 ReferenceGrant

誤區 3:只測 happy path

不要只測:

  • curl http://... 成功一次

還要測:

  • 不同 hostname
  • 不同 path
  • TLS 憑證是否正確
  • 新舊版本分流比例是否如預期

入口層最怕的就是 happy path 很美,邊界情況一碰就裂。

誤區 4:把 demo 配置直接當 production

官方 quickstart 非常適合學習,但它的定位就是 quickstart。
正式環境請至少補上:

  • 憑證自動化
  • 監控與告警
  • 變更流程
  • 路由命名規範

不然你今天是 quickstart,明天就是 quick-fall。

一份最小上線清單

正式前可以對照這份 checklist:

  • Gateway listener 是否明確區分 HTTP / HTTPS
  • 憑證 Secret 與輪替流程是否清楚
  • HTTPRoute 是否有清楚的 hostnames / matches
  • 重要變更是否用小流量切分
  • 是否能從 status 與事件快速定位問題

如果這五件事都做到,至少已經比「能通就好」高一個檔次。

一句話總結

Envoy Gateway 真正的價值,不只是把流量導通,而是讓你的入口層配置變得更標準、可分工、可治理。功能是一時的,維運是長期的,對未來的自己好一點,真的很重要。

下一步

如果你現在腦中還是會冒出這個問題:

「懂歸懂,但新需求一來,我到底該選哪一種 route?」

那下一篇就是你的懶人包: 👉 Route 類型速查表

延伸閱讀