关于流量

本页面介绍了 VPC 流日志如何报告用于常用用例的流日志。如需查看 VPC 流日志采样的流量流示例,请参阅以下部分。

同一 VPC 网络中的虚拟机之间的流量

VPC 网络内的虚拟机流。
VPC 网络内的虚拟机流。(点击可放大。)

对于同一个 VPC 网络内虚拟机之间的流,只要两个虚拟机位于启用了 VPC 流日志的子网中,系统就会报告来自两个虚拟机的流日志。在此示例中,虚拟机 10.10.0.2 向虚拟机 10.50.0.2 发送一个 1,224 字节的请求,该虚拟机也位于已启用日志记录的子网中。反过来,10.50.0.2 会响应该请求,并返回一个包含 5,342 字节的回复。请求和回复都是由发出请求和做出响应的虚拟机记录的。

由发出请求的虚拟机 (10.10.0.2) 报告
请求/回复 connection.src_ip connection.dest_ip bytes_sent 注解
request 10.10.0.2 10.50.0.2 1224 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
回复 10.50.0.2 10.10.0.2 5,342 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
由做出响应的虚拟机 (10.50.0.2) 报告
请求/回复 connection.src_ip connection.dest_ip 字节 注解
request 10.10.0.2 10.50.0.2 1224 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
回复 10.50.0.2 10.10.0.2 5,342 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*

虚拟机到外部 IP 地址的流

虚拟机到外部 IP 地址的流。
虚拟机到外部 IP 地址的流(点击可放大)。

对于在 VPC 网络中的虚拟机与具有外部 IP 地址的端点之间遍历互联网的流,仅由 VPC 网络中的虚拟机报告流日志:

  • 对于出站流,由作为流量来源的 VPC 网络虚拟机报告日志。
  • 对于入站流,由作为流量目的地的 VPC 网络虚拟机报告日志。

在此示例中,虚拟机 10.10.0.2 通过互联网与具有外部 IP 地址 203.0.113.5 的端点交换数据包。从 10.10.0.2 发送到 203.0.113.5 的出站流量(1,224 字节)由来源虚拟机 10.10.0.2 报告。从 203.0.113.5 发送到 10.10.0.2 的入站流量(5,342 字节)由该流量的目的地虚拟机 10.10.0.2 报告。

请求/回复 connection.src_ip connection.dest_ip bytes_sent 注解
request 10.10.0.2 203.0.113.5 1224 src_instance.*
src_vpc.*
dest_location.*
internet_routing_details.*
回复 203.0.113.5 10.10.0.2 5,342 dest_instance.*
dest_vpc.*
src_location.*

虚拟机到本地的流

虚拟机到本地的流。
虚拟机到本地的流(点击可放大)。

对于 VPC 网络中的虚拟机与具有内部 IP 地址的本地终端节点之间的流,仅从 VPC 网络中的虚拟机报告流日志:

  • 对于出站流,由作为流量来源的 VPC 网络虚拟机报告日志。
  • 对于入站流,由作为流量目的地的 VPC 网络虚拟机报告日志。

在此示例中,虚拟机 10.10.0.2 和本地端点 10.30.0.2 通过 VPN 网关或 Cloud Interconnect 进行连接。从 10.10.0.2 发送到 10.30.0.2 的出站流量(1,224 字节)由来源虚拟机 10.10.0.2 报告。从 10.30.0.2 发送到 10.10.0.2 的入站流量(5,342 字节)由该流量的目的地虚拟机 10.10.0.2 报告。

请求/回复 connection.src_ip connection.dest_ip bytes_sent 注解
request 10.10.0.2 10.30.0.2 1224 src_instance.*
src_vpc.*
回复 10.30.0.2 10.10.0.2 5,342 dest_instance.*
dest_vpc.*

共享 VPC 中虚拟机之间的流

共享 VPC 流。
共享 VPC 流(点击可放大)。

对于共享 VPC 中虚拟机之间的流,您可以为宿主项目中的子网启用 VPC 流日志。例如,子网 10.10.0.0/20 属于宿主项目中定义的共享 VPC 网络。您可以查看属于此子网的虚拟机发出的流日志,包括服务项目创建的日志。在此示例中,服务项目名为“web server”“recommendation”“database”。

对于虚拟机之间的流,如果两台虚拟机在同一个项目中或使用一个共享网络,则为连接中的另一个端点提供相同的宿主项目、项目 ID 的注释等。如果其他虚拟机位于不同的项目中,则不会为该虚拟机提供注释。

下表展示了由 10.10.0.1010.10.0.20 报告的流。

  • src_vpc.project_iddest_vpc.project_id 用于宿主项目,因为 VPC 子网属于宿主项目。
  • src_instance.project_iddest_instance.project_id 用于服务项目,因为实例属于服务项目。
connection
.src_ip
src_instance
.project_id
src_vpc
.project_id
connection
.dest_ip
dest_instance
.project_id
dest_vpc
.project_id
10.10.0.10 Web 服务器 host_project 10.10.0.20 recommendation host_project

服务项目不拥有共享 VPC 网络,也无法访问共享 VPC 网络的流日志。

VPC 对等互连中虚拟机之间的流

VPC 网络对等互连流(点击可放大)。
VPC 网络对等互连流(点击可放大)。

除非两台虚拟机在同一个 Google Cloud 项目中,否则对等互连 VPC 网络的虚拟机之间的流与外部端点的报告方式相同,不提供另一个虚拟机的项目和其他注释信息。如果这两个虚拟机在同一个项目中,即使位于不同的网络中,也会为另一个虚拟机提供项目和其他注释信息。

在此示例中,虚拟机 10.10.0.2(位于项目 analytics-prod 中)和虚拟机 10.50.0.2(位于项目 webserver-test 中)通过 VPC 对等互连进行连接。在项目 analytics-prod 中启用 VPC 流日志时,从 10.10.0.2 发送到 10.50.0.2 的流量(1224 字节)由虚拟机 10.10.0.2(流的来源)报告。从 10.50.0.2 发送到 10.10.0.2 的流量(5342 字节)也是由虚拟机 10.10.0.2(流的目的地)报告。

在此示例中,项目 webserver-test 中未启用 VPC 流日志,因此虚拟机 10.50.0.2 不会记录任何日志。

reporter connection.src_ip connection.dest_ip bytes_sent 注解
来源 10.10.0.2 10.50.0.2 1224 src_instance.*
src_vpc.*
目的地 10.50.0.2 10.10.0.2 5,342 dest_instance.*
dest_vpc.*

内部直通式网络负载均衡器中虚拟机之间的流

内部直通式网络负载均衡器流(点击可放大)。
内部直通式网络负载均衡器流(点击可放大)。

将虚拟机添加到内部直通式网络负载均衡器的后端服务时,Linux 或 Windows 客机环境会将此负载均衡器的 IP 地址添加到该虚拟机的本地路由表中。这样,该虚拟机就可以接受目的地设置为此负载平衡器的 IP 地址的请求数据包。当该虚拟机回复时,它会直接发送响应;但是,响应数据包的来源 IP 地址会设置为负载平衡器的 IP 地址(而不是实现负载平衡的虚拟机)。

通过内部直通式网络负载均衡器发送的虚拟机之间的流会同时由来源和目的地报告。对于示例 HTTP 请求/响应对,下表说明了观察到的流日志条目的字段。 为便于说明这一点,请考虑以下网络配置:

  • 浏览器实例,位于 192.168.1.2
  • 内部直通式网络负载均衡器,位于 10.240.0.200
  • Web 服务器实例,位于 10.240.0.3
流量方向 reporter connection.src_ip connection.dest_ip connection.src_instance connection.dest_instance
请求 SRC 192.168.1.2 10.240.0.200 浏览器实例
请求 DEST 192.168.1.2 10.240.0.200 浏览器实例 Web 服务器实例
响应 SRC 10.240.0.3 192.168.1.2 Web 服务器实例 浏览器实例
响应 DEST 10.240.0.200 192.168.1.2 浏览器实例

发出请求的虚拟机不知道哪个虚拟机将响应该请求。此外,由于另一个虚拟机会发送将内部负载平衡器 IP 作为来源地址的响应,因此它不知道哪个虚拟机做出了响应。 由于这些原因,发出请求的虚拟机无法将 dest_instance 信息添加到其报告中,只能添加 src_instance 信息。 由于做出响应的虚拟机确实知道另一个虚拟机的 IP 地址,因此它可以同时提供 src_instancedest_instance 信息。

Pod 到 ClusterIP 流

Pod 到集群 IP 地址流(点击可放大)。
Pod 到集群 IP 地址流(点击可放大)。

在此示例中,流量会从客户端 Pod (10.4.0.2) 发送到 cluster-service (10.0.32.2:80)。系统会将目的地解析为目标端口 (8080) 上选定的服务器 Pod IP 地址 (10.4.0.3)。

在节点边缘上,流会使用转换后的 IP 地址和端口进行两次采样。对于这两个采样点,我们将识别目的地 Pod 是否支持端口 8080 上的 cluster-service 服务,并在记录中添加 Service 详情和 Pod 详情。如果流量被路由到同一节点上的 Pod,则流量不会离开该节点,并且根本不会进行采样。

在此示例中,找到以下记录。

报告者 connection.src_ip connection.dst_ip bytes_sent 注解
SRC 10.4.0.2 10.4.0.3 1224 src_instance.*
src_vpc.*
src_gke_details.cluster.*
src_gke_details.pod.*
dest_instance.*
dest_vpc.*
dest_gke_details.cluster.*
dest_gke_details.pod.*
dest_gke_details.service.*
DEST 10.4.0.2 10.4.0.3 1224 src_instance.*
src_vpc.*
src_gke_details.cluster.*
src_gke_details.pod.*
dest_instance.*
dest_vpc.*
dest_gke_details.cluster.*
dest_gke_details.pod.*
dest_gke_details.service.*

GKE 外部 LoadBalancer 流

外部负载均衡器流(点击可放大)。
外部负载均衡器流(点击可放大)。

从外部 IP 地址到 GKE 服务 (35.35.35.35) 的流量将路由到集群中的节点(在此示例中为 10.0.12.2)以实现路由。默认情况下,外部直通式网络负载均衡器会在集群的所有节点之间分配流量,即使未运行相关 Pod 的节点也是如此。流量可能需要额外的跃点才能到达相关 Pod。如需了解详情,请参阅集群外部网络

然后,流量会从节点 (10.0.12.2) 路由到选定的服务器 Pod (10.4.0.2)。由于所有节点边缘都经过采样,因此系统会记录两个跃点。如果流量路由到同一节点上的 Pod(在此示例中为 10.4.0.3),则系统不会记录第二个跃点,因为它未离开该节点。第二个跃点由两个节点的采样点记录。 对于第一个跃点,我们根据负载均衡器 IP 和 Service 端口 (80) 确定 Service。对于第二个跃点,我们确定目的地 Pod 支持目标端口 (8080) 上的 Service。

在此示例中,找到以下记录。

报告者 connection.src_ip connection.dst_ip bytes_sent 注解
DEST 203.0.113.1 35.35.35.35 1224 src_location.*
dest_instance.*
dest_vpc.*
dest_gke_details.cluster.*
dest_gke_details.service.*
SRC 10.0.12.2 10.4.0.2 1224 src_instance.*
src_vpc.*
src_gke_details.cluster.*
dest_instance.*
dest_vpc.*
dest_gke_details.cluster.*
dest_gke_details.pod.*
dest_gke_details.service.*
DEST 10.0.12.2 10.4.0.2 1224 src_instance.*
src_vpc.*
src_gke_details.cluster.*
dest_instance.*
dest_vpc.*
dest_gke_details.cluster.*
dest_gke_details.pod.*
dest_gke_details.service.*

GKE Ingress 流

Ingress 流(点击可放大)。
Ingress 流(点击可放大)。

从公共 IP 地址到 Ingress 目的地的连接会在负载平衡器服务上终结。根据网址将连接映射到 NodePort Service。 为了处理请求,负载平衡器 (130.211.0.1) 会连接到其中一个集群节点 (10.0.12.2),以便使用 Service 的 NodePort 进行路由。默认情况下,在创建 Ingress 时,GKE Ingress 控制器会配置一个 HTTP(S) 负载均衡器,以将流量分配到集群中的所有节点,甚至包括未运行相关 Pod 的节点。流量可能需要额外的跃点才能到达相关 Pod。如需了解详情,请参阅集群外部网络。然后,流量从节点 (10.0.12.2) 路由到选定的服务器 Pod (10.4.0.2)。

由于所有节点边缘都经过采样,因此系统会记录两个跃点。对于第一个跃点,我们根据 Service 的 NodePort (60000) 确定 Service。对于第二个跃点,我们确定目的地 Pod 支持目标端口 (8080) 上的 Service。第二个跃点由两个节点的采样点记录。但是,如果流量路由到同一节点 (10.4.0.3) 上的 Pod,则不会记录第二个跃点,因为流量未离开该节点。

在此示例中,找到以下记录。

报告者 connection.src_ip connection.dst_ip bytes_sent 注解
DEST 130.211.0.1 10.0.12.2 1224 dest_instance.*
dest_vpc.*
dest_gke_details.cluster.*
dest_gke_details.service.*
SRC 10.0.12.2 10.4.0.2 1224 src_instance.*
src_vpc.*
src_gke_details.cluster.*
dest_instance.*
dest_vpc.*
dest_gke_details.cluster.*
dest_gke_details.pod.*
dest_gke_details.service.*
DEST 10.0.12.2 10.4.0.2 1224 src_instance.*
src_vpc.*
src_gke_details.cluster.*
dest_instance.*
dest_vpc.*
dest_gke_details.cluster.*
dest_gke_details.pod.*
dest_gke_details.service.*

使用容器原生负载平衡的 GKE Ingress 流

使用容器原生负载均衡的 Ingress 流(点击可放大)。
使用容器原生负载均衡的 Ingress 流(点击可放大)。

从公共 IP 地址发送到使用容器原生负载均衡的 Ingress 的请求会在负载均衡器终结。在此类型的 Ingress 中,Pod 是负载平衡的核心对象。然后,请求会从负载平衡器(130.211.0.1)直接发送到选定的 Pod(10.4.0.2)。我们确定目的地 Pod 支持目标端口 (8080) 上的 Service。

在此示例中,找到以下记录。

报告者 connection.src_ip connection.dst_ip bytes_sent 注解
DEST 130.211.0.1 10.4.0.2 1224 dest_instance.*
dest_vpc.*
dest_gke_details.cluster.*
dest_gke_details.pod.*
dest_gke_details.service.*

Pod 到外部流

Pod 到外部的流(点击可放大)。
Pod 到外部的流(点击可放大)。

从 Pod (10.4.0.3) 到外部 IP 地址 (203.0.113.1) 的流量会被 IP 地址伪装修改,因此,数据包从节点 IP 地址 (10.0.12.2)(而不是 Pod IP 地址)发出。默认情况下,GKE 集群配置为将流量伪装成外部目的地。如需了解详情,请参阅 IP 地址伪装代理

为了查看此流量的 Pod 注释,您可以将伪装代理配置为不伪装 Pod IP 地址。在这种情况下,如需允许将流量传入互联网,您可以配置 Cloud NAT 以处理 Pod IP 地址。如需详细了解 Cloud NAT 与 GKE,请查看 GKE 交互

在此示例中,找到以下记录。

报告者 connection.src_ip connection.dst_ip bytes_sent 注解
SRC 10.0.12.2 203.0.113.1 1224 src_instance.*
src_vpc.*
src_gke_details.cluster.*
dest_location.*
internet_routing_details.*

后续步骤