You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE中为同StatefulSet的两个Pod分配主VPC静态内网IP

针对GKE StatefulSet Pod分配主VPC网段静态内网IP的方案

方案一:直接为Pod指定静态IP(VPC原生集群适用)

这是最直接的解决方式,无需调整集群CIDR,仅需在主VPC子网预留静态IP后绑定到Pod:

  1. 在GCP VPC主子网中预留两个未被占用的静态内网IP,确保它们不在集群的cluster_ipv4_cidr_block和services_ipv4_cidr_block范围内。
  2. 修改StatefulSet的Pod模板,通过ipam字段绑定静态IP:
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: your-statefulset-name
spec:
  serviceName: your-headless-service
  replicas: 2
  template:
    metadata:
      annotations:
        ipam.gke.io/ip-family: IPv4
    spec:
      containers:
      - name: your-container
        image: your-image:tag
      # StatefulSet会按Pod序号对应分配静态IP
      ipam:
        staticIPs:
        - ipam.gke.io/static-ip: "10.0.0.10"  # 对应Pod-0的主网段IP
        - ipam.gke.io/static-ip: "10.0.0.11"  # 对应Pod-1的主网段IP

StatefulSet的Pod会按序号自动匹配静态IP,Pod-0用第一个IP,Pod-1用第二个IP,刚好契合你活动/备用的节点架构,不需要负载均衡分流。

方案二:HostNetwork绑定节点静态IP(备选)

如果Pod静态IP的版本限制无法满足,可以让Pod直接使用节点的网络命名空间,通过节点的静态IP对外提供服务:

  1. 为集群内的两个节点分别分配主VPC网段的静态内网IP,完成节点的IP绑定配置。
  2. 修改StatefulSet模板,启用hostNetwork并通过nodeSelector固定Pod到指定节点:
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: your-statefulset-name
spec:
  serviceName: your-headless-service
  replicas: 1
  template:
    spec:
      hostNetwork: true
      nodeSelector:
        kubernetes.io/hostname: "node-with-static-ip-1"
      containers:
      - name: your-container
        image: your-image:tag
        ports:
        - containerPort: 8080
          hostPort: 8080  # 需指定主机端口避免冲突

再创建一个相同配置的StatefulSet(或调整副本逻辑),绑定到第二个带静态IP的节点。这种方式需要注意端口冲突问题,确保Pod使用的端口在节点上未被占用。

关键注意事项

  • 方案一要求集群为VPC原生模式,且GKE版本≥1.21(Pod静态IP功能的最低支持版本)
  • 预留的静态IP必须属于主VPC子网,且未被其他GCP资源占用
  • 两种方案都不需要配置负载均衡,可通过应用层健康检查实现活动/备用节点的切换

内容的提问来源于stack exchange,提问作者tumpy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:15:55