K8s Traefik CRD中间件(速率限制)不起作用

时间:2020-04-24 13:19:19

标签: traefik traefik-ingress

以下K8s实现正确创建了一个IngressRoute,但是未应用速率限制。

kind: Deployment
apiVersion: apps/v1
metadata:
  name: whoami
  labels:
    app: containous
    name: whoami
  namespace: whoami
spec:
  replicas: 2
  selector:
    matchLabels:
      app: containous
      task: whoami
  template:
    metadata:
      labels:
        app: containous
        task: whoami
    spec:
      containers:
        - name: containouswhoami
          image: containous/whoami
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: crd-traefik-test
  namespace: whoami
spec:
  ports:
    - name: http
      port: 80
  selector:
    app: containous
    task: whoami
--- 
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: rate-limiting-test
  namespace: whoami
spec:
  entryPoints: 
    - web
  routes:
     - middlewares: 
       - name: crd-service-rate-limiter
     - match: Path(`/bar`)
       kind: Rule
       services:
        - name: crd-traefik-test
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: crd-service-rate-limiter
  namespace: whoami
spec:
  rateLimit:
    average: 1
    period: 100

有人可以帮忙吗?

欢呼

1 个答案:

答案 0 :(得分:0)

这是我对定义路径前缀带的中间件资源的使用

yaml:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: auth-ingress-route
spec:
  entryPoints:
    - http
  routes:
    - match: Host(`stuff`) && PathPrefix(`/api/auth`)
      kind: Rule
      middlewares:
        - name: strip-auth-prefix
      services:
        - name: auth-srv
          port: 3000

json:

{
  "apiVersion": "traefik.containo.us/v1alpha1",
  "kind": "IngressRoute",
  "metadata": {
    "name": "auth-ingress-route"
  },
  "spec": {
    "entryPoints": [
      "http"
    ],
    "routes": [
      {
        "match": "Host(`ticketing`) && PathPrefix(`/api/auth`)",
        "kind": "Rule",
        "middlewares": [
          {
            "name": "strip-auth-prefix"
          }
        ],
        "services": [
          {
            "name": "auth-srv",
            "port": 3000
          }
        ]
      }
    ]
  }
}

这是你的版本,在 YAML 和 JSON 中

yaml:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: rate-limiting-test
  namespace: whoami
spec:
  entryPoints: 
    - web
  routes:
     - middlewares: 
       - name: crd-service-rate-limiter
     - match: Path(`/bar`)
       kind: Rule
       services:
        - name: crd-traefik-test
          port: 80

json:

{
  "apiVersion": "traefik.containo.us/v1alpha1",
  "kind": "IngressRoute",
  "metadata": {
    "name": "rate-limiting-test",
    "namespace": "whoami"
  },
  "spec": {
    "entryPoints": [
      "web"
    ],
    "routes": [
      {
        "middlewares": [
          {
            "name": "crd-service-rate-limiter"
          }
        ]
      },
      {
        "match": "Path(`/bar`)",
        "kind": "Rule",
        "services": [
          {
            "name": "crd-traefik-test",
            "port": 80
          }
        ]
      }
    ]
  }
}

我会让你弄清楚为什么它可能不起作用