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 服务是否已成功供应到其中一个新子网。 如果服务配置成功,则 “事件”部分不会显示 WarningError 事件。

    oc describe svc <kubernetes_lb_service_name>