IBM Cloud Docs
配置 VPC 子网

配置 VPC 子网

虚拟私有云

通过向 IBM Cloud® Kubernetes Service VPC 集群添加子网,更改可用的可移植公共或私有 IP 地址池。

本页内容仅针对 VPC 群集。 有关经典集群的信息,请参阅 为经典集群配置子网和 IP 地址

IBM Cloud Kubernetes Service 中 VPC 联网的概述

了解 IBM Cloud Kubernetes Service 集群中 VPC 网络的基本概念。

子网

首次创建 VPC 群集之前,必须在要部署工作者节点的每个区域中 创建一个 VPC 子网。 VPC 子网是一个指定的私有 IP 地址范围(CIDR 块),可将一组工作节点和 pod 配置为连接到同一条物理线路上。

创建集群时,只能为每个专区指定一个现有 VPC 子网。 在集群中添加的每个工作程序节点都将使用该专区中 VPC 子网中的专用 IP 地址进行部署。 供应工作程序节点后,工作程序节点 IP 地址会在 reboot 操作后持续使用,但会在 replaceupdate 操作后更改。

请勿在集群创建期间或在专区中添加工作程序节点时删除附加到集群的子网。 如果删除集群使用的 VPC 子网,那么使用子网中的 IP 地址的任何负载均衡器都可能迂到问题,并且您可能无法创建新的负载均衡器。

我的 VPC 子网需要多少 IP 地址?

当您 创建 VPC 子网时,请确保为集群创建具有足够 IP 地址的子网,例如 256。 以后不能更改 VPC 子网的 IP 地址数。

请记住以下 IP 地址预留。

  • 缺省情况下,5 IP 地址是来自每个子网的 由 VPC 保留
  • 1 虚拟专用端点(VPE)网关 需要来自集群具有工作程序节点的每个专区中的一个子网的 IP 地址。
  • 集群中的每个工作程序节点都需要 1 IP 地址。
  • 每次更新或更换工作程序节点时,都需要 1 IP 地址。 这些 IP 地址最终将被回收并可供复用。
  • 每次创建公共或专用负载均衡器时,都会使用 2 IP 地址。 如果您具有多专区集群,那么这些 2 IP 地址将跨专区分布,因此子网可能未保留 IP 地址。
  • 为集群设置的其他网络资源 (例如 VPNaaS 或 LBaaS 自动缩放) 可能需要其他 IP 地址或具有其他 服务限制。 例如,LBaaS 自动缩放可能会扩展至每个负载均衡器 16 个 IP 地址。

我可以将哪些 IP 范围用于 VPC 子网?

VPC 子网的缺省 IP 地址范围为 10.0.0.0- 10.255.255.255。 有关每个 VPC 区域的 IP 地址范围列表,请参阅 VPC 默认地址前缀

如果需要使用定制范围子网创建集群,请参阅 定制地址前缀 指南。 但是,如果对工作程序节点使用定制范围子网,那么必须确保工作程序节点子网的 IP 范围与集群的 pod 子网不重叠。 根据集群创建期间的子网选项以及集群的基础结构类型,pod 子网会有所不同:

  • 如果在集群创建期间在 --pod-subnet 选项中指定了您自己的 pod 子网,那么会为此 pod 分配此范围内的 IP 地址。
  • 如果在集群创建期间未指定定制 pod 子网,那么集群将使用缺省 pod 子网。 在 VPC 中创建的第一个集群中,缺省 pod 子网为 172.17.0.0/18。 在该 VPC 中创建的第二个集群中,缺省 pod 子网为 172.17.64.0/18。 在每个后续集群中,pod 子网范围是下一个可用的非重叠 /18 子网。

如何为经典基础架构访问创建子网?

如果在创建 VPC 时启用经典访问,那么 经典访问缺省地址前缀 会自动确定您创建的任何子网的 IP 范围。 但是,经典访问 VPC 子网的缺省 IP 范围与 IBM Cloud Kubernetes Service 控制平面的子网冲突。 相反,您必须 在不使用自动缺省地址前缀的情况下创建 VPC,然后在集群的这些范围内创建您自己的地址前缀和子网

能否为集群中的 pod 和服务指定子网?

如果计划通过 IBM Cloud Direct Link 或 VPN 服务将集群连接到本地网络,那么可以通过指定用于为 pod 提供专用 IP 地址的定制子网 CIDR 以及用于为服务提供专用 IP 地址的定制子网 CIDR 来避免子网冲突。

要在集群创建期间指定定制 pod 和服务子网,请使用 ibmcloud ks cluster create CLI 命令中的 --pod-subnet--service-subnet 选项。

要查看集群使用的 pod 和服务子网,请在 ibmcloud ks cluster get 的输出中查找 Pod SubnetService Subnet 字段。

Pod

缺省范围

在 VPC 中创建的第一个集群中,缺省 pod 子网为 172.17.0.0/18。 在该 VPC 中创建的第二个集群中,缺省 pod 子网为 172.17.64.0/18。 在每个后续集群中,pod 子网范围是下一个可用的非重叠 /18 子网。

大小要求

指定自定义子网时,请考虑计划创建的群集规模以及将来可能添加的工作节点数量。 子网的 CIDR 必须至少为 /23,这样才能为集群中最多四个工作节点提供足够的 pod IP。 对于较大的集群,请使用 /22 为 8 个工作程序节点提供足够的 pod IP 地址,使用 /21 为 16 个工作程序节点提供足够的 pod IP 地址,以此类推。

对于 VPC 集群,可以通过在 --pod-subnet 选项中包含子网大小来指定子网大小。 例如: --pod-subnet 0.0.0.0/X,其中 X 是必需的 pod 子网大小。 然后,将自动选择 pod 子网。 自动分配 pod 子网时,分配将从 172.17.0.0 开始,最大子网限制为 13,最小子网大小限制为 23

工作节点有全局限制。 一个区域内所有集群的工作节点不能超过 500 个。

范围需求

Pod 和服务子网不能相互重叠,pod 子网不能与工作程序节点的 VPC 子网重叠。 您选择的子网必须在下列其中一个范围内。

  • 172.17.0.0 - 172.17.255.255

  • 172.21.0.0 - 172.31.255.255

  • 192.168.0.0 - 192.168.255.255

  • 198.18.0.0 - 198.19.255.255

服务

缺省范围
部署到群集的所有服务默认都会分配一个 172.21.0.0/16 范围内的私有 IP 地址。
大小要求
指定定制子网时,必须以 CIDR 格式指定大小至少为 /24 的子网,这允许集群中最多 255 个服务或更大的服务。
范围需求
Pod 和服务子网不能相互重叠。 您选择的子网必须在下列其中一个范围内。
  • 172.17.0.0 - 172.17.255.255

  • 172.21.0.0 - 172.31.255.255

  • 192.168.0.0 - 192.168.255.255

  • 198.18.0.0 - 198.19.255.255

公共网关

公共网关使子网和连接到子网的所有工作程序节点能够建立到因特网的出站连接。 如果工作节点必须访问群集外的公共端点,可以在部署工作节点的 VPC 子网上启用 公共网关

如果 IBM Cloud 服务不支持私有云服务端点,则您的工作节点必须连接到已连接公共网关的子网。 这些工作程序节点上的 pod 可以通过子网的公共网关在公用网络上安全地与服务进行通信。 请注意,子网上无需公共网关来允许从因特网到 LoadBalancer 服务或 ALB 的入站网络流量。

在一个 VPC 中,每个区域只能创建一个公共网关,但该公共网关可以连接到区域内的多个子网。 有关公共网关的更多信息,请参阅 Networking for VPC 文档

虚拟专用端点 (VPE)

工作程序节点可以通过集群的 虚拟专用端点(VPE) 与 Kubernetes 主节点进行通信。

VPE 是绑定到端点网关的虚拟 IP 地址。 在 VPC 中每个集群创建一个 VPE 网关资源。 集群具有工作程序节点的每个专区中的一个子网中的一个 IP 地址将自动用于 VPE 网关,并且此专区中的工作程序节点使用此 IP 地址与 Kubernetes 主节点进行通信。 要查看集群的 VPE 网关详细信息,请打开 VPC 仪表板的虚拟专用端点网关 并查找格式为 iks-<cluster_ID> 的 VPE 网关。

请注意,工作程序节点会自动使用缺省情况下在 VPC 中创建的 VPE。 但是,如果启用了 集群的公共云服务端点,那么将在公共端点上建立一半的工作程序到主节点流量,在 VPE 上建立一半的工作程序到主节点流量,以防止公共或专用网络可能发生中断。

请勿删除子网上用于 VPE 的任何 IP 地址。

网络分段

网络分段描述了用于将网络划分为多个子网的方法。 在一个子网络中运行的应用程序无法看到或访问另一个子网络中的应用程序。 有关 VPC 子网的网络分段选项的更多信息,请参阅 此集群安全性主题

子网提供了一个通道,用于连接集群内的工作程序节点。 此外,任何连接到同一 VPC 中任何专用子网的系统都可以与工作程序进行通信。 例如,一个 VPC 中的所有子网都可以通过专用第 3 层路由与内置 VPC 路由器进行通信。

如果您有多个集群必须相互通信,那么可以在同一 VPC 中创建这些集群。 不过,如果你的群集不需要通信,你可以通过在单独的 VPC 中创建群集来实现更好的网络分段。 此外,还可以为 VPC 子网创建访问控制表 (ACL),以调解专用网络上的流量。 ACL 由入站和出站规则组成,这些规则定义了每个 VPC 子网允许的流入和流出。

VPC 联网限制

为集群创建 VPC 子网时,请记住以下功能和限制。

  • 每个 VPC 子网的缺省 CIDR 大小为 /24,最多可支持 253 个工作程序节点。 如果计划在一个集群中每个专区部署 250 个以上的工作程序节点,请考虑创建更大的子网。
  • 创建 VPC 子网后,无法调整其大小或更改其 IP 范围。
  • 同一 VPC 中的多个群集可共享 VPC 子网。 但是,无法在多个集群之间共享定制 pod 和服务子网。
  • VPC 子网绑定到单校区多区区域,不能跨越多个区或区域。
  • 创建子网后,无法将其移动到不同的区域、地区或 VPC。
  • 如果有工作节点连接到某个区域的现有子网,则无法更改群集中该区域的子网。
  • 禁止 172.16.0.0/16172.18.0.0/16172.19.0.0/16172.20.0.0/16 范围。
  • 在一个 VPC 中,每个区域只能创建一个公共网关,但该公共网关可以连接到区域内的多个子网。
  • 经典访问缺省地址前缀 与 IBM Cloud Kubernetes Service 控制平面的子网冲突。 您必须 创建没有自动缺省地址前缀的 VPC,然后在这些范围内为集群创建自己的地址前缀和子网

创建 VPC 子网并连接公共网关

为集群创建 VPC 子网,并 (可选) 将公共网关连接到子网。

在控制台中创建 VPC 子网

使用 IBM Cloud 控制台为集群创建 VPC 子网,并选择性地将公共网关连接到子网。

  1. VPC 子网仪表板 中,单击 创建
  2. 输入子网的名称,然后选择已创建的 VPC 的名称。
  3. 选择要在其中创建子网的位置和专区。
  4. 指定要创建的 IP 地址数。
    • VPC 子网为集群中的工作节点和负载均衡器服务提供 IP 地址,因此 请创建具有足够 IP 地址的 VPC 子网,例如 256 个。 以后无法更改 VPC 子网的 IP 数量。
    • 如果输入特定 IP 范围,请勿使用以下保留范围: 172.16.0.0/16172.18.0.0/16172.19.0.0/16172.20.0.0/16
  5. 选择是否要将公用网络网关连接到子网。 如果要让群集访问公共端点,如另一个应用程序的公共 URL 或仅支持公共云服务端点的 IBM Cloud 服务,则需要使用公共网络网关。
  6. 单击创建子网
  7. 使用子网来 创建集群创建新的工作程序池将子网添加到现有工作程序池。> 请勿在集群创建期间或在专区中添加工作程序节点时删除附加到集群的子网。 如果删除集群使用的 VPC 子网,那么使用子网中的 IP 地址的任何负载均衡器都可能迂到问题,并且您可能无法创建新的负载均衡器。

在 CLI 中创建 VPC 子网

使用 IBM Cloud CLI 为集群创建 VPC 子网,并 (可选) 将公共网关连接到子网。

准备工作

  1. 在命令行中,登录 IBM Cloud 账户,并将 IBM Cloud 区域和资源组作为目标,在此创建 VPC 群集。 有关支持的区域,请参阅在其他区域中创建 VPC。 集群的资源组可以不同于 VPC 资源组。 根据提示,输入您的 IBM Cloud 凭证。 如果您有一个联合 ID,请使用 --sso 选项登录。
    ibmcloud login -r <region> [-g <resource_group>] [--sso]
    
  2. 在要创建集群的区域中创建 VPC

要创建 VPC 子网,请按照以下步骤操作。

  1. 获取要创建子网的 VPC 的 ID。

    ibmcloud ks vpcs
    
  2. 创建子网。 有关此命令中的选项的更多信息,请参阅 CLI 参考

    ibmcloud is subnet-create <subnet_name> <vpc_id> --zone <vpc_zone> --ipv4-address-count <number_of_ip_address>
    
    • VPC 子网为集群中的工作节点和负载均衡器服务提供 IP 地址,因此 请创建具有足够 IP 地址的 VPC 子网,例如 256 个。 以后无法更改 VPC 子网的 IP 数量。
    • 请勿使用以下保留范围: 172.16.0.0/16172.18.0.0/16172.19.0.0/16172.20.0.0/16
  3. 检查在要创建集群的专区中是否有公共网关。 在一个 VPC 中,每个区域只能创建一个公共网关,但该公共网关可以连接到区域内的多个子网。

    ibmcloud is public-gateways
    

    示例输出

    ID                                     Name                                       VPC                          Zone         Floating IP                  Created                     Status      Resource group
    26426426-6065-4716-a90b-ac7ed7917c63   test-pgw                                   testvpc(36c8f522-.)          us-south-1   169.xx.xxx.xxx(26466378-.)   2019-09-20T16:27:32-05:00   available   -
    2ba2ba2b-fffa-4b0c-bdca-7970f09f9b8a   pgw-73b62bc0-b53a-11e9-9838-f3f4efa02374   team3(ff537d43-.)            us-south-2   169.xx.xxx.xxx(2ba9a280-.)   2019-08-02T10:30:29-05:00   available   -
    
    • 如果在每个专区中已有公共网关,请记下公共网关的 标识
    • 如果您在每个专区中都没有公共网关,请创建公共网关。 考虑以 <cluster>-<zone>-gateway 的格式命名公共网关。 记下输出中公共网关的 ID
    ibmcloud is public-gateway-create <gateway_name> <VPC_ID> <zone>
    

    示例输出

    ID               26466378-6065-4716-a90b-ac7ed7917c63
    Name             mycluster-us-south-1-gateway
    Floating IP      169.xx.xx.xxx(26466378-6065-4716-a90b-ac7ed7917c63)
    Status           pending
    Created          2019-09-20T16:27:32-05:00
    Zone             us-south-1
    VPC              myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
    Resource group   -
    
  4. 使用公共网关和子网的标识,将公共网关连接到子网。

    ibmcloud is subnet-update <subnet_ID> --public-gateway-id <gateway_ID>
    

    示例输出

    ID                  91e946b4-7094-46d0-9223-5c2dea2e5023
    Name                mysubnet1
    IPv4 CIDR           10.240.xx.xx/24
    Address available   250
    Address total       256
    ACL                 allow-all-network-acl-36c8f522-4f0d-400c-8226-299f0b8198cf(585bc142-5392-45d4-afdd-d9b59ef2d906)
    Gateway             mycluster-us-south-1-gateway(26466378-6065-4716-a90b-ac7ed7917c63)
    Created             2019-08-21T09:43:11-05:00
    Status              available
    Zone                us-south-1
    VPC                 myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
    
  5. 使用子网来 创建集群创建新的工作程序池将子网添加到现有工作程序池。 请勿在集群创建期间或在专区中添加工作程序节点时删除附加到集群的子网。 如果删除集群使用的 VPC 子网,那么使用子网中的 IP 地址的任何负载均衡器都可能迂到问题,并且您可能无法创建新的负载均衡器。

创建 VPC 子网以进行经典访问

如果在创建 VPC 时启用经典访问,那么 经典访问缺省地址前缀 会自动确定您创建的任何子网的 IP 范围。 但是,经典访问 VPC 子网的缺省 IP 范围与 IBM Cloud Kubernetes Service 控制平面的子网冲突。 相反,您必须创建没有自动缺省地址前缀的 VPC,并创建自己的地址前缀。 然后,每当您为集群创建子网时,都将在您创建的地址前缀范围内创建子网。

在控制台中为经典访问创建 VPC 子网

  1. 创建不带缺省地址前缀的经典访问 VPC。
    1. 虚拟专用云仪表板 中,单击 创建
    2. 输入名称,资源组和任何标记的详细信息。
    3. 选中 启用对经典资源的访问复选框,并取消选中 为每个专区创建缺省前缀复选框。
    4. 选择 VPC 的区域。
    5. 单击创建虚拟私有云
  2. 在每个专区中创建地址前缀。
    1. 单击 VPC 的名称以查看其详细信息。
    2. 单击 地址前缀 选项卡,然后单击 创建
    3. 对于计划在其中创建子网的每个专区,创建一个或多个地址前缀。 地址前缀必须在下列其中一个范围内: 10.0.0.0 - 10.255.255.255172.17.0.0 - 172.17.255.255172.21.0.0 - 172.31.255.255192.168.0.0 - 192.168.255.255
  3. 创建使用地址前缀的子网。
    1. VPC 子网仪表板 中,单击 创建
    2. 输入子网的名称,然后选择经典访问 VPC 的名称。
    3. 选择要在其中创建子网的位置和专区。
    4. 选择为此区域创建的地址前缀。
    5. 指定要创建的 IP 地址数。 VPC 子网为集群中的工作节点和负载均衡器服务提供 IP 地址,因此 请创建具有足够 IP 地址的 VPC 子网,例如 256 个。 以后无法更改 VPC 子网的 IP 数量。
    6. 选择是否要将公用网络网关连接到子网。 如果要让群集访问公共端点,如另一个应用程序的公共 URL 或仅支持公共云服务端点的 IBM Cloud 服务,则需要使用公共网络网关。
    7. 单击创建子网
  4. 使用子网 创建集群。 请勿在集群创建期间或在专区中添加工作程序节点时删除附加到集群的子网。 如果删除集群使用的 VPC 子网,那么使用子网中的 IP 地址的任何负载均衡器都可能迂到问题,并且您可能无法创建新的负载均衡器。

创建 VPC 子网以从 CLI 进行经典访问

  1. 在命令行中,登录 IBM Cloud 账户,并将 IBM Cloud 区域和资源组作为目标,在此创建 VPC 群集。 有关支持的区域,请参阅在其他区域中创建 VPC。 集群的资源组可以不同于 VPC 资源组。 根据提示,输入您的 IBM Cloud 凭证。 如果您有一个联合 ID,请使用 --sso 选项登录。
    ibmcloud login -r <region> [-g <resource_group>] [--sso]
    
  2. 创建不带缺省地址前缀的经典访问 VPC。 在输出中,复制 VPC 标识。
    ibmcloud is vpc-create <name> --classic-access --address-prefix-management manual
    
  3. 对于计划在其中创建子网的每个专区,创建一个或多个地址前缀。 地址前缀必须在下列其中一个范围内: 10.0.0.0 - 10.255.255.255172.17.0.0 - 172.17.255.255172.21.0.0 - 172.31.255.255192.168.0.0 - 192.168.255.255
    ibmcloud is vpc-address-prefix-create <prefix_name> <vpc_id> <zone> <prefix_range>
    
  4. 在每个使用地址前缀的专区中创建子网。 有关此命令中的选项的更多信息,请参阅 CLI 参考。 VPC 子网为集群中的工作节点和负载均衡器服务提供 IP 地址,因此 请创建具有足够 IP 地址的 VPC 子网,例如 256 个。 以后无法更改 VPC 子网的 IP 数量。
    ibmcloud is subnet-create <subnet_name> <vpc_id> --zone <vpc_zone> --ipv4-address-count <number_of_ip_address> --ipv4-cidr-block <prefix_range>
    
  5. 可选: 将公用网络网关连接到子网。 如果要让群集访问公共端点,如另一个应用程序的公共 URL 或仅支持公共云服务端点的 IBM Cloud 服务,则需要使用公共网络网关。
    1. 在每个专区中创建公共网关。 考虑以 <cluster>-<zone>-gateway 的格式命名公共网关。 记下输出中公共网关的 ID
      ibmcloud is public-gateway-create <gateway_name> <VPC_ID> <zone>
      
      示例输出
      ID               26466378-6065-4716-a90b-ac7ed7917c63
      Name             mycluster-us-south-1-gateway
      Floating IP      169.xx.xx.xxx(26466378-6065-4716-a90b-ac7ed7917c63)
      Status           pending
      Created          2019-09-20T16:27:32-05:00
      Zone             us-south-1
      VPC              myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
      Resource group   -
      
    2. 使用公共网关和子网的 ID,将公共网关附加到子网。
      ibmcloud is subnet-update <subnet_ID> --public-gateway-id <gateway_ID>
      
      示例输出
      ID                  91e946b4-7094-46d0-9223-5c2dea2e5023
      Name                mysubnet1
      IPv4 CIDR           10.240.xx.xx/24
      Address available   250
      Address total       256
      ACL                 allow-all-network-acl-36c8f522-4f0d-400c-8226-299f0b8198cf(585bc142-5392-45d4-afdd-d9b59ef2d906)
      Gateway             mycluster-us-south-1-gateway(26466378-6065-4716-a90b-ac7ed7917c63)
      Created             2019-08-21T09:43:11-05:00
      Status              available
      Zone                us-south-1
      VPC                 myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
      
  6. 使用子网 创建集群。 请勿在集群创建期间或在专区中添加工作程序节点时删除附加到集群的子网。 如果删除集群使用的 VPC 子网,那么使用子网中的 IP 地址的任何负载均衡器都可能迂到问题,并且您可能无法创建新的负载均衡器。

将公用网络流量限制为流至使用公共网关的子网

通过减少允许经由 VPC 子网公共网关进行外部访问的工作程序节点,提高 IBM Cloud® Kubernetes Service 集群的安全性。

如果工作程序节点上的 pod 需要连接到公共外部端点,那么可以将公共网关连接到这些工作程序节点所在的子网。 例如,您的 VPC 集群可以自动连接到其他 支持私有云服务端点的 IBM Cloud 服务,例如 IBM Cloud Container Registry。 但是,如果您需要访问仅支持公共云服务端点的 IBM Cloud 服务,您可以将公共网关附加到子网,这样您的 pod 就可以通过公共网络发送请求。

通过将公共网关仅连接到集群中的一个子网,可以隔离集群中的此网络流量。 然后,可以使用应用程序亲缘关系将需要访问外部端点的应用程序 pod 仅部署到连接有公共网关的子网。

在 VPC 集群中,子网限制为一个专区。 将公共网关仅连接到一个子网,并将仅需要对工作程序节点进行公共访问的应用程序 pod 安排在该子网上时,这些 pod 会被隔离到集群中的一个专区中。

  1. 将集群部署到的 VPC 的区域设定为目标。

    ibmcloud target -r <region>
    
  2. 检查是否在具有工作程序节点的专区中具有公共网关。 在一个 VPC 中,每个区域只能创建一个公共网关,但该公共网关可以连接到区域内的多个子网。

    ibmcloud is public-gateways
    

    示例输出

    ID                                     Name                                       VPC                          Zone         Floating IP                  Created                     Status      Resource group
    26426426-6065-4716-a90b-ac7ed7917c63   test-pgw                                   testvpc(36c8f522-.)          us-south-1   169.xx.xxx.xxx(26466378-.)   2019-09-20T16:27:32-05:00   available   -
    2ba2ba2b-fffa-4b0c-bdca-7970f09f9b8a   pgw-73b62bc0-b53a-11e9-9838-f3f4efa02374   team3(ff537d43-.)            us-south-2   169.xx.xxx.xxx(2ba9a280-.)   2019-08-02T10:30:29-05:00   available   -
    
    • 如果已在具有工作程序的专区中以及集群所在的 VPC 中具有公共网关,请记下该网关的 ID

    • 如果在有工人的区域和群集所在的 VPC 中没有公共网关,请创建一个公共网关。 考虑以 <cluster>-<zone>-gateway 的格式命名公共网关。 记下输出中公共网关的 ID

      ibmcloud is public-gateway-create <gateway_name> <VPC_ID> <zone>
      

      示例输出

      ID               26466378-6065-4716-a90b-ac7ed7917c63
      Name             mycluster-us-south-1-gateway
      Floating IP      169.xx.xx.xxx(26466378-6065-4716-a90b-ac7ed7917c63)
      Status           pending
      Created          2019-09-20T16:27:32-05:00
      Zone             us-south-1
      VPC              myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
      Resource group   -
      
  3. 列出集群中的工作程序节点。 对于启用了公共网关的专区,记下一个工作程序节点的 Primary IP

    ibmcloud ks worker ls -c <cluster_name_or_ID>
    

    示例输出

    ID                                                   Primary IP     Flavor   State    Status   Zone         Version
    kube-bl25g33d0if1cmfn0p8g-vpctest-default-000005ac   10.240.02.00   c2.2x4   normal   Ready    us-south-2   1.32.5
    kube-bl25g33d0if1cmfn0p8g-vpctest-default-00000623   10.240.01.00   c2.2x4   normal   Ready    us-south-1   1.32.5
    
  4. 描述工作程序节点。 在 Labels 输出中,请记下标签 ibm-cloud.kubernetes.io/subnet-id 中的子网标识,例如以下示例中的 5f5787a4-f560-471b-b6ce-20067ac93439

    kubectl describe node <worker_primary_ip>
    

    示例输出

    NAME:               10.240.01.00
    Roles:              <none>
    Labels:             arch=amd64
    beta.kubernetes.io/arch=amd64
    beta.kubernetes.io/instance-type=c2.2x4
    beta.kubernetes.io/os=linux
    failure-domain.beta.kubernetes.io/region=us-south
    failure-domain.beta.kubernetes.io/zone=us-south-1
    ibm-cloud.kubernetes.io/ha-worker=true
    ibm-cloud.kubernetes.io/iaas-provider=gc
    ibm-cloud.kubernetes.io/internal-ip=10.240.0.77
    ibm-cloud.kubernetes.io/machine-type=c2.2x4
    ibm-cloud.kubernetes.io/os=UBUNTU_20_64
    ibm-cloud.kubernetes.io/region=us-south
    ibm-cloud.kubernetes.io/sgx-enabled=false
    ibm-cloud.kubernetes.io/subnet-id=5f5787a4-f560-471b-b6ce-20067ac93439
    ibm-cloud.kubernetes.io/worker-id=kube-bl25g33d0if1cmfn0p8g-vpcprod-default-00001093
    ibm-cloud.kubernetes.io/worker-pool-id=bl25g33d0if1cmfn0p8g-5aa474f
    ibm-cloud.kubernetes.io/worker-pool-name=default
    ibm-cloud.kubernetes.io/worker-version=1.15.3_1517
    ibm-cloud.kubernetes.io/zone=us-south-1
    kubernetes.io/arch=amd64
    kubernetes.io/hostname=10.240.0.77
    kubernetes.io/os=linux
    Annotations:        node.alpha.kubernetes.io/ttl: 0
    ...
    
  5. 使用公共网关和子网的 ID,将公共网关附加到子网。 部署到此专区中此子网的工作程序节点现在有权访问外部端点。

    ibmcloud is subnet-update <subnet_ID> --public-gateway-id <gateway_ID>
    

    示例输出

    ID                  91e946b4-7094-46d0-9223-5c2dea2e5023
    Name                mysubnet1
    IPv4 CIDR           10.240.xx.xx/24
    Address available   250
    Address total       256
    ACL                 allow-all-network-acl-36c8f522-4f0d-400c-8226-299f0b8198cf(585bc142-5392-45d4-afdd-d9b59ef2d906)
    Gateway             mycluster-us-south-1-gateway(26466378-6065-4716-a90b-ac7ed7917c63)
    Created             2019-08-21T09:43:11-05:00
    Status              available
    Zone                us-south-1
    VPC                 myvpc(36c8f522-4f0d-400c-8226-299f0b8198cf)
    
  6. 在应用程序的部署文件中,为步骤 4 中找到的子网 ID 标签 添加亲和规则

    在本示例 YAML 的亲缘关系部分,ibm-cloud.kubernetes.io/subnet-idkey<subnet_ID>value

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: with-node-affinity
    spec:
      template:
        spec:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: ibm-cloud.kubernetes.io/subnet-id
                    operator: In
                    values:
                    - <subnet_ID>
    ...
    
  7. 应用已更新的部署配置文件。

    kubectl apply -f with-node-affinity.yaml
    
  8. 验证应用程序 pod 是否部署到正确的工作程序节点。

    1. 列出集群中的 pod。 在输出中,确定应用程序的 pod。 记下该 pod 所在的工作程序节点的 NODE 专用 IP 地址。

      kubectl get pods -o wide
      

      在此输出示例中,应用程序 pod cf-py-d7b7d94db-vp8pq 位于 IP 地址为 10.240.01.00 的工作程序节点上。

      NAME                   READY     STATUS              RESTARTS   AGE       IP               NODE
      cf-py-d7b7d94db-vp8pq  1/1       Running             0          15d       172.30.xxx.xxx   10.240.01.00
      
    2. 列出集群中的工作程序节点。 在输出中,查找连接了公共网关的专区中的工作程序节点。 验证在先前步骤中识别到的具有专用 IP 地址的工作程序节点是否部署在此专区中。

      ibmcloud ks worker ls --cluster <cluster_name_or_ID>
      

      示例输出

      ID                                                   Primary IP     Flavor   State    Status   Zone         Version
      kube-bl25g33d0if1cmfn0p8g-vpctest-default-000005ac   10.240.02.00   c2.2x4   normal   Ready    us-south-2   1.32.5
      kube-bl25g33d0if1cmfn0p8g-vpctest-default-00000623   10.240.01.00   c2.2x4   normal   Ready    us-south-1   1.32.5
      
  9. 可选:如果使用访问控制表 (ACL) 来控制集群网络流量,请在此子网的 ACL 中创建入站和出站规则,以允许进出 pod 必须访问的外部公共端点的流量。