我正在尝试限制 Nginx 入口中服务器的并发连接数量。
Ngnix ingress 支持 max_conns 吗?我如何编辑或添加它?
max_conns=数量 限制与代理服务器的同时活动连接的最大数量 (1.11.5)。默认值为零,表示没有限制。如果服务器组不驻留在共享内存中,则该限制适用于每个工作进程。
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
使用 max_conn 的 Nginxconf 示例
upstream backend {
server backend1.example.com max_conns=3;
server backend2.example.com;}
谢谢
因此,为了添加 max_conns (或入口配置映射不支持的任何其他参数),需要做的是更改模板。
像这样更改模板 /etc/nginx/template/nginx.tmpl :
upstream {{ $upstream.Name }} {
# Load balance algorithm; empty for round robin, which is the default
{{ if ne $cfg.LoadBalanceAlgorithm "round_robin" }}
{{ $cfg.LoadBalanceAlgorithm }};
{{ end }}
{{ if $upstream.UpstreamHashBy }}
hash {{ $upstream.UpstreamHashBy }} consistent;
{{ end }}
{{ if (gt $cfg.UpstreamKeepaliveConnections 0) }}
keepalive {{ $cfg.UpstreamKeepaliveConnections }};
{{ end }}
{{ range $server := $upstream.Endpoints }}server {{ $server.Address | formatIP }}:{{ $server.Port }} max_fails={{ $server.MaxFails }} fail_timeout={{ $server.FailTimeout }} max_conns=1;
{{ end }}
}
(您可以从 pod nginx-ingress-controller 获取完整文件,只需在 pod 上运行 bash 并对其进行 cat 即可) 会成功的。 现在使用本地 nginx.tmpl 创建一个 configmap:
kubectl create configmap nginx-template --from-file=nginx.tmpl=/localpath/nginx.tmpl
然后使用此 yaml 将卷安装到部署:
volumeMounts:
- mountPath: /etc/nginx/template
name: nginx-template-volume
readOnly: true
volumes:
- name: nginx-template-volume
configMap:
name: nginx-template
items:
- key: nginx.tmpl
path: nginx.tmpl
注释 nginx.ingress.kubernetes.io/limit-connections, nginx.ingress.kubernetes.io/limit-rps,以及 nginx.ingress.kubernetes.io/limit-rpm 定义了一个限制 可由单个客户端 IP 地址打开的连接。这个可以 用于减轻 DDoS 攻击。
nginx.ingress.kubernetes.io/limit-connections:并发数 允许来自单个 IP 地址的连接。
nginx.ingress.kubernetes.io/limit-rps:可能的连接数 每秒从给定的 IP 接受。
nginx.ingress.kubernetes.io/limit-rpm:可能的连接数 每分钟都会从给定的 IP 接受。
您需要在 Ingress 规则中添加这些注释。