GCP VM 网络问题 - VM 之间的通信

GCP VM 网络问题 - VM 之间的通信

我更像是一个 Java 开发人员,而不是系统/云架构师,但我却陷入了困境,看不到出路。

在 Google Cloud 上,我有一个自定义网络,名为 t,其子网t-eu具有主 ipv4 范围,192.168.0.0/24这应该会为连接到网络的 254 个网络设备提供范围。此网络上的一些 VM 使用 Google Cloud Optimized OS,我们通过 Cloud SDK(在管道中)部署 Docker 容器。其中一个 VM 是Spring Boot Cloud Gateway(java)A我们正在使用它在虚拟机(服务)之间路由流量。直到今天,我们的设置都运行正常,没有任何问题。然而,突然间,这个 Compute Engine 虚拟机(我们依赖的heavily on Instance Templates, and Instance groups)基本上停止了工作。查看端口 8080/80 上的防火墙规则(入口/出口),启用日志记录后不会失败。

Spring Cloug Gateway with Eureka(服务发现)似乎依赖于 dns 域名。使用跟踪日志,我可以清楚地看到流量被路由到C- 所需服务。来自A我清楚地看到以下内容:

Pattern "/file-storage-swagger" matches against value "/file-storage-swagger"
Route matched: FILE-STORAGE-SERVICE
RouteToRequestUrlFilter start
LoadBalancerClientFilter url chosen: http://my-service-managed-n03f.europe-west1-b.c.project-name.internal:8080/v3/api-docs
Connecting to [my-service-managed-n03f.europe-west1-b.c.project-name.internal/192.168.1.20:8080]

然后连接突然中断。我们的实例组前面是负载均衡器,它会在 30 秒后终止流量,我相信这是默认值。因此每次我们到达网关时A 它问关于位置C其域名位于t-eu- 子网内,IP 地址为192.168.1.20。但是它总是超时。

我尝试使用Connectivity Tests我路由流量的地方AC使用正确的端口和 IP,它总是成功。日志中没有任何内容,网络智能工具等中也没有任何内容。I tried to use tcpdump以及其他网络工具来捕获细微的细节,但云优化操作系统在这里确实很有限。我可以直接 pingCvm,但 telnet、trace 不起作用。

概括:

  • 虚拟机A无法访问虚拟机
  • 虚拟机访问虚拟机没有问题A
  • A可以 ping可以 pingA
  • A无法使用 traceroute、telnet、curl 等
  • 防火墙规则似乎正在发挥作用(连接测试、日志)

编辑:问题出在自动模板创建中

我曾经通过 bitbucket 管道在实例模板中创建模板

这是命令

gcloud compute instance-templates create-with-container <name>-$ENV-$BITBUCKET_BUILD_NUMBER \
    --project=<project-name>\
    --machine-type=$MACHINE_TYPE \
    --network-interface=subnet=<subnet>,no-address \
    --maintenance-policy=MIGRATE \
    --service-account=<service-acc> \
    --scopes=<scopes> \
    --region=<region> \
    --container-image=<docker-image> \
    --container-restart-policy=always \
    --container-privileged \
    --container-env=<envs> \
    --boot-disk-size=25 \
    --boot-disk-type=pd-balanced \
    --no-shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring \
    --labels=container-vm=<container-vm-name>

这停止了​​工作,仍然不知道为什么,但是当我手动创建模板时,一切都正常工作,所以现在作为一种解决方法,我在 docker 镜像上使用最新标签,并通过 bitbucket 管道中的脚本删除托管组中的活动实例

我会进一步调查,为什么它停止工作,我现在的 bcs 方法不合适,如果需要更改某些配置,我需要手动创建单独的模板

手动创建非常简单,我指定了机器的必要配置,附加了 docker 镜像,设置了对 sql 和存储的单独访问,并将模板放在我的网络和子网中

答案1

请允许我分享您的评论作为解决方案,以帮助遇到类似问题的其他用户。该问题围绕 VM 实例之间的通信问题,可能源于模板的自动创建。

为了解决这个问题,手动创建模板并利用 Docker 镜像上的最新标签似乎是一种可行的解决方法。此外,通过 Bitbucket Pipeline 中的脚本删除托管组中的活动实例也可以解决此问题。

相关内容