我正在尝试使用 GCE VPN 将 GKE 集群连接到 Cisco ASA 5510 的远程网络。从 GKE pod 10.248.0.26 到远程节点 10.99.193.115 的 ping 到达 10.99.193.115,ASA 说回显回复通过隧道返回到 GKE。但是,10.248.0.26 上的 tcpdump 显示没有收到回复。
Google Cloud Console 报告的防火墙和路由:
Name Source tag / IP range Allowed protocols / ports Target tags
default-allow-icmp 0.0.0.0/0 icmp Apply to all targets
default-allow-internal 10.240.0.0/16 tcp:1-65535; udp:1-65535; icmp Apply to all targets
default-allow-ssh 0.0.0.0/0 tcp:22 Apply to all targets
gke-zecluster-d6cc7a55-all 10.248.0.0/14 tcp; udp; icmp; Apply to all targets
gke-zecluster-d6cc7a55-ssh <public_ip>/32 tcp:22 gke-zecluster-d6cc7a55-node
gke-zecluster-d6cc7a55-vms 10.240.0.0/16 tcp:1-65535; udp:1-65535; icmp gke-zecluster-d6cc7a55-node
k8s-fw-a1a92183fb18e11e5be3442010af0001 0.0.0.0/0 tcp:80,443 gke-zecluster-d6cc7a55-node
k8s-fw-a1aa3fe95b18e11e5be3442010af0001 0.0.0.0/0 tcp:2003 gke-zecluster-d6cc7a55-node
Name Destination IP ranges Priority Instance tags Next hop
default-route-3eed071cad0670e8 0.0.0.0/0 1000 None Default internet gateway
default-route-7a9ddc4457c714a0 10.240.0.0/16 1000 None Virtual network
gke-zecluster-d6cc7a55-7b61213c-b187-11e5-be34-42010af00015 10.248.0.0/24 1000 None gke-zecluster-d6cc7a55-node-j4jx (Zone ze-zone-1)
gke-zecluster-d6cc7a55-7ec5f7a9-b187-11e5-be34-42010af00015 10.248.1.0/24 1000 None gke-zecluster-d6cc7a55-node-rluf (Zone ze-zone-1)
vpn-1-tunnel-1-route-1 10.99.0.0/16 1000 None
我可以打开一些日志来查看发生了什么吗?据我所知,VPN 没有提到有关此流量的任何相关信息,仅:
15:24:51.058 sending DPD request
15:24:51.058 generating INFORMATIONAL_V1 request 3069408857 [ HASH N(DPD) ]
15:24:51.058 sending packet: from <gce-vpn-ip>[500] to <asa-ip>[500] (92 bytes)
15:24:51.092 received packet: from <asa-ip>[500] to <gce-vpn-ip>[500] (92 bytes)
15:24:51.092 parsed INFORMATIONAL_V1 request 146600869 [ HASH N(DPD_ACK) ]
如果我修改 VPN 隧道(GCE VPN、ASA),使 GCE 端的默认网络为 10.240.0.0/16,则流量在两个方向上都可以正确传输。
我认为这是一个路由问题,但是什么呢?路由 10.248.0.0/24 不应该将流量发送回 GKE 节点吗?还是我必须以某种方式将 GKE 网络声明为网络?
答案1
如果 IP 地址10.248.0.26
属于 GKE 节点,那么为了ping
在 GKE 节点和远程节点之间执行操作,您将需要在10.248.0.26/24
网络上添加防火墙规则,以允许从远程源传入 GKE 节点或该网络中的所有目标的流量。
答案2
最后,我不得不选择其他选项。设置 spec.hostNetwork 选项将 pod 推送到节点地址空间 10.240.0.0/16,VPN 可以正常工作。
据我所知,当您创建 GKE 集群时,会为 pod 地址空间设置一些“神奇”的网络,但就 VPN 而言,它似乎没有正确的路由。Karman 可能是正确的,但我找不到任何方法可以为 pod 声明一个明确的虚拟网络来粘贴防火墙规则。简单地将它们粘贴在默认网络上似乎没有帮助。
创建新的非传统网络没有帮助,因为 GKE 拒绝在现有虚拟网络中创建具有 pod 地址的集群,而 GCE SDN 拒绝为 GKE 已声明的地址空间创建虚拟子网。