選擇應用程式曝光服務
使用 IBM Cloud® Kubernetes Service,您可以讓應用程式進行公開或私下地存取,以管理叢集內及外部網路。
若要快速開始使用應用程式網路,請遵循此決策樹狀結構,然後按一下選項以查看其設定文件:
瞭解透過 Kubernetes 服務探索對應用程式的負載平衡
Kubernetes 服務探索使用網路服務及本端 Kubernetes Proxy,以提供具有網路連線的應用程式。
所有已部署至工作者節點的 Pod 會獲指派 172.30.0.0/16 範圍中的專用 IP 位址,並且只在工作者節點之間遞送。 為了避免衝突,請勿在與工作者節點進行通訊的任何節點上使用此 IP 範圍。 使用專用 IP 位址,工作者節點及 Pod 可以在專用網路上安全地進行通訊。 不過,Pod 損毀或需要重建工作者節點時,會指派新的專用 IP 位址。
您可以使用內建的 Kubernetes 服務探索特性將應用程式公開為服務,而不是嘗試追蹤對必須具有高可用性的應用程式的專用 IP 位址變更。 Kubernetes 服務會將一組 Pod 分組並提供這些 Pod 的網路連線。 服務會選取要透過標籤將資料流量遞送至其中的目標 Pod。
服務提供應用程式 Pod 與叢集裡其他服務之間的連線功能,而不會公開每個 Pod 的實際專用 IP 位址。 服務會獲指派只能在叢集內部存取的叢集內 IP 位址 clusterIP。 此 IP 位址已關聯於服務的整個有效期限,而且不會在服務存在時變更。 服務會獲指派 172.21.0.0/16 範圍內其中一個 65,000 IP 的 IP。
為了避免衝突,請勿在與工作者節點進行通訊的任何節點上使用此 IP 範圍。 也會建立服務的 DNS 查閱項目,並將其儲存在叢集的 kube-dns 元件中。 DNS 項目包含服務的名稱、已建立服務的名稱空間,以及已指派叢集內 IP 位址的鏈結。
如果您計劃透過 IBM Cloud 或 VPN 服務將叢集連接到本地網路,可能會與用於 Pod 的預設 172.30.0.0/16 範圍,以及用於服務的 172.21.0.0/16 範圍發生子網衝突。 在建立叢集時 ,您可以透過在 --pod-subnet 選項中為 Pod 指定自訂子網 CIDR,以及在 --service-subnet 選項中為服務指定自訂子網 CIDR,來避免子網衝突。
為了提供所有 TCP 和 UDP 服務網路流量的基本負載平衡,一個本機 Kubernetes 網路代理,kube-proxy,在 kube-system 名稱空間中的每個 Worker 節點上以守護程式的方式執行。kube-proxy 使用 Iptables 規則 ( Linux 核心功能),將請求平均地導向到服務背後的 pod,而不受限於 pod 在群集內的 IP 位址以及它們所部署的 Worker
節點。
例如,叢集內部的應用程式可以使用服務的叢集內 IP 或將要求傳送至服務名稱,來存取受叢集服務保護的 Pod。 當您使用服務的名稱時,kube-proxy 會查閱叢集 DNS 提供者中的名稱,並將要求遞送至服務的叢集內 IP 位址。
如果您使用同時提供內部叢集 IP 位址及外部 IP 位址的服務,則叢集外的用戶端可以將要求傳送至服務的外部公用或專用 IP 位址。kube-proxy 會將要求轉遞至服務的叢集內 IP 位址,並在服務背後的應用程式 Pod 之間進行負載平衡。
瞭解 Kubernetes 服務類型
Kubernetes 支援四種基本類型的網路服務:ClusterIP, NodePort, LoadBalancer,和 Ingress。ClusterIP 服務可讓您的應用程式在內部存取,僅允許群集中的 Pod 之間進行通訊。NodePort, LoadBalancer,和 Ingress 服務可讓您的應用程式從公共網際網路或私人網路進行外部存取。
下表比較每種網路服務類型的特性。
| 特徵 | ClusterIP | NodePort | LoadBalancer(標準 - NLB) | LoadBalancer(VPC 負載平衡器) | Ingress |
|---|---|---|---|---|---|
| 標準叢集 | 是 | 是 | 是 | 是 | 是 |
| 可外部存取 | 是 | 是 | 是 | 是 | |
| 外部主機名稱 | 是 | 是 | 是 | ||
| 穩定外部 IP | 是 | 是 | |||
| HTTP(S) 負載平衡 | 是 * | 是 * | 是 | ||
| TLS 終止 | 是 | ||||
| 自訂遞送規則 | 是 | ||||
| 每個服務有多個應用程式 | 是 |
* 用於 HTTPS 負載平衡的 SSL 證書由 ibmcloud ks nlb-dns 指令提供。 在標準叢集裡,僅公用 NLB 支援這些指令。
ClusterIP
您只能在專用網路上將應用程式公開為 ClusterIP 服務。 ClusterIP 服務提供只能由叢集內的其他 Pod 及服務存取的叢集內 IP 位址。 未建立應用程式的外部
IP 位址。 若要存取受叢集服務保護的 Pod,叢集裡的其他應用程式可以使用服務的叢集內 IP 位址,或使用服務名稱來傳送要求。 當要求到達服務時,服務會將要求平均轉遞至 Pod,並與 Pod 的叢集內 IP 位址及其部署至的工作者節點無關。 請注意,若您未在服務的 YAML 配置檔案中指定 type ,系統預設會建立 ClusterIP 類型。
NodePort
當您透過 NodePort 服務來公開應用程式時,系統會為該服務指派一個位於 30000 至 32767 範圍內的 NodePort,以及一個內部叢集 IP 位址。 若要從叢集外部存取此服務,請使用任一工作節點的公開或私有 IP 位址,並搭配 NodePort,格式如下:<IP_address>:<nodeport>。
不過,工作者節點的公用及專用 IP 位址不是永久性的。 移除或重建工作者節點時,會將新的公用及新的專用 IP 位址指派給工作者節點。
NodePort 適用於測試公用或專用存取,或僅提供短時間的存取。 附註: 因為 VPC 叢集裡的工作者節點沒有公用 IP 位址,所以僅當您連接至專用 VPC 網路 (例如透過 VPN 連線) 時,才能透過 NodePort 存取應用程式。
LoadBalancer
根據叢集的基礎架構提供者,LoadBalancer 服務類型的實作方式有所不同。
標準叢集中的 LoadBalancer 服務
經典基礎架構
網路負載平衡器(NLB)。 每個標準叢集都會佈建四個可攜式公用 IP 位址及四個可攜式專用 IP 位址,可用來建立應用程式的第 4 層 TCP/UDP 網路負載平衡器 (NLB)。 您可以公開應用程式所需的任何埠來自訂 NLB。 分配給 NLB 的可攜式公網 IP 位址和私有 IP 位址是永久性的,即使在叢集中重新建立工作節點時也不會改變。 您可以建立應用程式的子網域,以在 DNS 項目中登錄公用 NLB IP 位址。 您也可以在每個子網域的 NLB IP 上啟用性能檢查監視器。
VPC 叢集裡的 LoadBalancer 服務
虛擬私有雲
Load Balancer for VPC。 為叢集裡的應用程式建立 Kubernetes LoadBalancer 服務時,將在叢集外部的 VPC 中自動建立第 7 層 VPC 負載平衡器。 VPC 負載平衡器是多區域負載平衡器,透過在工作者節點上自動開啟的專用 NodePort 來遞送應用程式的要求。 依預設,還會使用可用於存取應用程式的主機名稱來建立負載平衡器。
Ingress
使用 Ingress 應用程式負載平衡器 (ALB) 設定遞送,以公開叢集裡的多個應用程式。 ALB 使用安全且唯一的公用或專用進入點(Ingress 子網域),將送入要求遞送至應用程式。 您可以使用一個子網域,將叢集裡的多個應用程式公開為服務。 Ingress 包含三個元件:
- Ingress 資源會定義如何遞送及負載平衡應用程式送入要求的規則。
- ALB 會接聽送入的 HTTP、HTTPS 或 TCP 服務要求。 它會根據您在 Ingress 資源中所定義的規則,在應用程式的 Pod 之間轉遞要求。
- 用於標準叢集的多區域負載平衡器 (MZLB) 或用於 VPC 叢集的 VPC 負載平衡器可處理對應用程式的所有送入要求,並在各個區域中的 ALB 之間對要求進行負載平衡。 它還支援對公用 Ingress IP 位址進行性能檢查。
規劃公用外部負載平衡
將叢集裡的應用程式以公用方式公開至網際網路。
在標準叢集裡,可以將工作者節點連接至公用 VLAN。 公用 VLAN 會判定指派給每一個工作者節點的公用 IP 位址,以將公用網路介面提供給每一個工作者節點。 公用網路服務使用公用 IP 位址及選用公用 URL 來提供應用程式,以連接至此公用網路介面。
在 VPC 叢集裡,工作者節點僅連接至專用 VPC 子網路。 但是,建立公用網路服務時,會自動建立 VPC 負載平衡器。 VPC 負載平衡器可以藉由向應用程式提供公用 URL,將公用要求遞送到應用程式。 以公用方式公開應用程式時,具有公用 URL 的任何人都可以將要求傳送至應用程式。
公開應用程式時,具有您為應用程式設定的公用服務 IP 位址或 URL 的任何人都可以將要求傳送至應用程式。 因此,請儘可能公開最少的應用程式。 僅當應用程式準備好接受來自外部 Web 用戶端或使用者的資料流量時,才向大眾公開應用程式。
工作者節點的公用網路介面受到預先定義的 Calico 網路原則設定所保護,這些設定是在建立叢集期間配置於每個工作者節點上。 依預設,所有工作者節點都允許所有出埠網路資料流量。 除了少數埠之外,入埠網路資料流量會遭到封鎖。 開啟這些埠讓 IBM 可以監視網路資料流量,並自動安裝 Kubernetes 主節點的安全更新項目,以及可以建立與 NodePort、LoadBalancer 及 Ingress 服務的連線。 如需這些原則的相關資訊,包括如何修改它們,請參閱網路原則。
選擇用於標準叢集的部署模式
若要在經典叢集中將應用程式對網際網路公開提供,請選擇使用公開的 NodePort, LoadBalancer, 或 Ingress 服務的負載平衡部署模式。 下表說明每個可能的部署模式、使用原因及設定方式。 如需這些部署模式所使用網路服務的基本資訊,請參閱瞭解 Kubernetes 服務類型。
NLB 1.0 版
NLB 2.0 版
Istio + NLB 子網域
- 負載平衡方法:透過子網域公開應用程式,並使用 Istio 路由規則的基本負載平衡方式。
- 用例:實作 Istio 的路由後規則,例如針對同一應用程式微服務不同版本的規則,並透過公共子網域公開由 Istio 管理的應用程式。
- 實施:
- 安裝受管理 Istio 附加程式。
- 請在 Istio 服務網格中包括您的應用程式。
- 使用子網域登錄預設 Istio 負載平衡器。
Ingress ALB
- 負載平衡方法:HTTPS 負載平衡,該方法透過子網域提供應用程式,並採用自訂路由規則。
- 使用案例:為多個應用程式實作自訂路由規則及 SSL 終端處理。
- 實施:
- 建立公用 ALB 的 Ingress 服務。
- 使用註釋來自訂 ALB 遞送規則。
選擇用於 VPC 叢集的部署模式
若要在 VPC 叢集中將應用程式對網際網路公開,請選擇使用公共 LoadBalancer 或 Ingress 服務的負載平衡部署模式。 下表說明每個可能的部署模式、使用原因及設定方式。 如需這些部署模式所使用網路服務的基本資訊,請參閱瞭解 Kubernetes 服務類型。
VPC 負載平衡器
- 負載平衡方法:透過主機名公開應用程式的基礎負載平衡
- 使用案例:透過 VPC 負載平衡器所指派的主機名稱,快速將一個應用程式對外公開。
- 實作: 在叢集裡 建立公用
LoadBalancer服務。 系統會在您的 VPC 中自動建立一個 VPC 負載平衡器,該負載平衡器會為您的應用程式所使用的LoadBalancer服務指派一個主機名稱。
Istio
- 負載平衡方法:透過主機名公開應用程式,並使用 Istio 路由規則的基本負載平衡
- 用例:實作 Istio 的路由後規則,例如針對同一應用程式微服務不同版本的規則,並透過公開主機名提供由 Istio 管理的應用程式。
- 實施: 1. 安裝受管理 Istio 附加程式。 2. 請在 Istio 服務網格中包括您的應用程式。 3. 使用主機名稱登錄預設 Istio 負載平衡器。
Ingress ALB
- 負載平衡方法:HTTPS 負載平衡,該方法透過子網域提供應用程式,並採用自訂路由規則。
- 使用案例:為多個應用程式實作自訂路由規則及 SSL 終端處理。
- 實施:
- 建立公用 ALB 的 Ingress 服務。
- 使用註釋來自訂 ALB 遞送規則。
規劃專用外部負載平衡
只將叢集裡的應用程式私下公開至專用網路。
當您在 IBM Cloud Kubernetes Service 的 Kubernetes 叢集裡部署應用程式時,建議您只讓位於與叢集相同專用網路上的使用者和服務存取應用程式。 專用負載平衡適用於讓叢集外的要求使用您的應用程式,而不將應用程式公開給一般大眾使用。 您也可以先使用專用負載平衡來測試應用程式的存取、要求遞送及其他配置,稍後再使用公用網路服務將應用程式公開給大眾使用。
舉例來說,假設您為應用程式建立專用負載平衡器。 可以透過下列方式存取此專用負載平衡器:
- 該相同叢集裡的任何 Pod。
- 相同 IBM Cloud 帳戶中任何叢集的任何 Pod。
- 透過 VPN 連線來連線到負載平衡器 IP 所在子網路的任何系統(如果您不在 IBM Cloud 帳戶中,但仍在公司防火牆後)。
- 如果您屬於不同的 IBM Cloud 帳戶,則為透過 VPN 連線連至負載平衡器 IP 所在的子網路的任何系統
- 在標準叢集裡連接至相同 IBM Cloud 帳戶中任何專用 VLAN 的任何系統(如果已啟用了 VRF 或 VLAN Spanning)。
- 在 VPC 叢集裡:
- 若您允許 VPC 子網之間進行通訊,則同一 VPC 內的任何系統皆可進行通訊。
- 若您允許 VPC 之間的流量傳輸,則任何可存取該叢集所處 VPC 的系統,
選擇用於標準叢集的部署模式
若要在僅限傳統叢集的環境中,讓應用程式僅透過私有網路提供服務,請根據叢集的 VLAN 設定,選擇適當的負載平衡部署模式:
在公用和專用 VLAN 設定中設定專用負載平衡
當您的工作者節點同時連接至公用及專用 VLAN 時,您可以藉由建立專用 NodePort、LoadBalancer 或 Ingress 服務,讓您的應用程式只能從專用網路存取。 然後,您可以建立 Calico 原則來封鎖服務的公用資料流量。
預先定義的 Calico 網路原則設定 會保護工作者節點的公用網路介面,並在建立叢集期間於每個工作者節點上配置。 依預設,所有工作者節點都允許所有出埠網路資料流量。 除了少數埠之外,入埠網路資料流量會遭到封鎖。 這些埠可讓 IBM 監控網路流量,並自動為 Kubernetes 主節點安裝安全性更新,同時也能建立連線至 NodePort,、LoadBalancer, 以及 Ingress 服務。
因為預設 Calico 網路原則容許入埠公用資料流量進入這些服務,所以您可以建立 Calico 原則,改為封鎖服務的所有公用資料流量。 例如,NodePort 服務會在工作者節點的專用及公用 IP 位址上開啟工作者節點上的埠。 具有可攜式專用 IP 位址的 NLB 服務會在每個工作者節點上開啟一個公用 NodePort。 您必須建立 Calico DNAT 前網路原則,以封鎖公用 NodePort。
檢閱專用網路的負載平衡部署型樣。
- NodePort
- 負載平衡方法:工作節點上用於透過該節點的私有 IP 位址公開應用程式的埠
- 使用情境:測試某個應用程式的私有存取權限,或僅在短暫時間內提供存取權限。
- 實作: 建立 NodePort 服務。 NodePort 服務會透過工作者節點的專用及公用 IP 位址在工作者節點上開啟埠。 您必須使用 Calico DNAT 前網路原則來封鎖對公用 NodePort 的資料流量。
- NLB 1.0 版
- 負載平衡方法:透過私有 IP 位址提供應用程式存取的基本負載平衡。
- 使用案例:快速將一個應用程式連接到具有私有 IP 位址的私有網路。
- 實施: 1. 建立專用 NLB 服務。 具有可攜式專用 IP 位址的 NLB 仍然會在每個工作者節點上開啟一個公用節點埠。 2. 建立 Calico DNAT 前網路原則來封鎖對公用 NodePort 的資料流量。
- NLB 2.0 版
- 負載平衡方式:DSR 負載平衡,透過私有 IP 位址對外提供該應用程式。
- 用例:將可能接收大量流量的應用程式對外公開至具有 IP 位址的私有網路。
- 實施: 1. 完成必要條件。 2. 在 單一 或 多區域 叢集裡建立專用 NLB 2.0。 3. 具有可攜式專用 IP 位址的 NLB 仍然會在每個工作者節點上開啟一個公用節點埠。 建立 Calico DNAT 前網路原則來封鎖對公用 NodePort 的資料流量。
- Ingress ALB
- 負載平衡方法:HTTPS 負載平衡,該方法透過子網域提供應用程式,並採用自訂路由規則。
- 使用案例:為多個應用程式實作自訂路由規則及 SSL 終端處理。
- 實施: 1. 停用公用 ALB。 2. 啟用專用 ALB,並建立 Ingress 資源。 3. 使用註釋來自訂 ALB 遞送規則。 4. 具有可攜式專用 IP 位址的 NLB 仍然會在每個工作者節點上開啟一個公用節點埠。 建立 Calico DNAT 前網路原則來封鎖對公用 NodePort 的資料流量。
設定僅限專用 VLAN 設定的專用負載平衡
當您的工作者節點連接至僅限專用 VLAN 時,您可以藉由建立專用 NodePort、LoadBalancer 或 Ingress 服務,讓您的應用程式只能從專用網路進行外部存取。
如果您的叢集僅連接到私有 VLAN,且您啟用主節點與工作節點透過僅限私有網路的服務端點進行通訊,則無法自動將您的應用程式對外公開至私有網路。 您必須設定一台閘道設備(例如 VRA(Vyatta)),使其充當防火牆,用以封鎖或允許流量。 因為您的工作者節點未連接至公用 VLAN,所以不會將任何公用資料流量遞送至 NodePort、LoadBalancer 或 Ingress 服務。 不過,您必須在閘道應用裝置防火牆中開啟必要埠及 IP 位址,以允許對這些服務的入埠資料流量。
請參閱以下適用於私有網路的負載平衡部署模式:
- NodePort
- 負載平衡方法:工作節點上用於透過該節點的私有 IP 位址公開應用程式的埠
- 使用情境:測試某個應用程式的私有存取權限,或僅在短暫時間內提供存取權限。
- 實施: 1. 建立 NodePort 服務。 2. 在您的私有防火牆中,請針對所有工作節點的私有 IP 位址,開啟您在部署服務時所設定的端口,以允許相關流量通過。 若要尋找埠,請執行
kubectl get svc。 該埠位於30000-32767範圍內。 - NLB 1.0 版
- 負載平衡方法:透過私有 IP 位址提供應用程式存取的基本負載平衡。
- 使用案例:快速將一個應用程式連接到具有私有 IP 位址的私有網路。
- 實施: 1. 建立專用 NLB 服務。 2. 在您的專用防火牆中,開啟您在將服務部署至 NLB 的專用 IP 位址時所配置的埠。
- NLB 2.0 版
- 負載平衡方式:DSR 負載平衡,透過私有 IP 位址對外提供該應用程式。
- 用例:將可能接收大量流量的應用程式對外公開至具有 IP 位址的私有網路。
- 實施: 1. 建立專用 NLB 服務。 2. 在您的專用防火牆中,開啟您在將服務部署至 NLB 的專用 IP 位址時所配置的埠。
- Ingress ALB
- 負載平衡方法:HTTPS 負載平衡,該方法透過子網域提供應用程式,並採用自訂路由規則。
- 使用案例:為多個應用程式實作自訂路由規則及 SSL 終端處理。
- 實施: 1. 設定一個 可在私有網路中使用的 DNS 服務。 2. 啟用專用 ALB,並建立 Ingress 資源。 3. 在您的專用防火牆中,針對專用 ALB 的 IP 位址,開啟埠 80(適用於 HTTP)或埠 443(適用於 HTTPS)。 4. 使用註釋來自訂 ALB 遞送規則。
選擇用於 VPC 叢集的部署模式
藉由建立專用 NodePort、LoadBalancer 或 Ingress 服務,使應用程式只能從專用網路進行存取。
請參閱以下適用於 VPC 叢集中私有應用程式網路的負載平衡部署模式:
- NodePort
- 負載平衡方式:工作節點上用於透過該節點的私有 IP 位址公開應用程式的埠。
- 使用情境:測試某個應用程式的私有存取權限,或僅在短暫時間內提供存取權限。 注意:您必須先連線至您的私有 VPC 網路(例如透過 VPN 連線),才能透過 NodePort 存取應用程式。
- 實作: 建立專用 NodePort 服務。
- VPC 應用程式負載平衡器
- 負載平衡方法:透過私有主機名提供應用程式存取的基本負載平衡。
- 使用案例:透過 VPC 應用程式負載平衡器所指派的私有主機名稱,快速將一個應用程式對外公開至私有網路。
- 實作: 在叢集裡 建立專用
LoadBalancer服務。 系統會在您的 VPC 中自動建立一個多區域 VPC 應用程式負載平衡器,該負載平衡器會為您的應用程式所使用的LoadBalancer服務指派一個主機名稱。 - Ingress ALB
- 負載平衡方法:HTTPS 負載平衡,此方法會透過主機名公開應用程式,並使用自訂路由規則。
- 使用案例:為多個應用程式實作自訂路由規則及 SSL 終端處理。
- 實施: 1. 啟用專用 ALB,建立子網域以向 DNS 項目登錄 ALB,並建立 Ingress 資源。 2. 使用註釋來自訂 ALB 遞送規則。