在Kubernetes中,我们可以使用一些注释来定义连接和传输速率的限制,以便减轻DDoS攻击。
首先,我们可以使用“nginx.ingress.kubernetes.io/limit-connections”注释来定义单个IP地址允许的并发连接数。当超过此限制时,将返回503错误。
其次,我们可以使用“nginx.ingress.kubernetes.io/limit-rps”注释来限制每秒接受来自给定IP的请求数量。爆发限制设置为该限制乘以爆发乘数,该默认乘数为5。当客户端超过此限制时,将返回“limit-req-status-code”默认值:503。
同样地,我们可以使用“nginx.ingress.kubernetes.io/limit-rpm”注释来限制每分钟接受来自给定IP的请求数量。爆发限制设置为该限制乘以爆发乘数,该默认乘数为5。当客户端超过此限制时,将返回“limit-req-status-code”默认值:503。
还有一个注释“nginx.ingress.kubernetes.io/limit-burst-multiplier”,它是限制速率的爆发大小的限制速率的乘数。默认爆发乘数为5,这个注释可以覆盖默认值。当客户端超过此限制时,将返回“limit-req-status-code”默认值:503。
此外,我们还可以使用“nginx.ingress.kubernetes.io/limit-rate-after”注释来定义传输给单个连接的响应在初始的多少千字节之后开始限速。要使用此功能,必须启用代理缓冲。
最后,我们可以使用“nginx.ingress.kubernetes.io/limit-rate”注释来定义每秒钟允许发送给单个连接的千字节数。如果将此值设置为零,则表示禁用速率限制。要使用此功能,必须启用代理缓冲。
除此之外,我们还可以使用“nginx.ingress.kubernetes.io/limit-whitelist”注释来定义不受速率限制的客户端IP源范围。该值是一个逗号分隔的CIDR列表。
如果在一个Ingress规则中指定多个注释,则限制将按照“limit-connections”、“limit-rpm”、“limit-rps”的顺序应用。
要在所有Ingress规则中全局配置设置,可以在NGINX ConfigMap中设置“limit-rate-after”和“limit-rate”值。在Ingress注释中设置的值将覆盖全局设置。
客户端IP地址将基于使用PROXY协议或启用“use-forwarded-headers”时从X-Forwarded-For头值设置。