題幹與適用場景
叢集中的 Gateway 負責接收外部 HTTPS,請求轉發到只接受 TLS 的內部 Service。請說明如何使用 Gateway API 的 BackendTLSPolicy 設定上游 TLS、驗證憑證和主機名稱,並處理策略無效、跨命名空間引用與回滾。
面試官考察點
- 是否區分用戶端 TLS 終止與 Gateway 到後端的 TLS origination。
- 是否理解策略透過 targetRef 附著到 Service,並由實作回報狀態。
- 是否能說清楚 CA、伺服器名稱、用戶端憑證和不安全跳過驗證的風險。
- 是否考慮跨命名空間授權、相容性、觀測、回滾和漸進遷移。
回答前需要釐清的問題
- TLS 是在 Gateway 終止後重新加密,還是端到端透傳?後端憑證的 SAN 使用哪個服務名稱?
- CA、用戶端憑證和私鑰由哪個命名空間管理,是否需要 ReferenceGrant 或其他授權?
- Gateway 實作是否支援目前 BackendTLSPolicy 版本和目標 Route 類型?
- 憑證輪換、策略無效或後端暫時不支援 TLS 時,流量如何觀察、回滾和隔離?
30 秒回答框架
我會把需求拆成兩段 TLS:用戶端到 Gateway 的終止,以及 Gateway 到 Service 的上游 TLS。BackendTLSPolicy 附著到 Service,宣告驗證材料和可選的用戶端身分;實作必須回報策略是否有效。上線前驗證 CA、伺服器名稱、埠號、跨命名空間授權和實作相容性,禁止用跳過憑證驗證繞過問題。先在一組後端灰度,監控策略狀態、握手錯誤和憑證過期,再準備可逆回滾。
分步驟深入解答
1. 明確 TLS 連線邊界
Gateway API 官方 TLS 指南把上游 TLS 設定放在附著到 Service 的 BackendTLSPolicy 中。用戶端 TLS 終止後,Gateway 作為 TLS 用戶端連接後端;後端憑證必須由設定的信任材料驗證,伺服器名稱也要與憑證身分匹配。不能把外部監聽器的憑證直接當成後端驗證設定。
2. 設計策略附著與驗證材料
策略透過 targetRef 指向 Service,驗證設定可使用 CA 憑證引用或規範定義的知名 CA 選項。若後端要求雙向 TLS,還要設定用戶端憑證和私鑰,並限制 Secret 的讀取範圍。以下是面試中用於討論欄位關係的簡化範例,實際欄位以實作支援的 API 版本為準:
apiVersion: gateway.networking.k8s.io/v1alpha3
kind: BackendTLSPolicy
metadata:
name: payments-upstream-tls
spec:
targetRefs:
- group: ""
kind: Service
name: payments
validation:
hostname: payments.internal.example
wellKnownCACertificates: System部署前檢查策略狀態、引用物件存在性和控制器是否回報無效原因;不能只看資源建立成功。
3. 處理命名空間與憑證輪換
策略與目標 Service 的命名空間邊界要清楚。跨命名空間引用需要實作支援的授權機制,不能因 Gateway 能存取 Service 就預設允許讀取憑證 Secret。憑證輪換應使用新舊 CA 重疊視窗或雙憑證策略,觀察握手成功率後再撤銷舊材料,並驗證控制器是否會重新建立連線。
4. 觀測、灰度與回滾
灰度時先繫結一組 Service 或獨立埠號,記錄策略狀態、TLS 握手失敗、後端名稱不匹配、憑證過期和連線重試。策略變為無效時,預期行為應是拒絕不安全連線並產生可定位事件,而不是靜默降級為明文。回滾要恢復上一份有效策略或路由目標,並保留憑證與稽核記錄。
高品質示範回答
我會先確定兩段連線:外部 TLS 在 Gateway 終止,Gateway 再以 TLS 用戶端連接 Service。BackendTLSPolicy 透過 targetRef 附著到 Service,宣告 CA、伺服器名稱以及可選的用戶端憑證;控制器狀態是設定是否生效的主要回饋。實施時限制 Secret 和跨命名空間授權,核對實作支援的 API 版本與 Route 類型。用灰度 Service 驗證憑證 SAN、CA、輪換、握手錯誤和連線重建,禁止把跳過驗證當作修復。策略無效或憑證異常時拒絕不安全連線、告警並按預案回滾。
常見錯誤
- 只設定用戶端到 Gateway 的憑證,忘記上游 TLS origination。
- 把
targetRef指向錯誤資源,或假設任何控制器都支援相同 API 版本。 - 只匯入 CA,沒有驗證後端憑證的伺服器名稱。
- 用跳過憑證驗證或明文回退掩蓋 CA、SAN 或輪換問題。
- 允許跨命名空間讀取 Secret,卻沒有明確授權和稽核邊界。
- 資源建立成功就認為策略生效,忽略 status、握手指標和控制器事件。
追問及應對
BackendTLSPolicy 與用戶端 TLS 終止有什麼關係?
用戶端 TLS 終止保護瀏覽器或呼叫方到 Gateway 的鏈路;BackendTLSPolicy 保護 Gateway 到 Service 的鏈路。兩段可以使用不同憑證和信任域,必須分別驗證身分與輪換。
後端憑證名稱不匹配怎麼辦?
讓後端憑證為 Gateway 連線時使用的伺服器名稱簽發,或調整策略中的 hostname 與憑證 SAN 一致。不要關閉名稱驗證;先檢查 DNS、SNI、Service 名稱和憑證鏈。
策略變成無效狀態時如何發布?
把無效狀態接入告警和發布閘門,停止擴大灰度,檢查引用、CA、Secret 權限和實作相容性。只有狀態恢復為有效並完成握手驗證後才繼續;緊急回滾應回到上一份已驗證策略。