Google Kubernetes Engine (GKE) 中的网络涵盖了广泛的概念,包括 Pod、服务、DNS、负载均衡、安全性和 IP 地址管理。虽然文档详细介绍了每项功能,但在遇到实际问题时,您可能不知道从何处入手。
本文档通过将常见挑战与解决这些挑战的功能和部分相关联,帮助您浏览 GKE 网络文档。每个用例都提供了一个场景,指出了挑战,并引导您查看相关文档。本文档面向必须了解和解决 GKE 中常见网络挑战的云架构师、开发者和运维团队。
如果您已经熟悉常见的网络挑战,并希望直接深入了解技术细节,请探索以下资源,以建立 GKE 网络的基础知识:
- 了解 GKE 网络基础知识。
- 了解 GKE 网络架构。
- GKE 网络术语表(用于快速回顾任何不熟悉的术语)。
用例:为 GKE 设计网络基础
在此用例中,您是 Cloud Architect,需要为新的 GKE 平台设计可伸缩、安全且可靠的网络基础。
挑战:防止 IP 地址耗尽
场景:应用的复杂性和使用量预计会增加,因此您需要设计一个可扩缩的网络,以处理增加的流量并支持 Pod、服务和节点的增长。您还需要规划 IP 地址分配,以避免耗尽
解决方案:规划 IP 地址分配方案,以考虑您需要的节点、Pod 和 Service 的数量。此规划包括为每个集群选择合适的 IP 地址范围(考虑 Pod 密度),并避免与其他网络重叠。
挑战:实施纵深防御安全策略
场景:您需要保护集群边界并强制执行零信任 Pod 间规则。
解决方案:为集群边界使用防火墙政策。如需了解详情,请参阅使用网络政策控制 Pod 和服务之间的通信。
挑战:将流量路由到不同类型的应用
场景:您需要确保其他服务和用户可以访问不同类型的应用,例如私有后端和公共 HTTP(S) 应用。
解决方案:为专用后端使用内部负载均衡器。对于公共 HTTP(S) 应用,请使用 Ingress 或 Gateway API。如需了解详情,请参阅 GKE 中的负载均衡简介。
挑战:使用可观测性工具监控和排查工作负载问题
场景:您必须修复网络流量问题,并且需要了解和监控 GKE 流量流,以便有效地诊断问题。
解决方案:实现可观测性工具,以监控网络流量并排查相关问题。
使用情形:公开新的微服务
在此使用情形中,您是一名开发者,正在 GKE 中部署新的微服务。您需要使微服务可供集群中的其他服务访问,并稍后可供外部客户端访问。
挑战:为 Pod 到 Pod 的通信提供稳定的端点
场景:您的应用需要 Pod 与其他 Pod 通信,但 Pod 使用的动态 IP 地址使这种通信不可靠。
解决方案:创建 Kubernetes 服务。ClusterIP 服务提供稳定的虚拟 IP 地址和 DNS 名称,并在 Pod 之间实现负载均衡。如需了解详情,请参阅了解 Kubernetes 服务。
挑战:公开服务以供外部访问
场景:微服务必须可从互联网访问,以便进行演示。
解决方案:创建 LoadBalancer 服务。GKE 会预配具有公共 IP 地址的区域级外部直通式网络负载均衡器。对于 HTTP(S) 流量,请考虑使用 Ingress 或 Gateway,它们提供第 7 层功能。如需了解详情,请参阅 LoadBalancer Service 简介。
挑战:分配永久的、人性化的网址
场景:服务需要为客户端提供稳定的域名。
解决方案:为自定义网域预留静态 IP 地址并配置 DNS。 如需了解详情,请参阅使用静态 IP 地址配置域名。
挑战:管理高级流量路由
场景:随着应用的发展,您需要更精细地控制流量的路由方式。例如,您可能需要执行以下操作:
- 在单个负载均衡器上托管多个网站(例如 api.example.com 和 shop.example.com),以节省费用。
- 根据网址路径将请求路由到不同的服务(例如,将
/发送到前端工作负载,并将/api/v1发送到后端工作负载)。 - 通过管理 TLS 证书,使用 HTTPS 保护您的应用。
- 使用 Canary 版本分阶段安全地部署新功能,即在全面推出之前,先将一小部分流量发送到新版本。
解决方案:使用 Gateway API。GKE 的 Gateway API 实现提供了一种强大且标准化的方式来管理此类南北向流量,支持基于路径的路由、标头匹配和流量分配等高级功能。如需了解详情,请参阅 Gateway API 简介。
应用场景:为不断增长的应用扩缩服务发现
随着基于微服务的应用的流量和复杂性不断增加,服务之间的 DNS 查询也会显著增加。虽然开发者需要了解如何在此环境中构建弹性应用,但平台和运维团队通常负责实现可伸缩的网络解决方案。
挑战:启用服务间通信
场景:Pod 需要一种可靠的方式来定位其他服务。
解决方案:GKE 提供集群内 DNS 服务(例如 kube-dns 或 Cloud DNS),可为 Service 解析稳定的 DNS 名称,从而实现可靠的 Pod 到 Pod 通信。如需了解详情,请参阅服务发现和 DNS。
挑战:大规模提升 DNS 性能
场景:查询量过高导致查找延迟。
解决方案:启用 NodeLocal DNSCache。每个节点都会在本地缓存 DNS 查询,从而缩短延迟时间。如需了解详情,请参阅 NodeLocal DNSCache 设置概览。
挑战:在整个 VPC 中提供服务发现
场景:Compute Engine 虚拟机需要访问集群内的服务。
解决方案:与 Cloud DNS 集成,以便服务 DNS 记录在整个 VPC 中解析。如需了解详情,请参阅使用 Cloud DNS for GKE。
使用情形:保护多层应用
在此使用情形中,您所在的平台工程团队正在部署一个三层应用(前端、结算、数据库),并且您必须强制执行零信任通信。
挑战:强制执行严格的流量规则
场景:只有特定服务应彼此通信。
解决方案:启用网络政策强制执行功能并应用 default deny 政策,然后定义明确的允许规则(例如,前端允许流量流向结算服务,结算服务允许流量流向数据库)。如需了解详情,请参阅为应用配置网络政策。
挑战:审核和验证网络政策
场景:安全性需要执行证明和可见性。
解决方案:启用网络政策日志记录功能,以记录允许和拒绝的连接。如需了解详情,请参阅使用网络政策日志记录。
挑战:以私密方式向使用方公开服务
应用场景:后端服务(例如数据库或 API)需要可供其他 VPC 网络中的使用方访问,同时避免将其暴露给公共互联网或处理复杂的 VPC 对等互连问题。
解决方案:使用 Private Service Connect 发布服务。 然后,使用方可以在自己的 VPC 中创建 PSC 端点,以私密且安全的方式访问您的服务。如需了解详情,请参阅使用 Private Service Connect 公开服务。
使用场景:构建安全高效的多租户 GKE 环境
作为平台工程团队的一员,您需要为多个应用团队提供 GKE 集群。您需要集中控制网络、节省 IP 地址并实施严格的安全措施。
挑战:集中控制网络
场景:多个应用团队需要各自的集群,但网络必须集中管理。
解决方案:使用共享 VPC。网络资源位于宿主项目中,但应用集群在服务项目中运行。如需了解详情,请参阅通过共享 VPC 配置集群。
挑战:高效管理有限的 IP 地址
场景:IP 地址空间有限,需要高效使用。
解决方案:调整每个节点的最大 Pod 数,并在需要时使用非 RFC 1918 范围作为 Pod IP 地址。
挑战:使用现代化的安全数据层,并使用新的数据层预配集群
场景:
- 企业需要高性能和内置政策执行功能,以支持要求苛刻的工作负载和零信任安全状况。例如,您可能正在运行对网络延迟敏感的大规模微服务,或者您可能需要在多租户集群中的应用之间强制执行严格的安全边界,以满足监管合规要求。
- 集群必须配置为使用现代网络数据平面,以实现高性能和高安全性,并且必须部署在组织的集中管理网络结构中。
解决方案:使用 GKE Dataplane V2,它基于 eBPF,可提供高性能和内置网络政策强制执行功能。如需了解详情,请参阅 GKE Dataplane V2。
端到端使用情形:部署和扩缩安全的零售应用
在此端到端场景中,平台工程团队为多个应用团队构建了标准化的 GKE 平台。该团队部署并优化了一个三层零售应用(前端、结算、数据库)。此过程包括保护、伸缩、提升机器学习工作负载的性能,以及集成高级安全设备。
下图展示了部署在 GKE 上的安全多层零售应用的端到端架构。该架构经历了以下几个阶段:
- 第 1 阶段:使用共享 VPC 和 GKE Dataplane V2 构建基础设置。
- 第 2 阶段:使用 Gateway API。
第 1 阶段:构建平台基础
挑战:为多个应用团队集中管理网络,并分配足够的 IP 地址来处理伸缩。
解决方案:
- 使用共享 VPC 进行集中控制。
- 启用 GKE Dataplane V2,以获得高性能且安全的数据平面。
- 使用 Private Service Connect 安全地连接到 GKE 控制平面。
第 2 阶段:部署和保护应用
挑战:确保可靠的服务间通信并强制执行零信任安全。
解决方案:
- 为稳定的内部端点创建 ClusterIP 服务。
- 应用具有默认拒绝基准和明确允许规则的网络政策。
第 3 阶段:公开应用并进行扩展以实现增长
挑战:提供外部访问权限,并在流量增加时缩短 DNS 查找延迟时间。
解决方案:
- 使用 Gateway API 公开前端,以实现高级流量管理。
- 分配带有 DNS 的静态 IP 地址。
- 启用 NodeLocal DNSCache 以加快查找速度。