本页面介绍了 Google Kubernetes Engine (GKE) 在 Google Cloud中默认自动创建的入站流量允许 VPC 防火墙规则。
适用的防火墙和出站流量防火墙
GKE 使用 Virtual Private Cloud (VPC) 防火墙规则来控制传入和传出 Pod 和节点的流量。默认情况下,GKE 会自动创建和管理某些防火墙规则,以允许必要的流量(例如节点与 Pod 之间的通信以及流向 Kubernetes 控制平面的流量)。虽然 GKE 会默认为 LoadBalancer 服务自动创建入站流量允许 VPC 防火墙规则,但您可以停用此行为,以便手动管理防火墙规则或政策,或利用高级防火墙功能。
GKE 创建的入站流量允许防火墙规则并非是适用于集群中节点的唯一防火墙规则。适用于入站和出站的完整防火墙规则集是根据分层防火墙政策、全球网络防火墙政策、区域级网络防火墙政策和其他 VPC 防火墙规则中的规则定义的。
与组织的网络管理员和安全工程师一起规划和设计集群、工作负载和服务的配置,并了解防火墙政策和规则评估顺序,以便了解哪些防火墙规则具有优先权。
GKE 仅创建入站流量 VPC 防火墙规则,因为 GKE 依赖于隐式允许的出站流量最低优先级防火墙规则。
如果您已在集群的 VPC 网络中配置出站流量拒绝防火墙规则,则可能必须创建出站流量允许规则,以允许节点、Pod 和集群的控制平面之间进行通信。例如,如果您已为所有协议和端口以及所有目的地 IP 地址创建了出站流量拒绝防火墙规则,则除了 GKE 自动创建的入站流量规则之外,您还必须创建出站流量允许防火墙规则。与控制平面端点的连接始终使用 TCP 目标端口 443
,但集群的节点和 Pod 之间的连接可以使用任何协议和目标端口。
以下工具可用于确定哪些防火墙规则允许或拒绝流量:
防火墙规则
默认情况下,GKE 会在创建以下资源时自动创建防火墙规则:
- GKE 集群
- GKE Service
- GKE Gateway 和 HTTPRoute
- GKE Ingress
除非另有说明,否则所有自动创建的防火墙规则的优先级均为 1000,这是防火墙规则的默认值。如果您希望更好地控制防火墙行为,则可以创建具有更高优先级的防火墙规则。优先级较高的防火墙规则会在自动创建的防火墙规则之前应用。
GKE 集群防火墙规则
创建集群时,GKE 会创建以下入站流量防火墙规则:
名称 | 用途 | 来源 | 目标(用于定义目的地) | 协议和端口 | 优先级 |
---|---|---|---|---|---|
gke-[cluster-name]-[cluster-hash]-master |
对于依赖于 VPC 网络对等互连来实现控制平面专用端点连接的 Autopilot 集群和标准集群。 允许控制平面访问集群节点上的 Kubelet 和指标服务器。 | 控制平面 IP 地址范围 (/28) | 节点标记 | TCP:443(指标服务器)和 TCP:10250 (kubelet) | 1000 |
gke-[cluster-name]-[cluster-hash]-vms
|
用于 Kubernetes 网络模型所需的集群内通信。 允许在节点上运行的软件将具有与来源匹配的节点 IP 地址的数据包发送到集群中的目标 Pod IP 地址和节点 IP 地址。例如,此规则允许的流量包括:
|
节点 IP 地址范围或此节点 IP 地址范围的超集:
|
节点标记 | TCP:1-65535、UDP:1-65535、ICMP | 1000 |
gke-[cluster-name]-[cluster-hash]-all |
按照 Kubernetes 网络模型的要求,允许集群上所有 Pod 之间的流量。 |
Pod CIDR 对于启用了连续的多 Pod CIDR 的集群,则为集群使用的所有 Pod CIDR 地址块。 |
节点标记 | TCP、UDP、SCTP、ICMP、ESP、AH | 1000 |
gke-[cluster-hash]-ipv6-all |
仅适用于双栈网络集群。允许集群上的节点与 Pod 之间的流量。 |
|
节点标记 | TCP、UDP、SCTP、ICMP for IPv6、ESP、AH | 1000 |
gke-[cluster-name]-[cluster-hash]-inkubelet |
允许在运行 1.23.6 版或更高版本的新 GKE 集群中通过内部 Pod CIDR 和节点 CIDR 访问端口 10255(Kubelet 只读端口)。运行高于 1.26.4-gke.500 版的集群则改用 Kubelet 身份验证端口 (10250)。请勿在集群内添加会阻止 10250 的防火墙规则。 |
内部 Pod CIDR 和节点 CIDR。 |
节点标记 | TCP:10255 | 999 |
gke-[cluster-name]-[cluster-hash]-exkubelet |
在运行 1.23.6 版或更高版本的新 GKE 集群中拒绝对端口 10255 的公开访问。 |
0.0.0.0/0 |
节点标记 | TCP:10255 | 1000 |
GKE Service 防火墙规则
创建 Service 时,GKE 会创建以下入站流量防火墙规则。您可以通过管理 VPC 防火墙规则创建来阻止创建其中某些防火墙规则。
名称 | 用途 | 来源 | 目标(用于定义目的地) | 协议和端口 |
---|---|---|---|---|
k8s-fw-[loadbalancer-hash] |
允许入站流量到达 Service。 | 来源来自 spec.loadBalancerSourceRanges 。如果省略 spec.loadBalancerSourceRanges ,则默认为 0.0.0.0/0 。如需了解详情,请参阅防火墙规则和来源 IP 地址许可名单。 |
LoadBalancer 虚拟 IP 地址 | Service 清单中指定的端口上的 TCP 和 UDP。 |
k8s-[cluster-id]-node-http-hc |
当 externalTrafficPolicy 设置为 Cluster 时,允许外部直通网络负载均衡器服务的健康检查。 |
|
LoadBalancer 虚拟 IP 地址 | TCP:10256 |
k8s-[loadbalancer-hash]-http-hc |
当 externalTrafficPolicy 设置为 Local 时,允许外部直通网络负载均衡器服务的健康检查。 |
|
节点标记 | 由 spec.healthCheckNodePort 定义的 TCP 端口。如果未指定,则 Kubernetes 控制层面会从节点端口范围分配健康检查端口。
如需了解详情,请参阅健康检查端口。 |
k8s-[cluster-id]-node-hc |
当 externalTrafficPolicy 设置为 Cluster 时,允许内部直通网络负载均衡器服务的健康检查。 |
|
节点标记 | TCP:10256 |
[loadbalancer-hash]-hc |
当 externalTrafficPolicy 设置为 Local 时,允许内部直通网络负载均衡器服务的健康检查。 |
|
节点标记 | 由 spec.healthCheckNodePort 定义的 TCP 端口。如果未指定,则 Kubernetes 控制层面会从节点端口范围分配健康检查端口。
如需了解详情,请参阅健康检查端口。 |
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash] |
在启用以下其中一项时,允许入站流量到达 Service: |
来源来自 spec.loadBalancerSourceRanges 。如果省略 spec.loadBalancerSourceRanges ,则默认为 0.0.0.0/0 。如需了解详情,请参阅防火墙规则和来源 IP 地址许可名单。 |
LoadBalancer 虚拟 IP 地址 | Service 清单中指定的端口上的 TCP 和 UDP。 |
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw |
当 externalTrafficPolicy 设置为 Local 且启用了以下任一项时,允许对 Service 进行健康检查: |
|
LoadBalancer 虚拟 IP 地址 | 由 spec.healthCheckNodePort 定义的 TCP 端口。如果未指定,则 Kubernetes 控制层面会从节点端口范围分配健康检查端口。
如需了解详情,请参阅健康检查端口。 |
k8s2-[cluster-id]-l4-shared-hc-fw |
当 externalTrafficPolicy 设置为 Cluster 且启用了以下任一项时,允许对 Service 进行健康检查: |
|
节点标记 | TCP:10256 |
gke-[cluster-name]-[cluster-hash]-mcsd |
允许控制平面访问多集群服务的集群节点上的 Kubelet 和指标服务器。此规则的优先级为 900。 | 健康检查 IP 地址 | 节点标记 | TCP、UDP、SCTP、ICMP、ESP、AH |
GKE 网关防火墙规则
创建 Gateway 和 HTTPRoute 资源时,GKE 会创建以下网关防火墙规则:
名称 | 用途 | 来源 | 目标(用于定义目的地) | 协议和端口 |
---|---|---|---|---|
|
允许网络端点组 (NEG) 的健康检查。 创建第一个 Gateway 资源时,Gateway 控制器会创建此规则。如果创建更多 Gateway 资源,Gateway 控制器可以更新此规则。 |
|
节点标记 | TCP:所有容器目标端口(适用于 NEG) |
GKE Ingress 防火墙规则
创建 Ingress 资源时,GKE 会创建以下入站流量防火墙规则:
名称 | 用途 | 来源 | 目标(用于定义目的地) | 协议和端口 |
---|---|---|---|---|
k8s-fw-l7-[random-hash] |
允许 创建第一个 Ingress 资源时,Ingress 控制器会创建此规则。如果创建了更多 Ingress 资源,则 Ingress 控制器可以更新此规则。 |
|
节点标记 | TCP:30000-32767、TCP:80(适用于内部应用负载均衡器)、TCP:所有容器目标端口(适用于 NEG) |
管理 VPC 防火墙规则创建
默认情况下,GKE 会为所有 LoadBalancer 服务自动创建入站流量允许 VPC 防火墙规则。如果您想自行管理 LoadBalancer Service 的防火墙规则,则必须停用 VPC 防火墙规则的自动创建功能。
为 LoadBalancer Service 停用自动创建 VPC 防火墙规则的功能仅适用于以下情况:
如需了解如何停用防火墙规则,请参阅适用于 GKE 负载均衡器服务的用户管理防火墙规则。
共享 VPC
如果您使用的是 Ingress 或 LoadBalancer Service,并且您的集群位于使用共享 VPC 网络的共享 VPC 中,则服务项目中的 GKE 服务账号无法在宿主项目中创建和更新入站允许防火墙规则。您可以在服务项目中为 GKE 服务账号授予创建和管理防火墙资源的权限。如需了解详情,请参阅共享 VPC。
扩展子网所需的防火墙规则
如果您扩展集群子网的主要 IPv4 范围,GKE 不会自动更新 gke-[cluster-name]-[cluster-hash]-vms
防火墙规则的来源范围。由于集群中的节点可以接收来自子网主要 IPv4 范围扩展部分的 IPv4 地址,因此您必须手动创建防火墙规则,以允许在集群的节点之间进行通信。
您创建的入站防火墙规则必须允许来自扩展子网主要 IPv4 来源范围的 TCP 和 ICMP 数据包,并且该规则必须至少应用于集群中的所有节点。
如需创建仅应用于集群节点的入站防火墙规则,请将防火墙规则的目标设置为集群自动创建的 gke-[cluster-name]-[cluster-hash]-vms
防火墙规则所用的目标标记。
后续步骤
- 阅读 GKE 中的网络概览。
- 了解如何为应用配置网络政策。
- 了解 Google Cloud中的其他预先填充的防火墙规则。
- 详细了解如何在使用共享 VPC 的项目中创建防火墙规则。