在學 Kubernetes NetworkPolicy 的時候,我曾經有一個困惑:
官方文件告訴我,當我要幫資料庫設定網路政策時,只需要考慮 Ingress 規則(流入的流量),而不需要管 Egress(流出的流量)。
舉例來說:
這聽起來直覺上有點奇怪:難道回應的流量不用規則保護嗎?
在 Kubernetes 裡,NetworkPolicy 用來控制 Pod 與 Pod 之間的通訊。它有兩個方向:
預設情況下(完全沒設定 NetworkPolicy),所有 Pod 都能互相溝通。
一旦某個 Pod 被 NetworkPolicy 選中,它的流量就會受到規則限制,任何未被允許的流量都會被封鎖。
這裡有個關鍵:在網路世界裡,連線都是由「客戶端」發起的。
換句話說:
這就像防火牆的行為:你允許「連進來的門口」,回應的封包就會被視為同一個 session,不需要額外開門。
假設有兩個 Pod:
如果 API 要能存取 DB:
但如果反過來,DB 也要能主動呼叫 API(比較少見):
因為在 TCP(以及大部分應用層協定)裡:
這就呼應了一開始時說的:「你只需要管請求的發起方向。」
想像你要去某棟大樓:
這就是 NetworkPolicy 在處理 TCP session 的邏輯。
📌 判斷規則:誰發起連線,就保護那個方向。
這個觀念對 CKA/CKAD 考試也很重要,因為考題通常會問你怎麼正確寫 NetworkPolicy。