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

如何为VPC原生GKE集群的Pod添加自定义路由或强制用云路由器路由

解决Pod通过网关VM访问跨子网VM的方案

针对你描述的VPC原生集群场景,不想启用hostNetwork: true的前提下,有以下几种可行方案:

1. 通过CNI插件注入Pod级自定义路由

主流CNI插件(如Calico、Cilium)都支持给特定Pod/Namespace添加专属路由规则,直接让Pod流量指向网关VM:

  • Calico示例:
    给目标Pod添加annotation,指定到11.11.0.0/24子网的下一跳为网关VM的10.10.0.1:
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-a
      annotations:
        projectcalico.org/route: '{"dest": "11.11.0.0/24", "nextHop": "10.10.0.1"}'
    spec:
      containers:
      - name: your-container
        image: your-image
    
    也可以用GlobalNetworkPolicy批量给符合标签的Pod配置路由:
    apiVersion: projectcalico.org/v3
    kind: GlobalNetworkPolicy
    metadata:
      name: pod-to-gateway-route
    spec:
      selector: app == "pod-a"
      egress:
      - action: Allow
        destination:
          cidr: 11.11.0.0/24
        route:
          nextHop: 10.10.0.1
    
  • Cilium示例:
    通过CiliumNetworkPolicy的路由规则配置:
    apiVersion: cilium.io/v2
    kind: CiliumNetworkPolicy
    metadata:
      name: pod-a-route
    spec:
      endpointSelector:
        matchLabels:
          app: pod-a
      egress:
      - toCIDR:
        - 11.11.0.0/24
        route:
          nextHop: 10.10.0.1
    

2. 节点静态路由+Pod固定IP

如果CNI不支持自定义路由,可在节点层面配置路由,配合Pod固定IP实现流量转发:

  1. 给Pod固定IP(以Calico为例):
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-a
      annotations:
        cni.projectcalico.org/ipAddrs: '["10.10.0.2"]'
    spec:
      containers:
      - name: your-container
        image: your-image
    
  2. 在Pod所在节点添加静态路由:
    ip route add 11.11.0.0/24 via 10.10.0.1 dev <节点连接10.10.0.0子网的网卡名>
    
    要让路由持久化,可将命令添加到节点的/etc/rc.local,或者用DaemonSet在所有集群节点上自动配置。

3. 网关VM配置SNAT+VPC路由表调整

利用云VPC的路由表和网关VM的SNAT功能,无需修改Pod配置:

  1. 在网关VM开启IP转发:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    编辑/etc/sysctl.conf,添加net.ipv4.ip_forward=1实现持久化。
  2. 配置SNAT规则:
    iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -d 11.11.0.0/24 -j SNAT --to-source 10.10.0.1
    
  3. 调整VPC路由表:
    添加一条路由规则:目标CIDR为11.11.0.0/24,下一跳指向网关VM的实例ID(或弹性网卡)。

4. Service代理转发(针对特定服务)

如果仅需访问VM B上的特定服务,可通过K8s Service做中转:

  1. 创建ExternalName Service指向网关VM:
    apiVersion: v1
    kind: Service
    metadata:
      name: vm-b-proxy
    spec:
      type: ExternalName
      externalName: 10.10.0.1
      ports:
      - name: service-port
        port: 8080 # Service暴露的端口
        targetPort: 9000 # 网关VM上用于转发的端口
    
  2. 网关VM配置端口转发:
    iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to-destination 11.11.0.2:80 # 转发到VM B的服务端口
    

注意事项

  • 确保VPC安全组、网络ACL允许10.10.0.0/24子网与11.11.0.0/24子网、网关VM之间的双向流量。
  • 网关VM的安全组要开放对应的转发端口(若用端口转发方案)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:27:37