How to remove Traefik 2.0 Middleware and IngressRoute in kubernetes once deployed

I have the following YAML (test.yaml) file that allows me to create ingress router and middleware for traefik 2

    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: test
      namespace: qa
    spec:
      entryPoints:
        - web
      routes:
        - match: Host(`my-url.com`) && PathPrefix(`/test`)
          kind: Rule
          services:
            - name: test
              port: 8000
          middlewares:
            - name: testmiddle
    ---
    apiVersion: traefik.containo.us/v1alpha1
    kind: Middleware
    metadata:
      name: testmiddle
      namespace: qa
    spec:
      stripPrefix:
        prefixes:
          - /test

Following files works. However, when I try to remove it using the following command:

kubectl delete -f test.yaml

Traefik complains that middleware and ingress router is not preset. Example of error as follows:

time="2021-07-09T18:15:12Z" level=error msg="middleware "qa-test@kubernetescrd" does not exist" routerName=qa-test-29c010046e0ec473d890@kubernetescrd entryPointName=web
time="2021-07-09T18:15:25Z" level=error msg="middleware "qa-test@kubernetescrd" does not exist" entryPointName=web routerName=qa-test-29c010046e0ec473d890@kubernetescrd
time="2021-07-09T18:15:25Z" level=error msg="middleware "qa-test@kubernetescrd" does not exist" entryPointName=web routerName=qa-test-29c010046e0ec473d890@kubernetescrd
time="2021-07-09T18:31:44Z" level=error msg="middleware "qa-test@kubernetescrd" does not exist" entryPointName=web routerName=qa-test-29c010046e0ec473d890@kubernetescrd

Do you know how to remove middleware and ingress routers without error?

Hello @kush,

When you delete multiple objects in Kubernetes, each deletion triggers an API event. Since the updates are not atomic, there is an intermediary state where the cross references won't match up.

In this case, the middleware was deleted first, and when Traefik rebuilt its configuration, the middleware referenced in the ingressRoute was indeed missing. When the ingressRoute was deleted, there was no more missing reference, so no more error was logged.

If you delete the ingressRoute first, then there will be no broken references, and you can delete the middleware afterwards.