在微服務場景中,每個 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 之間的流量。