Google Distributed Cloud (GDC) 空气隔离环境中的虚拟网络层用于管理在 GDC 组织中运行的虚拟机和 pod 之间的连接、防火墙、服务发现、负载均衡和可观测性。
GDC 网络模型
GDC 包含两个级别的多租户概念:组织和项目。项目存在于组织中,您可以将所有虚拟化和容器化的工作负载部署到组织中的某个特定项目。
组织网络
GDC 中的每个组织都有自己的隔离虚拟网络。组织内的虚拟网络是一个扁平的 IP 空间,这意味着组织中的所有工作负载都具有直接的 IP 地址连接。借助项目网络政策,您可以控制组织中不同项目内工作负载之间的访问权限。
GDC 在网络级将每个组织与其他所有组织隔离开来。一个组织中的工作负载无法直接通过 IP 地址连接到另一个组织中的工作负载。
组织有两个不同的 IP 范围:内部范围和外部范围。外部 IP 范围可从组织外部访问,而内部 IP 范围只能从组织内部访问。系统始终会从组织的内部范围为工作负载分配 IP 地址,这意味着默认情况下无法从组织外部访问这些工作负载。您必须使用项目联网部分中所述的入站流量和出站流量限制条件,明确为工作负载启用入站流量和出站流量。
项目联网
您将所有虚拟机 (VM) 和容器化工作负载部署到项目中。项目在组织内提供网络分段边界。
一个项目中的工作负载可以直接相互通信。不过,默认网络政策会阻止不同项目中的工作负载进行通信。借助项目网络政策 (ProjectNetworkPolicy
),您可以配置组织中的哪些项目可以相互通信。如果项目网络政策允许,组织中的工作负载就可以使用各自的 IP 地址在 L3 网络层相互访问。您必须为需要入站或出站流量的每个工作负载明确启用组织的出入站流量限制。
配置负载平衡器
负载平衡器可在应用的后端工作负载之间分配流量,从而确保稳定性和可用性。为 Pod 和虚拟机工作负载创建外部和内部负载平衡器。GDC 提供了三种配置负载平衡器的方法。如需了解详情,请参阅管理负载平衡器。
入站限制
用于在组织外部公开工作负载的机制因工作负载是基于虚拟机还是容器而异。
您可以使用虚拟机外部访问功能将基于虚拟机的组织外部工作负载公开。您可以为每个虚拟机启用此功能。每个虚拟机都会从组织的外部范围内获取自己的 IP 地址。
另一方面,您可以使用外部负载均衡器功能将容器化工作负载公开给组织外部。您可以创建外部负载均衡器,然后 GDC 会分配一个外部 IP 地址。然后,流量可以在一组后端 pod 工作负载之间进行负载均衡。
出站限制
您必须明确为每个项目和工作负载启用出站流量,才能与组织外部进行通信。启用出站流量后,工作负载在连接到组织外部时,会使用网络地址转换 (NAT) 将 IP 地址更改为外部 IP 地址。如需详细了解如何允许出站流量,请参阅管理组织的出站流量。
网络政策实施模型
组织内工作负载的安全态势是默认和用户创建的项目网络政策的并集。
政策执行基于第 3 层和第 4 层流量。一个流描述了一个 5 元组连接,如下所示:
- 来源 IP 地址
- 目标 IP 地址
- 来源端口
- 目标端口
- 协议,例如
TCP
或UDP
网络政策会在托管源工作负载的节点上对出站流量执行流量强制实施,并在流量到达托管目标工作负载的节点时对入站流量执行流量强制实施。因此,若要建立连接,您必须允许政策从来源离开前往目的地,并从来源到达目的地。
回复流量(例如回复 SYN 段的 SYN-ACK [同步-确认] 段)不受强制执行的约束。因此,如果允许初始流量,则始终允许回复流量。因此,您只会看到因政策强制执行而导致的连接超时,而该政策强制执行是从发起连接的客户端开始的。被拒绝的流量会在从源节点出站的数据传输期间或在目标节点入站的数据传输期间被舍弃。接收工作负载从未观察到连接。
强制执行基于允许型政策规则,这些规则是附加的。工作负载的最终强制执行结果是,流量流与应用于该工作负载的所有政策的并集之间存在“任意匹配”。如果存在多项政策,则应用于每个工作负载的规则会以累加方式组合,只要流量与至少一条规则匹配,就会被允许通过。您没有 deny 规则,只有 allow 规则。
当网络政策拒绝某个流时,您不会收到响应数据包,并且会观察到连接超时。 因此,任何被拒绝或重置的协议级连接或 HTTP 错误都不是网络强制执行的直接结果。
如需详细了解 Kubernetes 网络政策,请参阅 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-two-sorts-of-pod-isolation。