管理員應該在 kubernetes 網路內部強制執行 HTTPS,還是僅針對外部流量(透過入口)?

管理員應該在 kubernetes 網路內部強制執行 HTTPS,還是僅針對外部流量(透過入口)?

在微服務場景中,每個 web-api 容器都應該透過 HTTPS 為其提供服務,或者可以在內部透過 HTTP 工作並為所有入口配置憑證並重定向到容器的連接埠 80 嗎?

我認為最簡單的方法是僅保護外部流量,因為要設定 Asp.Net Core WebAPI 以透過 HTTPS(例如)為自己提供服務(kestrel),您必須將憑證安裝在磁碟區中並提供憑證密碼。這有點複雜。

最佳實踐是什麼?

答案1

這取決於要求和資源,如果您有本地部署或裸機等。

沒有要求確保流量安全

如果沒有關於保護叢集內客戶端流量的要求,您可以終止 PodSSL上的用戶端連線並在 Pod 之間ingress-controller使用。HTTP

安全要求

如果需要保護到達目標 Pod 的客戶端流量,可以透過兩種方式取得。

  • L3 LoadBalancer節點連接埠,配置有SSL 通行Ingress
  • 如果流量需要使用SSL,但不需要SSL直接發送到指定的地方Pod,那麼透過配置來實現會更容易伊斯蒂奧網格與mTLS.此選項將允許您使用 HTTP 標頭路由流量,並且無需手動管理憑證。請檢查了解更多。

由於最佳實踐總是盡可能安全,因此始終建議使用安全連接。儘管如此,有些場景並不需要這樣做。

答案2

如果您的叢集在雲端中運行並使用外部雲端平衡器,您的入口和 Pod 可能位於不同的機器或資料中心上。在這種情況下,您確實應該從入口到 Pod 強制實作 TLS。

無論如何,負載平衡器和您的叢集應該位於同一個(希望受到限制的)VPC 中。

答案3

它也取決於您要防範的攻擊媒介。

如果您擔心有人可以嗅探您的 Kubernetes 節點之間的流量,那麼您可以考慮使用支援加密的網路外掛程式 (CNI),例如 WeaveNet,或者您可以使用 Wireguard 或 OpenVPN 將所有節點放置在 VPN 網路上。

如果您想保護叢集上的服務免受彼此的影響,您應該考慮使用 Istio 之類的工具來加密 Pod 之間的流量。

相關內容