GKE 网络:IP、入口与访问控制

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

适用:Autopilot / Standard 的普通 IPv4、VPC-native 网络。创建步骤见 Autopilot 或 Standard;VPC 基础见 VPC 与 subnet。本页不覆盖多网卡 Pod 或 IPv4/IPv6 dual-stack;尤其不能把下方 IPv4 Pod CIDR 的 /24 块计算直接套给 IPv6。需要双栈时从 VPC-native 地址模型 的 IPv6 部分选择集群与 subnet 配置。

先区分三种网络流量#

流量 典型路径 主要检查点
管理集群 本机 kubectl → 控制面 API Server 控制面 endpoint、网络路径、Google 身份、IAM/RBAC
访问应用 客户端 → LB / Service → Pod 前端、路由、后端、服务端口、健康检查、应用
应用访问外部 Pod → 数据库 / Google API / 互联网 路由、网络策略、防火墙、NAT、目标认证

kubectl 能连接控制面,不代表应用入口可达;私有节点也不代表应用没有公网入口。 控制面 endpoint、Service/Ingress 和 Pod 出站是三条独立路径。

VPC、 subnet 和 Zone 如何对应#

在基本的单网络配置中,集群选择一个 VPC 和同 Region 的 subnet。节点从该 subnet 取得内部 IP,不同 Zone 的节点可以使用同一个区域 subnet。

VPC:orders-enterprise(全局)
└─ asia-east1 Region 的 subnet orders-gke
   ├─ 主范围:10.64.0.0/24 → 节点、私网管理机
   ├─ 次要范围 orders-pods:10.68.0.0/18 → Pod 地址池
   └─ 次要范围 orders-services:10.69.0.0/22 → 本例 Service 地址池

asia-east1-a 的节点 → 使用 orders-gke
asia-east1-b 的节点 → 也使用 orders-gke

上图沿用 Standard 实验;secondary ranges 属于同一个 subnet。规划时检查本 VPC 与互联网络的地址重叠。

Regional 集群提供控制面跨 Zone 冗余;业务跨 Zone 副本仍由节点位置和 Pod 调度决定。

Node、Pod、Service 的 IP 分别做什么#

地址 来源与作用 示例
Node IP subnet 主范围,节点 VM 的内部地址 10.64.0.10
Pod IP 从分配给节点的 Pod CIDR 块中取地址 10.68.1.10
Service ClusterIP 为一组后端 Pod 提供稳定的虚拟入口 10.69.0.10
LB frontend IP 云负载均衡器的对外或对内入口 独立的公网地址或适用 subnet 内网地址
控制面 endpoint 管理 API 的 DNS 名称或 IP 不属于业务 Service 的访问入口

VPC-native / alias IP 将 Pod 地址池按节点划分,以别名 IP 接入 VPC;subnet 路由由平台维护,无须逐 Pod 配置。访问仍受 firewall 和网络策略约束。VPC-native

ClusterIP 是集群数据面转发到 Pod 的虚拟入口,不绑定某台 VM 网卡。集群外访问应使用内部/外部 LB 等受支持入口。

本例指定 orders-services;GKE 也支持平台管理的 Service 范围,例如 Google 私有用途的 34.118.224.0/20,不表示公网暴露。IP 地址说明

为什么 Pod 网段要比节点网段大#

节点需要完整的 Pod 地址块。在 Standard 中,每节点上限为默认 110 Pod 时通常分配 /24;/18 可分 64 块,须计入全部 node pool 和升级临时节点(surge)。调整每节点 Pod 上限会改变地址需求;Autopilot 使用平台规则。容量规划

Pod 如何通过 Service 访问另一个应用#

Service selector用标签选择后端 Pod;EndpointSlice 保存服务发现到的后端 endpoint。应用正常提供服务的 Pod 才应参与转发,readiness(就绪检查)用于判断是否可以接流量。

客户端 Pod
  → web.demo.svc.cluster.local(集群 DNS)
  → Service ClusterIP:80
  → 数据面选择就绪 endpoint
  → Pod IP:8080
字段 含义
port: 80 客户端访问 Service 的端口
targetPort: 8080 转发到后端 Pod 的应用监听端口
containerPort: 8080 容器清单声明的端口,不会替应用启动监听,也不会自动公开它
selector 匹配 Pod 标签;拼错可能导致没有可用后端

同 namespace 可用 web,跨 namespace 可用 web.demo;完整域名取决于集群域配置。这里的集群 DNS解析 Service,与管理 API 的 DNS endpoint 分开。网络架构

集群外如何访问应用#

方式 提供什么 适用场景
kubectl port-forward 经 Kubernetes API 临时转发本机端口到 Pod 开发验证;终端断开即停止,不创建云 LB
ClusterIP Service 集群内稳定虚拟入口 Pod 间调用
NodePort Service 在节点端口接受流量 特定入口架构;还需可达节点和网络许可
LoadBalancer Service 由控制器供应云负载均衡入口 TCP/UDP 等 L4 服务;内外网类型由配置决定
GKE Ingress / Gateway 声明 HTTP(S) 域名、路径、TLS 等入口 网站/API;由 GKE 控制器创建所选类型的 ALB

Ingress在这里是 Kubernetes API 对象,不是 Cloud Run 的 ingress 开关。Gateway API 用 Gateway、HTTPRoute 等对象分开描述入口和路由;选择的 GatewayClass 决定实际 GKE 负载均衡器能力和范围。

GKE 用 Zonal NEG 登记 Pod IP/端口,需要云端健康检查及 firewall;Cloud Run 使用 Serverless NEG。Pod readiness 与云端健康检查是两项检查。

控制器管理的 LB 应通过 Kubernetes 清单修改;Console 手改可能被覆盖。操作见 GKE Ingress;通用 Gateway API 页使用 Envoy Gateway,非 GKE 托管 Gateway 步骤。对象关系见 ALB。

私有节点与控制面入口分别配置#

设置 控制什么 不代表什么
--enable-private-nodes 节点不分配外部 IP 不会自动禁止通过公网 LB 访问应用
内部 IP endpoint 管理 API 使用内部地址 你的电脑不会因此自动获得私网路由
外部 IP endpoint 管理 API 可经外部地址到达 仍需身份与授权,不等于匿名管理
DNS endpoint 通过 GKE 管理域名访问 API 与 Pod 的 Service DNS 无关
Authorized networks 控制适用 IP 管理 endpoint 的来源网段 不负责过滤用户访问应用 ALB 的流量

get-credentials --internal-ip 选择内部入口,不建立私网路由;--dns-endpoint 选择已启用的 DNS 入口。可通过 IAP 登录独立管理 VM(runner)执行 kubectl,也可使用已有 VPN 路径。

DNS endpoint 使用 IAM 等访问控制,不套用 IP endpoint 的 Authorized networks 规则;internal IP endpoint 还须核对 regional/global access 限制。具体选择见 控制面 endpoint、网络隔离。

Pod 出站:内网、Google API 与互联网#

目标 需要具备的路径
同 VPC VM / 私网服务 适用路由、防火墙、Pod 网络策略和目标端口许可
另一个 VPC Peering、VPN 等连接及回程路由;检查 Pod 地址和源地址转换
Cloud SQL 私网地址 对应 PSA / PSC 路径和数据库认证;不能把多个 Peering 当成可传递路由
Google API / Artifact Registry 适用的 Google API 网络路径,例如 Private Google Access;再检查 Service Account IAM
普通互联网 私有节点环境需 Cloud NAT 或其他出口方案,并满足出站策略

SNAT / IP masquerade 转换源地址。依目标和集群配置,接收方可能看到 Pod IP、Node IP 或 NAT 外部 IP;配置来源白名单前先确认实际源地址。

Standard 示例的 --nat-custom-subnet-ip-ranges="$SUBNET:ALL" 纳入该 subnet 的主、次要范围。镜像拉取查节点身份与出口;业务 API 调用查工作负载身份。详见 Cloud NAT、私网连接。

VPC 防火墙、NetworkPolicy 与 Dataplane V2#

控制 管什么 例子
VPC firewall VPC 中适用的网络流量 允许 LB 健康检查或代理到达后端
Kubernetes NetworkPolicy 选定 Pod 的入站和出站通信 只允许带指定标签的 API Pod 访问数据库 Pod
IAM / Kubernetes RBAC 谁能调用云 API 或操作 Kubernetes 对象 允许开发者查看 Pod;不代表应用端口自动放行
应用认证 业务用户和调用方能做什么 API token、数据库用户和 SQL 权限

Dataplane V2 是 GKE 托管数据面,负责转发、Service 和 NetworkPolicy 执行;启用它不会自动创建默认 Deny policy,namespace 也不自动隔离网络。

默认拒绝出站时须放行实际 DNS、数据库和 API 依赖;Pod/Service 策略按 Dataplane V2 支持的 selector 与 ipBlock 规则设计。Autopilot 托管数据面,Standard 用 --enable-dataplane-v2 选择,均不应重复安装 CNI。Dataplane V2、NetworkPolicy

将网络参数对应到规划#

创建参数 对应的设计
--network / --subnetwork 节点网络及同 Region subnet
--enable-ip-alias 使用 VPC-native Pod 地址模型
--cluster-secondary-range-name 使用哪个已命名的 Pod 次要地址池
--services-secondary-range-name 本例显式使用的 Service 地址池
--node-locations 节点放置在哪些 Zone,不是 subnet 列表
--master-ipv4-cidr 本例控制面内部 endpoint 地址规划;按集群架构/版本要求使用
--enable-private-nodes 节点无公网 IP,同时规划依赖的出站路径
--enable-private-endpoint / --no-enable-dns-access 生产篇选择仅内部 IP 管理入口,其他设计可不同
--enable-authorized-networks-on-private-endpoint 将配置的来源网段限制应用到内部 IP 管理 endpoint

完整命令及每 Zone 节点数量见 Standard 实验。

从哪个位置执行排障命令#

先配置目标 kubeconfig,并核对 context;以下 kubectl 在具备控制面访问路径的机器上执行。查看当前节点位置、Pod 地址和服务 endpoint:

kubectl config current-context
kubectl get nodes -o wide -L topology.kubernetes.io/zone
kubectl get pods -A -o wide
kubectl get services -A
kubectl get endpointslices -A
kubectl get networkpolicies -A

按故障 namespace 和 Service 缩小查询范围。

从可运行 gcloud 的终端只读查看集群和 subnet:

# 设置为实际目标,不会创建新资源。
PROJECT_ID=REPLACE_PROJECT_ID
CLUSTER=REPLACE_CLUSTER
REGION=REPLACE_REGION
SUBNET=REPLACE_SUBNET

gcloud container clusters describe "$CLUSTER" \
  --project="$PROJECT_ID" --region="$REGION" \
  --format='yaml(network,subnetwork,ipAllocationPolicy,privateClusterConfig,controlPlaneEndpointsConfig,masterAuthorizedNetworksConfig)'
gcloud compute networks subnets describe "$SUBNET" \
  --project="$PROJECT_ID" --region="$REGION" \
  --format='yaml(ipCidrRange,secondaryIpRanges,privateIpGoogleAccess)'
故障 检查顺序
kubectl 超时 使用哪个控制面 endpoint → 当前机器路由/DNS → endpoint 来源限制 → 客户端网络
kubectl Forbidden Google 身份、IAM、RBAC;不要通过开放网段解决权限拒绝
Pod 域名不通 Pod 内 DNS 配置及 DNS 策略许可 → Service/EndpointSlice → 应用监听
Service 没有后端 selector 与 Pod 标签 → Pod Ready → targetPort
ImagePullBackOff 镜像是否存在/架构支持 → 节点仓库权限 → 镜像仓库出站路径
扩容因 IP 失败 主范围、Pod 地址块、每节点 Pod 上限、 node pool 总数及 surge
公网 LB 失败 GKE 控制器事件 → NEG 后端 → 云端健康检查/防火墙 → Service 与应用
Pod 访问数据库失败 DNS/目标 IP → 路由和回程 → SNAT 后实际来源 → 网络策略 → TLS/数据库认证

port-forward 成功不验证 LB、ClusterIP 或出站 NAT 路径。网络排障

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭