什么原因导致 GKE 集群中的网络出口消耗?

什么原因导致 GKE 集群中的网络出口消耗?

我在 Google Kubernetes Engine 上托管了一个不算小的集群(2 个 e2 标准节点),其中有几个 Web 服务相互通信。该架构由以下部分组成:

  • 2 个 Cloud SQL 实例,托管在 GCP 上
  • 1 个 Deployment 和 1 个 Statefulset,各 1 个副本
  • 安装 Nginx Ingress Controller,通过 HTTPS 公开两个应用程序(deploy 和 sts)
  • 一些内部工具,例如 CertManager 等

这两个应用通过内部 k8s DNS 系统相互通信,它们通过外部 IP 连接到相关的 Cloud SQL 实例,并向 APNS 和 Firebase 发送电子邮件和推送通知。它们公开 RESTful API 供我的移动应用使用。

在账单明细中,我可以看到 Nginx 入口控制器每月产生 1.5+ TB 的出口流量,我无法解释。我预计出口流量仅包含 SQL 连接以及我的 pod 发送的电子邮件消息和推送通知,因为这是集群中实际产生的唯一流量。我还可以看到 2 个应用程序消耗的出口流量,但这两个值的总和比 Nginx 消耗的流量小得多。

现在我想知道 Google 是否还向我收取我的 pod 对使用 API 的移动应用程序生成的 HTTP 响应的费用,因为我看不出我的集群如此昂贵的其他原因。

答案1

将此答案发布为社区维基,以获得更好的可见性,并为问题下的评论添加一些背景信息。

用户 @mdaniel 发布了其中一种可能的解决方案:

您是否尝试过提高 nginx 的日志详细程度,以确保没有人将其用作代理服务器?1.5TB 的流量非常大


其他解决方案可以使用原生 GCP 工具来分析流量流,例如:

其他资源VPC Flow Logs


假如说:

  • 其中有一个集群VPCFlow logs启用
  • 正在pod产生流量的

去:

  • GCP UI-> VPC Network-> Subnet that GKE cluster resides in->View flow logs

此日志的过滤器应如下:

logName:("projects/PROJECT_NAME/logs/compute.googleapis.com%2Fvpc_flows") AND resource.labels.subnetwork_id:(SUBNETWORK_ID)

PROJECT_NAMESUBNETWORK_ID被替换为占位符

您可以使用以下参数来缩小流量:

  • jsonPayload.bytes_sent (<,>) VALUE
  • jsonPayload.connection.dest_ip="IP_ADDRESS"
  • jsonPayload.connection.src_ip="IP_ADDRESS"

您还可以创建一个下沉并导出此日志以供进一步检查:

  • BigQuery
  • 云存储(存储桶)-下载并使用脚本提取数据

相关内容