Engineering · 1 min read
Ingress 憑證終結:在對外入口把 TLS 收掉
叢集的大門會把 TLS 收掉:接住加密的 HTTPS、就地解密,再用純 HTTP 轉進內網。只有單向,而且伺服器憑證是自動化的。
先鋪個底:這裡的服務跑在 Kubernetes(一個管理大量小服務的平台)上,前面有一個對外入口(ingress),也就是整個叢集的大門,負責接住外部的網頁流量、再轉給對的服務。
這道大門會把 TLS 收掉(terminate):它接住訪客加密的 HTTPS,就地解密,再用純 HTTP 轉給後面的服務(例如 8000 埠)。叢集內網被當成可信任的,所以過了大門之後的流量,通常就不加密了。
它有兩個定義性特徵:
- 只有單向 TLS。 大門出示一張伺服器憑證,不要求訪客也拿一張。
- 這張伺服器憑證是自動化的。 一個小小的設定,就把工作交給一個憑證自動化工具:它去跟 CA 申請憑證、幫你保管、並在到期前自動續期。大門讀了它就能提供 HTTPS,全程不用人工手動換。
要抓住的是方向:這保護的是進入服務的流量。它對服務對外的連線隻字未提。
這次遷移裡: 對外入口的 HTTPS 本來就是這樣設好的,而這次 Kafka 的工作完全沒動到它。這正是兩個「SSL」指向相反方向的經典誤會:大門在入口處把加密收掉,Kafka 則在出去的路上把加密加上。
「服務已經有 SSL」和「服務需要 SSL」可以同時成立,因為它們指的是相反的方向。
參考來源
- https://cert-manager.io/docs/usage/ingress/
- https://kindatechnical.com/kubernetes-fundamentals/lesson-54-tls-termination-securing-ingress-with-certificates-and-cert-manager.html
延伸閱讀: 大門走的是單向 TLS(跟 Kafka 的雙向 TLS 方向相反),而它那張自動化憑證的派送方式,就跟憑證送進 Pod裡的一樣。回到總覽:一張遷移單背後的兩個 SSL。