服务质量 (QoS) 可管理网络流量,并通过控制带宽、延迟时间和丢包等因素来确保关键应用的性能。当网络资源有限或拥塞时,此技术会优先处理某些类型的网络流量。您可以使用差分服务代码点 (DSCP) 标记来确定现代 IP 网络上的流量优先级。
如需了解如何使用 DSCP 标记,请参阅配置 DSCP 标记。
出口 DSCP 标记的运作方式
服务质量 (QoS) 可管理网络流量,以确保关键应用在带宽较低的情况下也能正常运行。出站 DSCP 标记使您能够在 IP 标头中标记具有 DSCP 值的数据包,以将优先级传达给下游网络设备。
支持的工作负载
出站 DSCP 标记支持为以下 Google Distributed Cloud 工作负载确定流量优先级:
- 容器工作负载:在集群上运行的 Kubernetes Pod 和服务。
- 虚拟机 (VM):通过 VM 运行时运行的 VM 工作负载,前提是它们已连接到默认网络。
DSCP 标记的资源类型
Distributed Cloud 使用特定的自定义资源来管理 DSCP 标记。您可以使用以下对象定义数据包的优先级:
EgressDSCP:一种自定义资源,用于定义要插入到所选流量数据包的 IP 标头中的特定 DSCP 值。此对象接受0到63之间的整数值。TrafficSelector:一种可精确选择网络流量的自定义资源。此资源接受从0到65535的优先级整数,默认值为1000。TrafficSelector对象引用EgressDSCP对象,以对已识别的流量应用特定操作。即使使用命名空间范围的TrafficSelector,也必须添加命名空间选择器,以明确标识发起目标流量的 pod 的命名空间。
冲突解决
当多个 TrafficSelector 资源应用于同一正文时,系统会使用特定的层次结构来确定优先级。系统会按以下顺序使用以下原则来解决冲突:
- 优先级:系统会应用优先级数值最低的
TrafficSelector。 - CIDR 范围具体程度:如果规则具有相同的优先级,系统会应用 CIDR 限制最具体(前缀匹配最长)的规则。
- 端口具体性:如果规则具有相同的优先级和 CIDR 范围,系统会应用端口最具体的规则。
如果更具体的 CIDR 规则的优先级在数值上更高(优先级更低),系统会应用范围更广的规则,并忽略更具体的规则。
阴影示例
不妨考虑以下两条应用于同一目的地的 TrafficSelector 规则:
- 规则 A:优先级
100,目标 CIDR192.168.1.0/24,标记 DSCP40。 - 规则 B:优先级
200,目标 CIDR192.168.1.15/32,标记 DSCP46。
即使规则 B 指定了更精确的目标 CIDR (192.168.1.15/32),系统也会优先考虑规则 A,因为它的优先级值在数值上更低 (100)。因此,系统会忽略规则 B,并对定向到 192.168.1.15 的所有出站流量应用 DSCP 标记 40。
限制
DSCP 标记功能在当前实现中包含以下几项限制:
- 外部出站流量:您只能标记离开集群的南北向流量,例如工作负载发起的出站流量以及从 Kubernetes 服务到外部客户端的返回流量。
- 无内部强制执行:虽然系统会标记集群内流量,但 Kubernetes 不会根据这些标记在内部强制执行 QoS 政策。
- 仅标记:系统仅标记 IP 标头。您必须配置上游物理网络基础架构,以处理实际的 QoS 强制执行。
- 支持的协议:您只能标记 IPv4 流量。
- 支持的服务:您只能为
LoadBalancer和NodePort服务标记流量。 - 虚拟机网络:您只能标记连接到默认网络的虚拟机工作负载。
- 功能启用:您必须通过向集群资源添加
preview.baremetal.cluster.gke.io/traffic-selector: "enable"注解来启用该功能。 - 回程路径默认值:对于回程路径流量,除非另行明确配置,否则 DSCP 值默认为
0。
安全注意事项
未经授权的用户可能会使用较高的 DSCP 值标记非必要流量,从而扰乱整个集群中的关键服务。
为降低安全风险,请使用 Kubernetes 基于角色的访问权限控制 (RBAC) 来限制访问权限:
- 集群级控制:将创建或修改集群级
EgressDSCP资源的权限限制为可信的集群管理员。 - 命名空间控制:按命名空间管理
TrafficSelector资源,以便用户只能影响其特定工作负载。