本页面介绍了如何在 Google Kubernetes Engine (GKE) 中配置 VPC 原生集群。
如需详细了解 VPC 原生集群的优势和要求,请参阅 VPC 原生集群的概览。
对于 GKE Autopilot 集群,VPC 原生网络默认处于启用状态,无法替换。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
限制
- 您无法将 VPC 原生集群转换为基于路由的集群,也不能将基于路由的集群转换为 VPC 原生集群。
- VPC 原生集群需要 VPC 网络。 传统网络不受支持。
- 与任何 GKE 集群一样,Service (ClusterIP) 地址只能从集群内部访问。如果您需要从位于集群外部但位于集群 VPC 网络和区域内的虚拟机实例访问 Kubernetes Service,请创建一个内部直通负载均衡器。
- 如果在子网中使用所有 Pod IP 地址,则您无法在不将集群置于不稳定状态的情况下替换子网的次要 IP 地址范围。但是,您可以使用连续的多 Pod CIDR 创建其他 Pod IP 地址范围。
创建集群
本部分介绍了如何在创建集群时完成以下任务:
- 同时创建集群和子网。
- 在现有子网中创建集群。
- 创建集群并选择控制平面 IP 地址范围。
- 在新子网中创建具有双栈网络的集群(适用于 Autopilot 集群 1.25 版或更高版本以及 Standard 集群 1.24 版或更高版本)。
- 同时创建双栈集群和双栈子网(适用于 Autopilot 集群 1.25 或更高版本以及 Standard 集群 1.24 或更高版本)。
同时创建集群和子网
以下说明介绍了如何同时创建 VPC 原生 GKE 集群和子网。使用一个命令执行这两个步骤时,次要范围分配方法由 GKE 管理。
gcloud
如需同时创建 VPC 原生集群和子网,请运行以下命令:
gcloud container clusters create CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--enable-ip-alias \
--create-subnetwork name=SUBNET_NAME,range=NODE_IP_RANGE \
--cluster-ipv4-cidr=POD_IP_RANGE \
--services-ipv4-cidr=SERVICES_IP_RANGE
请替换以下内容:
CLUSTER_NAME
:GKE 集群的名称。COMPUTE_LOCATION
:集群的 Compute Engine 位置。SUBNET_NAME
:要创建的子网的名称。子网的区域与集群区域(或包含可用区级集群的区域)相同。如果您希望 GKE 为您生成名称,请使用空字符串 (name=""
)。NODE_IP_RANGE
:以 CIDR 表示法表示的 IP 地址范围(例如10.5.0.0/20
),或 CIDR 地址块的子网掩码大小(例如/20
)。此项用于为节点创建子网主要 IP 地址范围。如果此项被省略,GKE 会在 VPC 中选择大小为/20
的可用 IP 范围。POD_IP_RANGE
:以 CIDR 表示法表示的 IP 地址范围(例如10.0.0.0/14
),或 CIDR 地址块的子网掩码大小(例如/14
)。此项用于为 Pod 创建子网次要 IP 地址范围。如果此项被省略,GKE 将使用包含 218 个地址的随机选择/14
范围。系统会从10.0.0.0/8
(范围为 224 个地址)中随机选择自动选择的范围,且该范围不会包括分配给虚拟机和现有路由的 IP 地址范围,或分配给其他集群的范围。自动选择的范围可能与预留的 IP 地址、动态路由或与此集群建立对等互连的 VPC 内的路由相冲突。如果您使用其中任一项,则应指定--cluster-ipv4-cidr
以防止发生冲突。SERVICES_IP_RANGE
:以 CIDR 表示法表示的 IP 地址范围(例如10.4.0.0/19
),或 CIDR 地址块的子网掩码大小(例如/19
)。此项用于为 Service 创建子网次要 IP 地址范围。如果此项被省略,GKE 将使用默认的 Service IP 地址范围大小 (/20
)。
控制台
您无法使用 Google Cloud 控制台同时创建集群和子网。您应先创建子网,然后在现有子网中创建集群。
API
如需创建 VPC 原生集群,请在您的集群资源中定义 IPAllocationPolicy 对象:
{
"name": CLUSTER_NAME,
"description": DESCRIPTION,
...
"ipAllocationPolicy": {
"useIpAliases": true,
"createSubnetwork": true,
"subnetworkName": SUBNET_NAME
},
...
}
createSubnetwork
字段会自动为集群创建和预配子网。subnetworkName
是可选字段;如果您将此字段留空,系统会自动为子网选择一个名称。
在现有子网中创建集群
以下说明介绍了如何使用您所选的次要范围分配方法在现有子网中创建 VPC 原生 GKE 集群。
gcloud
如需使用由 GKE 管理的次要范围分配方法,请运行以下命令:
gcloud container clusters create CLUSTER_NAME \ --location=COMPUTE_LOCATION \ --enable-ip-alias \ --subnetwork=SUBNET_NAME \ --cluster-ipv4-cidr=POD_IP_RANGE \ --services-ipv4-cidr=SERVICES_IP_RANGE
如需使用由用户管理的次要范围分配方法,请运行以下命令:
gcloud container clusters create CLUSTER_NAME \ --location=COMPUTE_LOCATION \ --enable-ip-alias \ --subnetwork=SUBNET_NAME \ --cluster-secondary-range-name=SECONDARY_RANGE_PODS \ --services-secondary-range-name=SECONDARY_RANGE_SERVICES
请替换以下内容:
CLUSTER_NAME
:GKE 集群的名称。COMPUTE_LOCATION
:集群的 Compute Engine 位置。SUBNET_NAME
:现有子网的名称。子网的主要 IP 地址范围用于节点。子网必须位于集群所使用的区域中。如果此项被省略,GKE 将尝试使用集群所在区域中的default
VPC 网络中的子网。- 如果次要范围分配方法由 GKE 管理:
POD_IP_RANGE
:以 CIDR 表示法表示的 IP 地址范围(例如10.0.0.0/14
),或 CIDR 地址块的子网掩码大小(例如/14
)。此项用于为 Pod 创建子网次要 IP 地址范围。如果您省略--cluster-ipv4-cidr
选项,GKE 会自动选择/14
范围(218 个地址)。系统会从10.0.0.0/8
(范围为 224 个地址)中随机选择自动选择的范围,且该范围不会包括分配给虚拟机和现有路由的 IP 地址范围,或分配给其他集群的范围。自动选择的范围可能与预留的 IP 地址、动态路由或与此集群建立对等互连的 VPC 内的路由相冲突。如果您使用其中任一项,则应指定--cluster-ipv4-cidr
以防止发生冲突。SERVICES_IP_RANGE
:以 CIDR 表示法表示的 IP 地址范围(例如10.4.0.0/19
)或 CIDR 地址块的子网掩码大小(例如/19
)。此项用于为 Service 创建子网次要 IP 地址范围。
- 如果次要范围分配方法由用户管理:
SECONDARY_RANGE_PODS
:指定的SUBNET_NAME
中现有次要 IP 地址范围的名称。GKE 将整个子网次要 IP 地址范围用于集群的 Pod。SECONDARY_RANGE_SERVICES
:指定项中现有次要 IP 地址范围的名称。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击
创建,然后在Standard 或 Autopilot 部分中点击配置。在导航窗格的集群下,点击网络。
在网络下拉列表中,选择一个 VPC。
在节点子网下拉列表中,选择集群的子网。
确保选中启用 VPC 原生流量路由(使用别名 IP)复选框。
如果您希望由 GKE 管理次要范围分配方法,请选中自动创建次要范围复选框。如果您已为所选子网创建了次要范围,并希望由用户管理次要范围分配方法,请取消选中此复选框。
在 Pod 地址范围字段中,输入 pod 范围,例如
10.0.0.0/14
。在 Service 地址范围字段中,输入服务范围,例如
10.4.0.0/19
。配置集群。
点击创建。
Terraform
您可以使用 Terraform 模块通过 Terraform 来创建 VPC 原生集群。
例如,您可以将以下地址块添加到 Terraform 配置:
module "gke" {
source = "terraform-google-modules/kubernetes-engine/google"
version = "~> 12.0"
project_id = "PROJECT_ID"
name = "CLUSTER_NAME"
region = "COMPUTE_LOCATION"
network = "NETWORK_NAME"
subnetwork = "SUBNET_NAME"
ip_range_pods = "SECONDARY_RANGE_PODS"
ip_range_services = "SECONDARY_RANGE_SERVICES"
}
请替换以下内容:
PROJECT_ID
:您的项目 ID。CLUSTER_NAME
:GKE 集群的名称。COMPUTE_LOCATION
:集群的 Compute Engine 位置。对于 Terraform,则为 Compute Engine 区域。NETWORK_NAME
:现有网络的名称。SUBNET_NAME
:现有子网的名称。子网的主要 IP 地址范围用于节点。子网必须位于集群所使用的区域中。SECONDARY_RANGE_PODS
:指定项中现有次要 IP 地址范围的名称。SECONDARY_RANGE_SERVICES
:指定项中现有次要 IP 地址范围的名称。
API
创建 VPC 原生集群时,您需要定义 IPAllocationPolicy 对象。您可以引用现有子网次要 IP 地址范围,也可以指定 CIDR 地址块。如需创建次要范围分配方法由用户管理的集群,请引用现有子网次要 IP 地址范围。如果您希望通过 GKE 管理范围分配方法,请提供 CIDR 地址块。
{
"name": CLUSTER_NAME,
"description": DESCRIPTION,
...
"ipAllocationPolicy": {
"useIpAliases": true,
"clusterIpv4CidrBlock" : string,
"servicesIpv4CidrBlock" : string,
"clusterSecondaryRangeName" : string,
"servicesSecondaryRangeName": string,
},
...
}
此命令包含以下值:
"clusterIpv4CidrBlock"
:Pod 的 CIDR 范围。这决定了 Pod 次要范围的大小,并且可以采用 CIDR 表示法,例如10.0.0.0/14
。从 VPC 的可用空间中选择具有给定大小的空白空间。如果您将此项留空,则系统会查找有效范围并使用默认大小创建该范围。"servicesIpv4CidrBlock"
:Service 的 CIDR 范围。请参阅"clusterIpv4CidrBlock"
的说明。"clusterSecondaryRangeName"
:Pod 的次要范围的名称。此次要范围必须已存在且属于与集群关联的子网。"serviceSecondaryRangeName"
:Service 的次要范围的名称。此次要范围必须已存在且属于与集群关联的子网。
创建集群并选择控制平面 IP 地址范围
默认情况下,使用 Private Service Connect 的集群会使用主要子网范围来预配分配给控制平面端点的内部 IP 地址。您只能在创建集群期间通过选择其他子网范围来替换此默认设置。以下部分介绍如何创建使用 Private Service Connect 的集群并替换子网范围。
gcloud
创建使用 Private Service Connect 且定义为公共集群的集群
gcloud container clusters create CLUSTER_NAME \
--private-endpoint-subnetwork=SUBNET_NAME \
--location=COMPUTE_LOCATION
添加 --enable-private-nodes
标志以将 Private Service Connect 集群创建为专用集群。
替换以下内容:
CLUSTER_NAME
:GKE 集群的名称。SUBNET_NAME
:现有子网的名称。COMPUTE_LOCATION
:集群的 Compute Engine 位置。
GKE 会创建使用 Private Service Connect 的集群。
创建定义为专用集群的集群:
在 GKE 1.29 版及更高版本中,您可以创建使用 Private Service Connect 的集群。在使用 Private Service Connect 的专用集群中创建子网时,--master-ipv4-cidr
参数是可选的。如需创建专用集群,请运行以下命令:
gcloud container clusters create CLUSTER_NAME --enable-ip-alias \
--enable-private-nodes \
--private-endpoint-subnetwork=SUBNET_NAME \
--region=COMPUTE_REGION
替换以下内容:
CLUSTER_NAME
:GKE 集群的名称。SUBNET_NAME
:现有子网的名称。如果您没有为private-endpoint-subnetwork
标志提供值,但需要使用master-ipv4-cidr
,GKE 会创建一个新子网,该子网使用您在master-ipv4-cidr
中定义的值。GKE 会使用新子网为控制平面预配内部 IP 地址。COMPUTE_LOCATION
:集群的 Compute Engine 位置。
控制台
创建定义为公共集群的集群:
如需为新集群的控制平面分配子网,您必须先添加子网。请完成以下步骤:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
在 Standard 或 Autopilot 部分,点击配置。
在名称部分,输入您的集群名称。
对于 Standard 集群,在导航窗格中的集群下,点击网络。
在 IPv4 网络访问部分中,执行以下操作:
- 如需将 GKE 集群创建为公共集群,请选择公共集群。
- 如需将 GKE 集群创建为专用集群,请选择专用集群。
在这两种情况下,您都可以在以后修改集群配置时更改集群隔离模式。
在高级网络选项部分中,选中替换控制层面的默认专用端点子网复选框。
在专用端点子网列表中,选择您创建的子网。
点击完成。根据需要添加其他已获授权的网络。
创建使用双栈网络的集群
您可以在新的或现有的双栈子网上创建使用 IPv4/IPv6 双栈网络的集群。双栈子网适用于 Autopilot 集群 1.25 版或更高版本以及 Standard 集群 1.24 版或更高版本。 Windows Server 节点池不支持双栈子网。
在设置双栈集群之前,我们建议您完成以下操作:
- 详细了解具有双栈网络的 GKE 集群的优势和要求。
- 查看双栈网络的局限和限制。
在本部分中,您将先创建一个双栈子网,然后使用此子网创建一个集群。
如需创建双栈子网,请运行以下命令:
gcloud compute networks subnets create SUBNET_NAME \ --stack-type=ipv4-ipv6 \ --ipv6-access-type=ACCESS_TYPE \ --network=NETWORK_NAME \ --range=PRIMARY_RANGE \ --region=COMPUTE_REGION
请替换以下内容:
SUBNET_NAME
:您选择的子网的名称。ACCESS_TYPE
:是否可路由到公共互联网。 对专用集群使用INTERNAL
,对公共集群使用EXTERNAL
。如果未指定--ipv6-access-type
,则默认访问类型为EXTERNAL
。NETWORK_NAME
:将要添加新子网的网络的名称。此网络必须满足以下条件:- 它必须是自定义模式 VPC 网络。如需了解详情,请参阅如何将 VPC 网络从自动模式切换到自定义模式。
- 如果您将
ACCESS_TYPE
替换为INTERNAL
,则网络必须使用唯一的本地 IPv6 单播地址 (ULA)。
PRIMARY_RANGE
:新子网的主要 IPv4 IP 地址范围(采用 CIDR 表示法)。如需了解详情,请参阅子网范围。COMPUTE_REGION
:集群的 计算区域。
如需创建具有双栈子网的集群,请使用
gcloud CLI
或 Google Cloud 控制台:
gcloud
对于 Autopilot 集群,请运行以下命令:
gcloud container clusters create-auto CLUSTER_NAME \ --location=COMPUTE_LOCATION \ --network=NETWORK_NAME \ --subnetwork=SUBNET_NAME
替换以下内容:
CLUSTER_NAME
:新 Autopilot 集群的名称。COMPUTE_LOCATION
:集群的 Compute Engine 位置。NETWORK_NAME
:包含子网的 VPC 网络的名称。此 VPC 网络必须是自定义模式 VPC 网络。如需了解详情,请参阅如何将 VPC 网络从自动模式切换到自定义模式。SUBNET_NAME
:双栈子网的名称。使用双栈子网时,GKE Autopilot 集群默认为双栈集群。创建集群后,您可以将 Autopilot 集群更新为仅限 IPv4。
对于 Standard 集群,请运行以下命令:
gcloud container clusters create CLUSTER_NAME \ --enable-ip-alias \ --enable-dataplane-v2 \ --stack-type=ipv4-ipv6 \ --network=NETWORK_NAME \ --subnetwork=SUBNET_NAME \ --location=COMPUTE_LOCATION
请替换以下内容:
CLUSTER_NAME
:新集群的名称。NETWORK_NAME
:包含子网的 VPC 网络的名称。此 VPC 网络必须是使用唯一本地 IPv6 单播地址 (ULA) 的自定义模式网络。如需了解详情,请参阅如何将 VPC 网络从自动模式切换到自定义模式。SUBNET_NAME
:子网的名称。COMPUTE_LOCATION
:集群的 Compute Engine 位置。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
在 Standard 或 Autopilot 部分,点击配置。
根据需要配置集群。
在导航窗格的集群下,点击网络。
在网络列表中,选择您的网络的名称。
在节点子网列表中,选择双栈子网的名称。
对于 Standard 集群,请选择 IPv4 和 IPv6(双栈)单选按钮。只有当您选择了双栈子网时,此选项才可用。
使用双栈子网时,Autopilot 集群默认为双栈集群。
点击创建。
同时创建双栈集群和子网
您可以同时创建子网和双栈集群。 GKE 会创建一个 IPv6 子网,并为该子网分配一个外部 IPv6 主要范围。
如果使用共享 VPC,则您无法同时创建集群和子网。共享 VPC 宿主项目中的 Network Admin 必须先创建双栈子网。
对于 Autopilot 集群,请运行以下命令:
gcloud container clusters create-auto CLUSTER_NAME \ --location=COMPUTE_LOCATION \ --network=NETWORK_NAME \ --create-subnetwork name=SUBNET_NAME
替换以下内容:
CLUSTER_NAME
:新 Autopilot 集群的名称。COMPUTE_LOCATION
:集群的 Compute Engine 位置。NETWORK_NAME
:包含子网的 VPC 网络的名称。此 VPC 网络必须是使用唯一本地 IPv6 单播地址 (ULA) 的自定义模式 VPC 网络。如需了解详情,请参阅如何将 VPC 网络从自动模式切换到自定义模式。SUBNET_NAME
:新子网的名称。 GKE 可以根据您的组织政策创建子网:- 如果您的组织政策允许双栈,并且网络是自定义模式,则 GKE 会创建双栈子网,并为子网分配外部 IPv6 主要范围。
- 如果您的组织政策不允许双栈,或者网络处于自动模式,则 GKE 会创建单栈 (IPv4) 子网。
对于 Standard 集群,请运行以下命令:
gcloud container clusters create CLUSTER_NAME \ --enable-ip-alias \ --stack-type=ipv4-ipv6 \ --ipv6-access-type=ACCESS_TYPE \ --network=NETWORK_NAME \ --create-subnetwork name=SUBNET_NAME,range=PRIMARY_RANGE \ --location=COMPUTE_LOCATION
替换以下内容:
CLUSTER_NAME
:您选择的新集群的名称。ACCESS_TYPE
:是否可路由到公共互联网。对专用集群使用INTERNAL
,对公共集群使用EXTERNAL
。如果未指定--ipv6-access-type
,则默认访问类型为EXTERNAL
。NETWORK_NAME
:将要添加新子网的网络的名称。此网络必须满足以下条件:- 它必须是自定义模式 VPC 网络。如需了解详情,请参阅如何将 VPC 网络从自动模式切换到自定义模式。
- 如果您将
ACCESS_TYPE
替换为INTERNAL
,则网络必须使用唯一的本地 IPv6 单播地址 (ULA)。
SUBNET_NAME
:您选择的新子网的名称。PRIMARY_RANGE
:新子网的主要 IPv4 地址范围(采用 CIDR 表示法)。如需了解详情,请参阅子网范围。COMPUTE_LOCATION
:集群的 Compute Engine 位置。
更新栈类型
您可以更改现有集群的栈类型,也可以将现有子网更新为双栈子网。
更新现有集群上的堆栈类型
在更改现有集群上的堆栈类型之前,请考虑以下限制:
运行 1.25 版或更高版本的新 GKE 集群支持更改堆栈类型。从 1.24 版升级到 1.25 版或 1.26 版的 GKE 集群在启用双栈网络时可能会遇到验证错误。 如果出现错误,请与 Google Cloud 支持团队联系。
更改堆栈类型是一种中断性操作,因为 GKE 会重启控制平面和节点中的组件。
重新创建节点时,GKE 会遵循已配置的维护窗口。也就是说,在下一个维护窗口之前,集群堆栈类型将无法在集群上运行。如果您不想等待,可将
--cluster-version
标志设置为控制层面已在运行的同一 GKE 版本,从而手动升级节点池。如果您使用此解决方法,则必须使用 gcloud CLI。如需了解详情,请参阅维护窗口的注意事项。更改堆栈类型不会自动更改现有 Service 的 IP 系列。以下条件适用:
- 如果将单栈更改为双栈,则现有 Service 仍然是单栈。
- 如果将双栈更改为单栈,则使用 IPv6 地址的现有 Service 会进入错误状态。删除 Service 并使用正确的
ipFamilies
创建一个 Service。 如需了解详情,请参阅有关如何设置 Deployment 的示例。
如需更新现有 VPC 原生集群,您可以使用 gcloud CLI 或 Google Cloud 控制台:
gcloud
运行以下命令:
gcloud container clusters update CLUSTER_NAME \
--stack-type=STACK_TYPE \
--location=COMPUTE_LOCATION
替换以下内容:
CLUSTER_NAME
:您要更新的集群的名称。STACK_TYPE
:堆栈类型。替换为以下某个值:ipv4
:将双栈集群更新为仅限 IPv4 的集群。 GKE 使用集群子网的主要 IPv4 地址范围。ipv4-ipv6
:将现有 IPv4 集群更新为双栈。只有在底层子网支持双栈时,您才能将集群更改为双栈。如需了解详情,请参阅将现有子网更新为双栈子网。
COMPUTE_LOCATION
:集群的 Compute Engine 位置。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在要修改的集群旁边,点击 more_vert 操作,然后点击 edit 修改。
在网络部分的堆栈类型旁边,点击 edit 修改。
在修改堆栈类型对话框中,选中所需的集群堆栈类型对应的复选框。
点击保存更改。
将现有子网更新为双栈子网(适用于 Autopilot 集群 1.25 版或更高版本以及 Standard 集群 1.24 版或更高版本)。
将现有子网更新为双栈子网
如需将现有子网更新为双栈子网,请运行以下命令。更新子网不会影响子网中的任何现有 IPv4 集群。
gcloud compute networks subnets update SUBNET_NAME \
--stack-type=ipv4-ipv6 \
--ipv6-access-type=ACCESS_TYPE \
--region=COMPUTE_REGION
请替换以下内容:
SUBNET_NAME
:子网的名称。ACCESS_TYPE
:是否可路由到公共互联网。 对专用集群使用INTERNAL
,对公共集群使用EXTERNAL
。如果未指定--ipv6-access-type
,则默认访问类型为EXTERNAL
。COMPUTE_REGION
:集群的 计算区域。
验证堆栈类型、Pod 和 Service IP 地址范围
创建 VPC 原生集群后,您可以验证其 Pod 范围和 Service 范围。
gcloud
要验证集群,请运行以下命令:
gcloud container clusters describe CLUSTER_NAME
输出具有 ipAllocationPolicy
块。stackType
字段描述了网络定义的类型。对于每种类型,您可以看到以下网络信息:
IPv4 网络信息:
clusterIpv4Cidr
是 Pod 的次要范围。servicesIpv4Cidr
是 Service 的次要范围。
IPv6 网络信息(如果集群具有双栈网络):
ipv6AccessType
:是否可路由到公共互联网。INTERNAL
表示专用 IPv6 地址,EXTERNAL
表示公共 IPv6 地址。subnetIpv6CidrBlock
:新子网的次要 IPv6 地址范围。servicesIpv6CidrBlock
:为双栈集群上的 IPv6 服务分配的地址范围。
控制台
如需验证集群,请执行以下步骤:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要检查的集群的名称。
在网络部分中显示的次要范围:
- Pod 地址范围是 Pod 的次要范围
- 服务地址范围是服务的次要范围
内部 IP 地址的高级配置
以下部分介绍了如何使用非 RFC 1918 专用 IP 地址范围以及如何启用以非公开方式使用的公共 IP 地址范围。
使用非 RFC 1918 IP 地址范围
GKE 集群可以将 RFC 1918 范围之外的 IP 地址范围用于节点、Pod 和 Service。如需查看可用作子网范围的内部 IP 地址的非 RFC 1918 专用范围的列表,请参阅 VPC 网络文档中的有效范围。
Windows Server 节点池不支持此功能。
非 RFC 1918 IP 地址范围与专用集群和非专用集群兼容。
非 RFC 1918 专用范围是子网范围 - 您可以单独使用这些范围,也可以结合使用 RFC 1918 子网范围。节点、Pod 和 Service 会按照 VPC 原生集群的 IP 范围中所述继续使用子网范围。如果使用非 RFC 1918 范围,请注意以下几点:
在创建集群的节点之前,子网范围(即使是使用非 RFC 1918 范围的子网范围)必须手动分配或由 GKE 分配。除非您替换集群,否则无法改用或停用非 RFC 1918 子网范围。
内部直通网络负载均衡器仅使用子网的主要 IP 地址范围中的 IP 地址。如需创建具有非 RFC 1918 地址的内部直通负载均衡器,子网的主要 IP 地址范围必须为非 RFC 1918。
集群外部的目的地可能无法从专用的非 RFC 1918 范围接收流量。例如,RFC 1112(E 类)专用范围通常用作多播地址。如果集群之外的目的地无法处理来源为 RFC 1918 范围之外的专用 IP 地址的数据包,您可以执行以下操作:
- 使用 RFC 1918 范围作为子网的主要 IP 地址范围。这样,集群中的节点会使用 RFC 1918 地址。
- 确保您的集群正在运行 IP 伪装代理,并且目的地不在
nonMasqueradeCIDRs
列表中。这样,从 Pod 发送的数据包的来源 (SNAT) 会更改为节点地址 (RFC 1918)。
启用以非公开方式使用的外部 IP 地址范围
GKE 集群能够以非公开方式将特定外部 IP 地址范围用作内部子网 IP 地址范围。除了 VPC 网络文档中所述的特定受限范围,您能够以非公开方式使用任何外部 IP 地址。 Windows Server 节点池不支持此功能。
集群必须是 VPC 原生集群,才能使用以非公开方式使用的外部 IP 地址范围。不支持基于路由的集群。
以非公开方式使用的外部范围是子网范围。您可以单独使用,也可以与使用专用地址的其他子网范围结合使用。节点、Pod 和 Service 会按照 VPC 原生集群的 IP 范围中所述继续使用子网范围。在以非公开方式重复使用外部 IP 地址时,请注意以下几点:
使用外部 IP 地址范围作为子网范围时,集群将无法再与互联网上使用该外部范围的系统进行通信。此范围会变为集群 VPC 网络中的内部 IP 地址范围。
在创建集群的节点之前,子网范围(即使是以非公开方式使用外部 IP 地址范围的子网范围)必须手动分配或由 GKE 分配。除非您替换集群,否则无法改用或停用以非公开方式使用的外部 IP 地址。
默认情况下,GKE 会在到外部 IP 目的地的节点上实现 SNAT。如果您已将 Pod CIDR 配置为使用外部 IP 地址,则 SNAT 规则适用于 Pod 到 Pod 的流量。为避免这种情况,您有两种选择:
- 使用
--disable-default-snat
标志创建集群。如需详细了解此标志,请参阅 GKE 中的伪装功能。 - 配置 configMap
ip-masq-agent
,在nonMasqueradeCIDRs
列表中至少包含 Pod CIDR、Service CIDR 和节点子网。
对于 Standard 集群,如果集群版本为 1.14 或更高版本,这两种方法都适用。如果集群版本低于 1.14,您只能使用第二种方法(配置 ip-masq-agent
)。