第 4 層和第 7 層負載平衡
Kubernetes 支援兩種方式的負載平衡:第 4 層負載平衡和第 7 層負載平衡。
第 4 層負載平衡器
第 4 層負載平衡器(或外部負載平衡器)將流量轉發到 Nodeports。第 4 層負載平衡器允許您轉發 HTTP 和 TCP 流量。
通常,第 4 層負載平衡器由底層雲端提供者支援,因此當您在裸機伺服器和 vSphere 叢集上部署 RKE 叢集時,不支援第 4 層負載平衡器。但是,可以使用單一全域管理的 config-map 在 NGINX 或第三方 Ingress 上公開服務。
可以使用非雲端負載平衡器(例如 MetalLB)部署叢集。但是,該用例比雲端提供者支援的第 4 層負載平衡器更進階,並且無法在 Rancher 或 RKE 中設定。
第 4 層負載平衡的支援
對第 4 層負載平衡器的支援因底層雲端提供者而異。
| 叢集部署 | 第 4 層負載平衡器支援 |
|---|---|
| Amazon EKS | 由 AWS 雲端提供者支援 |
| Google GKE | 由 GCE 雲端提供者支援 |
| Azure AKS | 由 Azure 雲端提供者支援 |
| RKE on EC2 | 由 AWS 雲端提供者支援 |
| RKE on DigitalOcean | 有限的 NGINX 或第三方 Ingress* |
| RKE on vSphere | 有限的 NGINX 或第三方 Ingress* |
| RKE on Custom Hosts (例如裸機伺服器) | 有限的 NGINX 或第三方 Ingress* |
| 第三方 MetalLB | 有限的 NGINX 或第三方 Ingress* |
* 可以透過單一全域管理的 config-map 公開服務。
第 7 層負載平衡器
第 7 層負載平衡器(或 Ingress 控制器)支援基於主機和路徑的負載平衡以及 SSL 終止。第 7 層負載平衡器僅轉發 HTTP 和 HTTPS 流量,因此僅監聽連接埠 80 和 443。Amazon 和 Google 等雲端提供者支援第 7 層負載平衡器。此外,RKE 叢集部署 Nginx Ingress Controller。
第 7 層負載平衡的支援
對第 7 層負載平衡器的支援因底層雲端提供者而異。
| 叢集部署 | 第 7 層負載平衡器支援 |
|---|---|
| Amazon EKS | 由 AWS 雲端提供者支援 |
| Google GKE | 由 GKE 雲端提供者支援 |
| Azure AKS | 不支援 |
| RKE on EC2 | Nginx Ingress Controller |
| RKE on DigitalOcean | Nginx Ingress Controller |
| RKE on vSphere | Nginx Ingress Controller |
| RKE on Custom Hosts (例如裸機伺服器) | Nginx Ingress Controller |
第 7 層負載平衡器中的主機名稱
一些雲端管理的第 7 層負載平衡器(例如 AWS 上的 ALB Ingress 控制器)為 Ingress 規則公開 DNS 位址。您需要將(透過 CNAME)您的網域名稱對應到第 7 層負載平衡器產生的 DNS 位址。
其他第 7 層負載平衡器(例如 Google Load Balancer 或 Nginx Ingress Controller)直接公開一個或多個 IP 位址。Google Load Balancer 提供單一可路由的 IP 位址。Nginx Ingress Controller 公開所有執行 Nginx Ingress Controller 的節點的外部 IP。您可以執行以下任一操作:
- 設定您自己的 DNS 以將(透過 A 記錄)您的網域名稱對應到第 7 層負載平衡器公開的 IP 位址。
- 要求 Rancher 為您的 Ingress 規則產生 xip.io 主機名稱。Rancher 將取得您公開的 IP 之一(例如
a.b.c.d),並產生主機名稱<ingressname>.<namespace>.a.b.c.d.xip.io。
使用 xip.io 的好處是,在您建立 Ingress 規則後,您可以立即取得可運作的進入點 URL。另一方面,設定您自己的網域名稱需要您設定 DNS 伺服器並等待 DNS 傳播。