关于流量

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

虚拟机流

以下部分举例说明了 VPC 流日志如何对虚拟机 (VM) 实例发送和接收的流量进行采样。如需了解 VPC 流日志如何报告 Google Kubernetes Engine Pod 的流日志,请参阅 GKE 流

同一个 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 dest_gateway.*
src_instance.*
src_vpc.*
回复 10.30.0.2 10.10.0.2 5,342 dest_instance.*
dest_vpc.*
src_gateway.*

共享 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.*

使用 Cloud Load Balancing 的虚拟机流

对于通过 Cloud Load Balancing 的流,VPC 流日志会为通过直通式网络负载均衡器、代理网络负载均衡器或应用负载均衡器发送的流量添加注释。以下示例假定这些负载均衡器配置为内部负载均衡器。

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

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

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

通过内部直通式网络负载均衡器发送的虚拟机之间的流会同时由来源和目的地报告。

由客户端虚拟机 (192.168.1.2) 报告
请求/回复 connection.src_ip connection.dest_ip bytes_sent 注解
请求 192.168.1.2 10.240.0.200 1224 src_instance.*
src_vpc.*
load_balancing.forwarding_rule_project_id
load_balancing.reporter
load_balancing.type
load_balancing.scheme
load_balancing.forwarding_rule_name
load_balancing.backend_service_name
load_balancing.vpc.*
回复 10.240.0.200 192.168.1.2 5,342 dest_instance.*
dest_vpc.*
load_balancing.forwarding_rule_project_id
load_balancing.reporter
load_balancing.type
load_balancing.scheme
load_balancing.forwarding_rule_name
load_balancing.backend_service_name
load_balancing.vpc.*
由后端虚拟机 (10.240.0.3) 报告
请求/回复 connection.src_ip connection.dest_ip 字节 注解
请求 192.168.1.2 10.240.0.200 1224 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
load_balancing.* (除 url_map_name 以外的所有字段)
回复 10.240.0.200 192.168.1.2 5,342 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
load_balancing.* (除 url_map_name 以外的所有字段)

由于后端虚拟机知道客户端虚拟机的 IP 地址,因此它可以提供有关客户端虚拟机的 src_instancedest_instance 信息。与后端虚拟机不同,客户端虚拟机不知道后端虚拟机的 IP 地址,因此无法将有关后端虚拟机的 src_instancedest_instance 信息添加到其报告中。

VM-to-internal-proxy-Network-Load-Balancer 和 VM-to-internal-Application-Load-Balancer 流

客户端虚拟机会报告通过内部代理网络负载均衡器或内部应用负载均衡器的流量,前提是客户端虚拟机位于已启用 VPC 流日志的子网中。例如,IP 地址为 10.10.0.2 的客户端虚拟机向负载均衡器端点 10.10.0.3 发送一个 1,224 字节的请求。然后,请求到达后端。反过来,后端会响应该请求,并返回一个包含 5,342 字节的回复。请求和回复都会记录在客户端虚拟机上。客户端虚拟机的日志将显示在该虚拟机所属的 Google Cloud 项目中。

由客户端虚拟机 (10.10.0.2) 报告
请求/回复 connection.src_ip connection.dest_ip bytes_sent 注解
request 10.10.0.2 10.10.0.3 1224 src_instance.*
src_vpc.*
load_balancing.forwarding_rule_project_id
load_balancing.reporter
load_balancing.type
load_balancing.scheme
load_balancing.url_map_name(适用于应用负载均衡器)
load_balancing.forwarding_rule_name
load_balancing.vpc.*
回复 10.10.0.3 10.10.0.2 5,342 dest_instance.*
dest_vpc.*
load_balancing.forwarding_rule_project_id
load_balancing.reporter
load_balancing.type
load_balancing.scheme
load_balancing.url_map_name(适用于应用负载均衡器)
load_balancing.forwarding_rule_name
load_balancing.vpc.*

通过 Private Service Connect 的虚拟机之间的流

对于通过 Private Service Connect 的虚拟机之间的流量,VPC 流日志对 Private Service Connect 使用方和已发布服务之间的流进行采样。

指向已发布服务的 Private Service Connect 端点

通过 Private Service Connect 的虚拟机流。
通过 Private Service Connect 的虚拟机流(点击可放大)。

只要使用方虚拟机和提供方虚拟机位于启用了 VPC 流日志的子网中,系统就会报告这两个虚拟机流向 Private Service Connect 发布服务的流量。在此示例中,使用方虚拟机 10.10.0.2 向 Private Service Connect 端点 10.10.0.3 发送一个 1,224 字节的请求。在生产者 VPC 中,请求的来源 IP 地址会转换为服务连接子网中的 IP 地址,在本例中为 10.40.0.2。请求的目的地 IP 地址会转换为内部直通式网络负载均衡器 10.50.0.3 的 IP 地址。然后,请求会到达后端虚拟机 10.50.0.2,该虚拟机也位于已启用日志记录的子网中。反过来,10.50.0.2 会响应该请求,并返回一个包含 5,342 字节的回复。请求和回复都是由发出请求和做出响应的虚拟机记录的。来自使用方虚拟机的日志将在使用方项目中可用,而来自提供方虚拟机的日志将在提供方项目中提供。

由使用方虚拟机 (10.10.0.2) 报告
请求/回复 connection.src_ip connection.dest_ip bytes_sent 注解
request 10.10.0.2 10.10.0.3 1224 src_instance.*
src_vpc.*
psc.reporter
psc.psc_endpoint.*
psc.psc_attachment.*
回复 10.10.0.3 10.10.0.2 5,342 dest_instance.*
dest_vpc.*
psc.reporter
psc.psc_endpoint.*
psc.psc_attachment.*
由提供方虚拟机 (10.50.0.2) 报告
请求/回复 connection.src_ip connection.dest_ip bytes_sent 注解
请求 10.40.0.2 10.50.0.3 1224 dest_instance.*
dest_vpc.*
psc.reporter
psc.psc_attachment.*
回复 10.50.0.3 10.40.0.2 5,342 src_instance.*
src_vpc.*
psc.reporter
psc.psc_attachment.*

VM-to-Google-API 流

对于通过虚拟机的外部 IP 地址、专用 Google 访问通道或 Private Service Connect 端点到 Google API 的虚拟机流量,VPC 流日志会使用 Google API 信息注释日志记录。以下部分举例说明了 VPC 流日志如何通过 Private Service Connect 端点访问全球 Google API 的虚拟机的日志记录。

通过 Private Service Connect 将虚拟机连接到全局 Google API

通过 Private Service Connect 流向 Google API 的虚拟机流。
通过 Private Service Connect 流向 Google API 的虚拟机流(点击可放大)。

只要虚拟机位于启用了 VPC 流日志的子网中,使用方虚拟机就会报告流向 Google API 的流量。在此示例中,使用方虚拟机 10.10.0.2 向 Private Service Connect 端点 10.10.110.10 发送一个 1,224 字节的请求。请求将被转发到相应的 Google API,例如 Cloud Storage。反过来,Cloud Storage 会响应该请求,并返回一个包含 5,342 字节的回复。请求和回复都是从发出请求的虚拟机记录的。

由使用方虚拟机 (10.10.0.2) 报告
请求/回复 connection.src_ip connection.dest_ip bytes_sent 注解
request 10.10.0.2 10.10.110.10 1224 src_instance.*
src_vpc.*
psc.reporter
psc.psc_endpoint.*
dest_google_service.*
回复 10.10.110.10 10.10.0.2 5,342 src_google_service.*
dest_instance.*
dest_vpc.*
psc.reporter
psc.psc_endpoint.*

GKE 流

以下部分举例说明了 VPC 流日志如何对进出 Pod 的 GKE 流量进行采样。

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 目的地的连接会在 Cloud Load Balancing 服务上终结。根据网址将连接映射到 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.*

后续步骤