VPC 叢集: Kubernetes LoadBalancer 服務為何在沒有 IP 的情況下失敗?

虛擬私有雲

您透過在 VPC 叢集中建立 Kubernetes LoadBalancer 服務來公開您的應用程式,但該服務無法完成配置,因為您的子網中沒有可用的 IP 位址。

您透過在 VPC 叢集中建立 Kubernetes LoadBalancer 服務,將您的應用程式對外公開。

當您執行 oc describe svc <kubernetes_lb_service_name>`` 時,會在「 事件 」區段中看到類似以下其中一則的警告訊息:

The subnet with ID(s) '<subnet_id>' has insufficient available ipv4 addresses.

當您在叢集裡建立 Kubernetes LoadBalancer 服務時,會在 VPC 自動建立 VPC 負載平衡器。

VPC 負載平衡器將 Kubernetes LoadBalancer 服務的浮動 IP 位址置於您可以借以存取應用程式的主機名稱後面。

在 VPC 叢集裡,將從相同子網路中為工作者節點和服務指派 IP 位址。 子網路之間的資料流量遞送已啟用,因此工作者節點或服務使用了某個區域的子網路中的所有 IP 位址時,您仍可以在該區域中建立新的工作者節點或服務,因為它們會使用其他區域的子網路中的 IP 位址。 然而,若所有子網上的 IP 位址均已被佔用,則無法成功配置新的 Kubernetes LoadBalancer 服務。

建立 VPC 子網後,您將無法調整其大小或變更其 IP 範圍。

您必須改為在一個以上具有工作者節點的區域中建立更大的 VPC 子網路。 接著,您便會使用較大的子網來建立一個新的工作執行緒池。

  1. 在同一 VPC 中,且位於您的叢集具有工作節點的一個或多個區域內,建立一個新的 VPC 子網。 確保建立可以同時支援您計劃在叢集裡建立的工作者節點和服務數的子網路。 每個 VPC 子網路的預設 CIDR 大小為 /24,最多可支援 253 個工作者節點和服務。 若要檢查您的叢集的 VPC 和區域,請執行 ibmcloud oc cluster get --cluster <cluster_name_or_ID>

  2. 在叢集裡建立新的工作者節點儲存區。

    ibmcloud oc worker-pool create vpc-gen2 --name <name> --cluster <cluster_name_or_ID> --flavor <flavor> --size-per-zone <number_of_worker_nodes> --label <key>=<value>
    
  3. 請使用您在上一步驟中建立的新子網段的 ID,將這些區域新增至工作彙集。 請針對每個區域和子網重複執行此指令。

    ibmcloud oc zone add vpc-gen2 --zone <zone> --subnet-id <subnet_id> --cluster <cluster_name_or_ID> --worker-pool <worker_pool_name>
    
  4. 幾分鐘後,驗證 LoadBalancer 服務是否已順利佈建到其中一個新子網路。 若服務已成功啟用,則「事件」區段中不會顯示任何「Warning」或「Error」事件。

    oc describe svc <kubernetes_lb_service_name>