Ingress对服务做限流

随着现在更多环境的服务进行上云,对网关这块能实现的功能也比较关注,除了能正常的实现代理的作用,还需要可以进行比如:熔断,链路追踪,限流等,这里主要操作下对ingress的限流。
首先还是需要在k8s集群上部署一个服务用来进行测试,我这里部署了一个nginx的pod,然后用ingress代理这个nginx服务,最后在ingress上做限流操作,通过访问ingress查看是否达到限流的作用。
下面创建ingress的yaml来代理nginx这个服务并做限流,如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress-limit
annotations:
nginx.ingress.kubernetes.io/limit-rps: “1”
spec:
ingressClassName: nginx
rules:
- host: csh-limit.com
http:
paths:
- path: /index.html
pathType: Prefix
backend:
serviceName: nginx-svc
servicePort: 80

注: nginx.ingress.kubernetes.io/limit-rps:每秒从指定 IP 接受的请求数。突发限制设置为此限制乘以突发乘数,默认乘数为5。当客户端超过此限制时,返回limit-req-status-code default: 503。

接下来开始进行创建并模拟请求看看,如下:
在这里插入图片描述
在这里插入图片描述如图所示通过模拟访问ingress已经达到限流的作用,具体的配置参数可以参考如下地址:

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#rate-limiting

### IngressIngress Controller 的概念及区别 #### 概念解释 IngressKubernetes 中的一种资源对象,主要用于管理进入集群的 HTTP 和 HTTPS 流量。它提供了一种方式来定义规则,这些规则决定了如何将外部流量路由到集群内的不同服务[^5]。例如,在一个典型的场景中,可以通过配置 Ingress 规则将 `example.com/api` 路由到某个后端服务 `api-service`。 Ingress Controller 则是一种具体的实现工具或组件,负责监听和处理 Ingress 资源的变化,并根据其定义的规则动态更新自身的配置以完成流量的实际转发[^1]。常见的 Ingress Controller 实现有 NGINX、Traefik 和 HAProxy 等。 #### 主要区别 以下是 IngressIngress Controller 的主要区别: 1. **功能定位** - Ingress 定义的是静态的流量路由规则,描述了应该如何分配流量给不同的服务。 ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress spec: rules: - host: cafe.example.com http: paths: - path: /coffee pathType: Prefix backend: service: name: coffee-svc port: number: 80 - path: /tea pathType: Prefix backend: service: name: tea-svc port: number: 80 ``` 上述 YAML 文件展示了如何通过路径 `/coffee` 和 `/tea` 将请求分别发送至对应的 Service[^3]。 - Ingress Controller 执行这些规则,实时调整自己的代理逻辑以满足 Ingress 资源的要求。 2. **部署位置** - Ingress 只是一个 API 对象,存储在 Kubernetes 集群的 etcd 数据库中。 - Ingress Controller 是运行在集群中的实际进程或 Pod,通常会暴露一个公共 IP 或负载均衡器以便接收外部流量[^4]。 3. **灵活性与扩展性** - 不同类型的 Ingress Controller 支持的功能可能有所差异,某些高级特性(如重试策略、限流等)取决于具体控制器的支持情况[^2]。 - Ingress 自身仅关注基本的路由规则,不涉及底层实现细节。 4. **工作流程** - 用户创建 Ingress 资源后,相应的 Ingress Controller 会检测到这一变化并重新加载配置文件以应用新的规则。 - 如果未安装合适的 Ingress Controller,则即使存在有效的 Ingress 资源也无法正常工作[^1]。 ```python from kubernetes import client, config config.load_kube_config() v1 = client.NetworkingV1Api() # 创建一个新的 Ingress 对象 ingress_spec = { 'rules': [ {'host': 'cafe.example.com', 'http': { 'paths': [ {'path': '/coffee', 'backend': {'service': {'name': 'coffee-svc', 'port': {'number': 80}}}}, {'path': '/tea', 'backend': {'service': {'name': 'tea-svc', 'port': {'number': 80}}}} ] }} ] } body = client.V1Ingress( api_version="networking.k8s.io/v1", kind="Ingress", metadata=client.V1ObjectMeta(name="example-ingress"), spec=client.V1IngressSpec(rules=[client.V1IngressRule(host='cafe.example.com', http=...)])) v1.create_namespaced_ingress(namespace="default", body=body) ``` 此 Python 示例演示了如何利用 Kubernetes SDK 动态生成 Ingress 资源。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值