首页 > 其他分享 >k8s~ingress限流机制

k8s~ingress限流机制

时间:2023-02-23 17:11:14浏览次数:47  
标签:ingress 限制 kubernetes nginx 限流 limit io k8s

Ingress限流

限速的注解定义了对连接和传输速率的限制。这些可以用来减轻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/configuration-snippet配置,如下

  annotations:
    kubernetes.io/ingress.class: nginxnginx.ingress.kubernetes.io/limit-burst-multiplier: "3"
    nginx.ingress.kubernetes.io/limit-rpm: "1"
    nginx.ingress.kubernetes.io/configuration-snippet: |
        limit_req_status 429;

rancher中的显示

  • 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列表。

解析

nginx的限流是一个队列模型。所以限流连接数为 队列长度+队列处理能力。
对应下面的配置即,rate为队列处理能力。burst为队列长度。

ingress配置

ingress控制器会把注解修改成如下nginx配置,此例子之修改了limit-rps=5或者limit-rpm=300,limit-burst-multiplier(放大系数)为默认值5。

​实例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-example-host
  annotations:
    # 每个 IP 每秒可以访问 5 次
    nginx.ingress.kubernetes.io/limit-rps: 5
    # 为计算限速漏桶算法的 burst size,和 limit-rps 的相乘系数
    nginx.ingress.kubernetes.io/limit-burst-multiplier: 5
    # 配合 limit-window 表示全局限速 100 次每秒(需要依赖 memcached)
    nginx.ingress.kubernetes.io/global-rate-limit: 100
    nginx.ingress.kubernetes.io/global-rate-limit-window: 1s
    # 限制发送给后端服务的发送速率为 1MB 每秒
    nginx.ingress.kubernetes.io/limit-rate: 1024
    # 发送给后端服务的前 10MB 数据不进行限速
    nginx.ingress.kubernetes.io/limit-rate-after: 10240
    # 超出后的响应码
    nginx.ingress.kubernetes.io/configuration-snippet: |
        limit_req_status 429;
spec:
  rules:
  - host: "www.test.com"
    http:
      paths:
      - path: "/"
        backend:
          service:
            name: test
            port:
              number: 80

标签:ingress,限制,kubernetes,nginx,限流,limit,io,k8s
From: https://www.cnblogs.com/lori/p/17148741.html

相关文章

  • k8s web访问地址映射到具体IP 配置k8s master 地址访问容器
    kubectlproxy--address='0.0.0.0' --accept-hosts='^*$'--port=8001 kubectl-nkubernetes-dashboardeditservicekubernetes-dashboardkubectl-nkubernetes......
  • k8s工作端二进制部署-kube-proxy
    本文章是 k8s二进制高可用集群部署 的分支。详细步骤请参考目录。二进制下载地址压缩包下载:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG......
  • 查看k8s集群kube-proxy的代理模式
    一、访问kube-proxy的接口与iptables模式下的kube-proxy相比,IPVS模式下的kube-proxy重定向通信的延迟要短,并且在同步代理规则时具有更好的性能。与其他代理模式......
  • Centos7 K8S基础镜像设置
    1.1硬件基础配置指标指标值CPU2核内存2048M1.2操作系统基础配置配置项配置值Date&TimeAsia/ShanghaitimezoneKeyBOARDEnglish(US)......
  • k8s-deployment扩缩容
    目录手动扩缩容手动扩缩容1.kubectlscaledeploynginx--replicas=3#非交互2.kubectleditdeploynginx#交互式......
  • k8s-deployment回滚
    更新yaml文件镜像版本--模拟更新版本1.kubectlsetimagedeploynginxnginx=nginx:1.14.2--record#非交互2.kubectleditdeploynginx#交互式更改查看历史版......
  • K8S发布应用步骤详解
    前言首先以SpringBoot应用为例介绍一下k8s的发布步骤。1.从代码仓库下载代码,比如GitLab;2.接着是进行打包,比如使用Maven;3.编写Dockerfile文件,把步骤2产生的包制作成镜像......
  • centos7.6 k8s 1.23.2 docker version 23.0.1 init
      dockerpullregistry.aliyuncs.com/google_containers/kube-apiserver:v1.23.2kubeadminit--kubernetes-version=v1.23.2--image-repositoryregistry.aliyuncs......
  • k8s工作端二进制部署-kubelet
    本文章是 k8s二进制高可用集群部署 的分支。详细步骤请参考目录。二进制下载地址压缩包下载:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG......
  • K8s的环境变量
    k8s-pod注入环境变量变量值几种定义方式:自定义变量值变量值从Pod属性获取变量值从Secret、ConfigMap获取参考yaml文件---apiVersion:v1kind:Podmetadata:n......