Repository: kubernetes/ingress-nginx
Pull request #6679 (2020-12-25 09:28:53)

Bugfix: fix incomplete log
## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
- [x] Bug fix (non-breaking change which fixes an issue)


k8s-ci-robot: Hi @nic-6443. Thanks for your PR.

I'm waiting for a [kubernetes](https://github.com/orgs/kubernetes/people) member to verify that this patch is reasonable to test. If it is, they should reply with `/ok-to-test` on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should [join the org](https://git.k8s.io/community/community-membership.md#member) to skip this step.

Once the patch is verified, the new status will be reflected by the `ok-to-test` label.

I understand the commands that are listed [here](https://go.k8s.io/bot-commands?repo=kubernetes%2Fingress-nginx).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>

k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes/ingress-nginx/pull/6679#" title="Author self-approved">nic-6443</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **bowei** after the PR has been reviewed.
You can assign the PR to them by writing `/assign @bowei` in a comment when ready.

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes%2Fingress-nginx).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/kubernetes/ingress-nginx/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["bowei"]} -->
aledbf: /ok-to-test
aledbf: /assign @ElvinEfendi 

Patch:
diff --git a/Changelog.md b/Changelog.md
index 516d02a83..86df43106 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,28 +1,5 @@
 # Changelog
 
-### 0.43.0
-
-**Image:**
-
-- `k8s.gcr.io/ingress-nginx/controller:v0.43.0@sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713`
-
-_New Features:_
-
-- Support local GeoIP database mirror [#6685](https://github.com/kubernetes/ingress-nginx/pull/6685)
-
-_Changes:_
-
-- [X] [#6676](https://github.com/kubernetes/ingress-nginx/pull/6676) include new resty lua libs in base image
-- [X] [#6680](https://github.com/kubernetes/ingress-nginx/pull/6680) Update cloudbuild gcb-docker-gcloud image
-- [X] [#6682](https://github.com/kubernetes/ingress-nginx/pull/6682) Update nginx image
-- [X] [#6683](https://github.com/kubernetes/ingress-nginx/pull/6683) Remove dead code
-- [X] [#6684](https://github.com/kubernetes/ingress-nginx/pull/6684) Update ingress-nginx test image
-- [X] [#6685](https://github.com/kubernetes/ingress-nginx/pull/6685) Add GeoIP Local mirror support
-- [X] [#6688](https://github.com/kubernetes/ingress-nginx/pull/6688) feat: allow volume-type emptyDir in controller podsecuritypolicy
-- [X] [#6691](https://github.com/kubernetes/ingress-nginx/pull/6691) Helm: Ingress config change
-- [X] [#6692](https://github.com/kubernetes/ingress-nginx/pull/6692) add string split function to template funcMap
-- [X] [#6694](https://github.com/kubernetes/ingress-nginx/pull/6694) Release helm chart
-
 ### 0.42.0
 
 **Image:**
diff --git a/Makefile b/Makefile
index 7ca9f0968..bce9bb38f 100644
--- a/Makefile
+++ b/Makefile
@@ -51,7 +51,7 @@ endif
 
 REGISTRY ?= gcr.io/k8s-staging-ingress-nginx
 
-BASE_IMAGE ?= k8s.gcr.io/ingress-nginx/nginx:v20210104-g2254a9186@sha256:edd1d06bc6892b0dfb42de7d782ceb3c50eec843b09024abf3f95ba23f4feed5
+BASE_IMAGE ?= k8s.gcr.io/ingress-nginx/nginx:v20201215-ga48ae4203@sha256:460be3452745c8bd944bee8435df962f53082e6f346b9f1742f6d803fe985ac4
 
 GOARCH=$(ARCH)
 
diff --git a/TAG b/TAG
index 6e1d91cd9..a5c8bd5e7 100644
--- a/TAG
+++ b/TAG
@@ -1,1 +1,1 @@
-v0.44.0-dev.0
\ No newline at end of file
+v0.42.0
\ No newline at end of file
diff --git a/build/run-in-docker.sh b/build/run-in-docker.sh
index 0f540b260..7e024eb76 100755
--- a/build/run-in-docker.sh
+++ b/build/run-in-docker.sh
@@ -34,7 +34,7 @@ function cleanup {
 }
 trap cleanup EXIT
 
-E2E_IMAGE=${E2E_IMAGE:-k8s.gcr.io/ingress-nginx/e2e-test-runner:v20210104-g81a8d5cd8@sha256:bfd55f589ea998f961825a9d09158d766cf621d1b8fc5d8c905aba07d9794e08}
+E2E_IMAGE=${E2E_IMAGE:-k8s.gcr.io/ingress-nginx/e2e-test-runner:v20201216-g7de30e45d@sha256:4d5ac3f6a88137480f3fb5002af3703304b9fbac6b7024090417f2b479c31e71}
 
 DOCKER_OPTS=${DOCKER_OPTS:-}
 DOCKER_IN_DOCKER_ENABLED=${DOCKER_IN_DOCKER_ENABLED:-}
diff --git a/charts/ingress-nginx/CHANGELOG.md b/charts/ingress-nginx/CHANGELOG.md
index e1a20689d..e0968e995 100644
--- a/charts/ingress-nginx/CHANGELOG.md
+++ b/charts/ingress-nginx/CHANGELOG.md
@@ -4,15 +4,6 @@ This file documents all notable changes to [ingress-nginx](https://github.com/ku
 
 ### Unreleased
 
-### 3.19.0
-
-- Update ingress-nginx v0.43.0
-
-### 3.18.0
-
-- [X] [#6688](https://github.com/kubernetes/ingress-nginx/pull/6688) Allow volume-type emptyDir in controller podsecuritypolicy
-- [X] [#6691](https://github.com/kubernetes/ingress-nginx/pull/6691) Improve parsing of helm parameters
-
 ### 3.17.0
 
 - Update ingress-nginx v0.42.0
diff --git a/charts/ingress-nginx/Chart.yaml b/charts/ingress-nginx/Chart.yaml
index 886a12b54..3ba25b3b5 100644
--- a/charts/ingress-nginx/Chart.yaml
+++ b/charts/ingress-nginx/Chart.yaml
@@ -2,8 +2,8 @@ apiVersion: v2
 name: ingress-nginx
 # When the version is modified, make sure the artifacthub.io/changes list is updated
 # Also update CHANGELOG.md
-version: 3.19.0
-appVersion: 0.43.0
+version: 3.17.0
+appVersion: 0.42.0
 home: https://github.com/kubernetes/ingress-nginx
 description: Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer
 icon: https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Nginx_logo.svg/500px-Nginx_logo.svg.png
@@ -21,4 +21,4 @@ annotations:
   # List of changes for the release in artifacthub.io
   # https://artifacthub.io/packages/helm/ingress-nginx/ingress-nginx?modal=changelog
   artifacthub.io/changes: |
-    - Update ingress-nginx v0.43.0
+    - Update ingress-nginx v0.42.0
diff --git a/charts/ingress-nginx/README.md b/charts/ingress-nginx/README.md
index e74794826..b1c6ff0f4 100644
--- a/charts/ingress-nginx/README.md
+++ b/charts/ingress-nginx/README.md
@@ -189,7 +189,7 @@ controller:
 
 An use case for this scenario is having a split-view DNS setup where the public zone CNAME records point to the external balancer URL while the private zone CNAME records point to the internal balancer URL. This way, you only need one ingress kubernetes object.
 
-Optionally you can set `controller.service.loadBalancerIP` if you need a static IP for the resulting `LoadBalancer`.
+Optionally you can set `controller.service.internal.loadBalancerIP` if you need a static IP for the resulting `LoadBalancer`.
 
 ### Ingress Admission Webhooks
 
diff --git a/charts/ingress-nginx/templates/controller-configmap.yaml b/charts/ingress-nginx/templates/controller-configmap.yaml
index 2ae715021..5b0d37105 100644
--- a/charts/ingress-nginx/templates/controller-configmap.yaml
+++ b/charts/ingress-nginx/templates/controller-configmap.yaml
@@ -15,7 +15,6 @@ data:
 {{- if or .Values.controller.proxySetHeaders .Values.controller.headers }}
   proxy-set-headers: {{ .Release.Namespace }}/{{ include "ingress-nginx.fullname" . }}-custom-proxy-headers
 {{- end }}
-{{- range $key, $value := .Values.controller.config }}
-    {{ $key | nindent 2 }}: {{ $value | quote }}
+{{- if .Values.controller.config }}
+  {{ toYaml .Values.controller.config | nindent 2 }}
 {{- end }}
-
diff --git a/charts/ingress-nginx/templates/controller-daemonset.yaml b/charts/ingress-nginx/templates/controller-daemonset.yaml
index 27d2ed101..aa8693b47 100644
--- a/charts/ingress-nginx/templates/controller-daemonset.yaml
+++ b/charts/ingress-nginx/templates/controller-daemonset.yaml
@@ -98,9 +98,6 @@ spec:
             - --validating-webhook-certificate={{ .Values.controller.admissionWebhooks.certificate }}
             - --validating-webhook-key={{ .Values.controller.admissionWebhooks.key }}
           {{- end }}
-          {{- if .Values.controller.maxmindMirror }}
-            - --maxmind-mirror={{ .Values.controller.maxmindMirror }}
-          {{- end}}
           {{- if .Values.controller.maxmindLicenseKey }}
             - --maxmind-license-key={{ .Values.controller.maxmindLicenseKey }}
           {{- end }}
diff --git a/charts/ingress-nginx/templates/controller-psp.yaml b/charts/ingress-nginx/templates/controller-psp.yaml
index 3b98b4666..bcf588c3c 100644
--- a/charts/ingress-nginx/templates/controller-psp.yaml
+++ b/charts/ingress-nginx/templates/controller-psp.yaml
@@ -20,7 +20,7 @@ spec:
   # Allow core volume types.
   volumes:
     - 'configMap'
-    - 'emptyDir'
+    #- 'emptyDir'
     #- 'projected'
     - 'secret'
     #- 'downwardAPI'
diff --git a/charts/ingress-nginx/values.yaml b/charts/ingress-nginx/values.yaml
index c4f4105cc..0af3acdcc 100644
--- a/charts/ingress-nginx/values.yaml
+++ b/charts/ingress-nginx/values.yaml
@@ -11,8 +11,8 @@ controller:
   name: controller
   image:
     repository: k8s.gcr.io/ingress-nginx/controller
-    tag: "v0.43.0"
-    digest: sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713
+    tag: "v0.42.0"
+    digest: sha256:f7187418c647af4a0039938b0ab36c2322ac3662d16be69f9cc178bfd25f7eee
     pullPolicy: IfNotPresent
     # www-data -> uid 101
     runAsUser: 101
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 0c2854fa8..483f59501 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -4,7 +4,7 @@ timeout: 1800s
 options:
   substitution_option: ALLOW_LOOSE
 steps:
-  - name: 'gcr.io/k8s-testimages/gcb-docker-gcloud:v20201130-750d12f'
+  - name: 'gcr.io/k8s-testimages/gcb-docker-gcloud:v20200824-5d057db'
     entrypoint: bash
     env:
       - DOCKER_CLI_EXPERIMENTAL=enabled
diff --git a/cmd/nginx/flags.go b/cmd/nginx/flags.go
index 0bb44c483..26408e61b 100644
--- a/cmd/nginx/flags.go
+++ b/cmd/nginx/flags.go
@@ -173,7 +173,6 @@ Takes the form "<host>:port". If not provided, no admission controller is starte
 		statusUpdateInterval = flags.Int("status-update-interval", status.UpdateInterval, "Time interval in seconds in which the status should check if an update is required. Default is 60 seconds")
 	)
 
-	flags.StringVar(&nginx.MaxmindMirror, "maxmind-mirror", "", `Maxmind mirror url (example: http://geoip.local/databases`)
 	flags.StringVar(&nginx.MaxmindLicenseKey, "maxmind-license-key", "", `Maxmind license key to download GeoLite2 Databases.
 https://blog.maxmind.com/2019/12/18/significant-changes-to-accessing-and-using-geolite2-databases`)
 	flags.StringVar(&nginx.MaxmindEditionIDs, "maxmind-edition-ids", "GeoLite2-City,GeoLite2-ASN", `Maxmind edition ids to download GeoLite2 Databases.`)
@@ -300,7 +299,7 @@ https://blog.maxmind.com/2019/12/18/significant-changes-to-accessing-and-using-g
 		config.RootCAFile = *rootCAFile
 	}
 
-	if (nginx.MaxmindLicenseKey != "" || nginx.MaxmindMirror != "") && nginx.MaxmindEditionIDs != "" {
+	if nginx.MaxmindLicenseKey != "" && nginx.MaxmindEditionIDs != "" {
 		if err := nginx.ValidateGeoLite2DBEditions(); err != nil {
 			return false, nil, err
 		}
diff --git a/deploy/static/provider/aws/deploy-tls-termination.yaml b/deploy/static/provider/aws/deploy-tls-termination.yaml
index 24171722d..ad08866cf 100644
--- a/deploy/static/provider/aws/deploy-tls-termination.yaml
+++ b/deploy/static/provider/aws/deploy-tls-termination.yaml
@@ -13,10 +13,10 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -27,10 +27,10 @@ apiVersion: v1
 kind: ConfigMap
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -49,10 +49,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 rules:
@@ -119,10 +119,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 roleRef:
@@ -139,10 +139,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -234,10 +234,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -256,10 +256,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller-admission
@@ -287,10 +287,10 @@ metadata:
     service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
     service.beta.kubernetes.io/aws-load-balancer-type: elb
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -317,10 +317,10 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -343,7 +343,7 @@ spec:
       dnsPolicy: ClusterFirst
       containers:
         - name: controller
-          image: k8s.gcr.io/ingress-nginx/controller:v0.43.0@sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713
+          image: k8s.gcr.io/ingress-nginx/controller:v0.42.0@sha256:f7187418c647af4a0039938b0ab36c2322ac3662d16be69f9cc178bfd25f7eee
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -435,10 +435,10 @@ apiVersion: admissionregistration.k8s.io/v1
 kind: ValidatingWebhookConfiguration
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   name: ingress-nginx-admission
@@ -475,10 +475,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -492,10 +492,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 rules:
@@ -516,10 +516,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 roleRef:
@@ -540,10 +540,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -565,10 +565,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -590,10 +590,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -602,10 +602,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-create
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
@@ -638,10 +638,10 @@ metadata:
     helm.sh/hook: post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -650,10 +650,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-patch
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
diff --git a/deploy/static/provider/aws/deploy.yaml b/deploy/static/provider/aws/deploy.yaml
index bc8cccc07..0467064f4 100644
--- a/deploy/static/provider/aws/deploy.yaml
+++ b/deploy/static/provider/aws/deploy.yaml
@@ -13,10 +13,10 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -27,10 +27,10 @@ apiVersion: v1
 kind: ConfigMap
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -42,10 +42,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 rules:
@@ -112,10 +112,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 roleRef:
@@ -132,10 +132,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -227,10 +227,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -249,10 +249,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller-admission
@@ -277,10 +277,10 @@ metadata:
     service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: 'true'
     service.beta.kubernetes.io/aws-load-balancer-type: nlb
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -307,10 +307,10 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -333,7 +333,7 @@ spec:
       dnsPolicy: ClusterFirst
       containers:
         - name: controller
-          image: k8s.gcr.io/ingress-nginx/controller:v0.43.0@sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713
+          image: k8s.gcr.io/ingress-nginx/controller:v0.42.0@sha256:f7187418c647af4a0039938b0ab36c2322ac3662d16be69f9cc178bfd25f7eee
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -422,10 +422,10 @@ apiVersion: admissionregistration.k8s.io/v1
 kind: ValidatingWebhookConfiguration
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   name: ingress-nginx-admission
@@ -462,10 +462,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -479,10 +479,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 rules:
@@ -503,10 +503,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 roleRef:
@@ -527,10 +527,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -552,10 +552,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -577,10 +577,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -589,10 +589,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-create
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
@@ -625,10 +625,10 @@ metadata:
     helm.sh/hook: post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -637,10 +637,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-patch
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
diff --git a/deploy/static/provider/baremetal/deploy.yaml b/deploy/static/provider/baremetal/deploy.yaml
index 093d0e702..3d0bbf6cb 100644
--- a/deploy/static/provider/baremetal/deploy.yaml
+++ b/deploy/static/provider/baremetal/deploy.yaml
@@ -13,10 +13,10 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -27,10 +27,10 @@ apiVersion: v1
 kind: ConfigMap
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -42,10 +42,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 rules:
@@ -112,10 +112,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 roleRef:
@@ -132,10 +132,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -227,10 +227,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -249,10 +249,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller-admission
@@ -274,10 +274,10 @@ kind: Service
 metadata:
   annotations:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -303,10 +303,10 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -329,7 +329,7 @@ spec:
       dnsPolicy: ClusterFirst
       containers:
         - name: controller
-          image: k8s.gcr.io/ingress-nginx/controller:v0.43.0@sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713
+          image: k8s.gcr.io/ingress-nginx/controller:v0.42.0@sha256:f7187418c647af4a0039938b0ab36c2322ac3662d16be69f9cc178bfd25f7eee
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -417,10 +417,10 @@ apiVersion: admissionregistration.k8s.io/v1
 kind: ValidatingWebhookConfiguration
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   name: ingress-nginx-admission
@@ -457,10 +457,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -474,10 +474,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 rules:
@@ -498,10 +498,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 roleRef:
@@ -522,10 +522,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -547,10 +547,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -572,10 +572,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -584,10 +584,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-create
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
@@ -620,10 +620,10 @@ metadata:
     helm.sh/hook: post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -632,10 +632,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-patch
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
diff --git a/deploy/static/provider/cloud/deploy.yaml b/deploy/static/provider/cloud/deploy.yaml
index a2da15d19..c77b33cec 100644
--- a/deploy/static/provider/cloud/deploy.yaml
+++ b/deploy/static/provider/cloud/deploy.yaml
@@ -13,10 +13,10 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -27,10 +27,10 @@ apiVersion: v1
 kind: ConfigMap
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -42,10 +42,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 rules:
@@ -112,10 +112,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 roleRef:
@@ -132,10 +132,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -227,10 +227,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -249,10 +249,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller-admission
@@ -274,10 +274,10 @@ kind: Service
 metadata:
   annotations:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -304,10 +304,10 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -330,7 +330,7 @@ spec:
       dnsPolicy: ClusterFirst
       containers:
         - name: controller
-          image: k8s.gcr.io/ingress-nginx/controller:v0.43.0@sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713
+          image: k8s.gcr.io/ingress-nginx/controller:v0.42.0@sha256:f7187418c647af4a0039938b0ab36c2322ac3662d16be69f9cc178bfd25f7eee
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -419,10 +419,10 @@ apiVersion: admissionregistration.k8s.io/v1
 kind: ValidatingWebhookConfiguration
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   name: ingress-nginx-admission
@@ -459,10 +459,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -476,10 +476,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 rules:
@@ -500,10 +500,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 roleRef:
@@ -524,10 +524,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -549,10 +549,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -574,10 +574,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -586,10 +586,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-create
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
@@ -622,10 +622,10 @@ metadata:
     helm.sh/hook: post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -634,10 +634,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-patch
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
diff --git a/deploy/static/provider/do/deploy.yaml b/deploy/static/provider/do/deploy.yaml
index 028fc6364..1d57e9507 100644
--- a/deploy/static/provider/do/deploy.yaml
+++ b/deploy/static/provider/do/deploy.yaml
@@ -13,10 +13,10 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -27,10 +27,10 @@ apiVersion: v1
 kind: ConfigMap
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -43,10 +43,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 rules:
@@ -113,10 +113,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 roleRef:
@@ -133,10 +133,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -228,10 +228,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -250,10 +250,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller-admission
@@ -276,10 +276,10 @@ metadata:
   annotations:
     service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: 'true'
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -306,10 +306,10 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -332,7 +332,7 @@ spec:
       dnsPolicy: ClusterFirst
       containers:
         - name: controller
-          image: k8s.gcr.io/ingress-nginx/controller:v0.43.0@sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713
+          image: k8s.gcr.io/ingress-nginx/controller:v0.42.0@sha256:f7187418c647af4a0039938b0ab36c2322ac3662d16be69f9cc178bfd25f7eee
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -421,10 +421,10 @@ apiVersion: admissionregistration.k8s.io/v1
 kind: ValidatingWebhookConfiguration
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   name: ingress-nginx-admission
@@ -461,10 +461,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -478,10 +478,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 rules:
@@ -502,10 +502,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 roleRef:
@@ -526,10 +526,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -551,10 +551,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -576,10 +576,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -588,10 +588,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-create
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
@@ -624,10 +624,10 @@ metadata:
     helm.sh/hook: post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -636,10 +636,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-patch
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
diff --git a/deploy/static/provider/kind/deploy.yaml b/deploy/static/provider/kind/deploy.yaml
index 431bf71a3..916764b89 100644
--- a/deploy/static/provider/kind/deploy.yaml
+++ b/deploy/static/provider/kind/deploy.yaml
@@ -13,10 +13,10 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -27,10 +27,10 @@ apiVersion: v1
 kind: ConfigMap
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -42,10 +42,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 rules:
@@ -112,10 +112,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 roleRef:
@@ -132,10 +132,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -227,10 +227,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -249,10 +249,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller-admission
@@ -274,10 +274,10 @@ kind: Service
 metadata:
   annotations:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -303,10 +303,10 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -333,7 +333,7 @@ spec:
       dnsPolicy: ClusterFirst
       containers:
         - name: controller
-          image: k8s.gcr.io/ingress-nginx/controller:v0.43.0@sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713
+          image: k8s.gcr.io/ingress-nginx/controller:v0.42.0@sha256:f7187418c647af4a0039938b0ab36c2322ac3662d16be69f9cc178bfd25f7eee
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -429,10 +429,10 @@ apiVersion: admissionregistration.k8s.io/v1
 kind: ValidatingWebhookConfiguration
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   name: ingress-nginx-admission
@@ -469,10 +469,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -486,10 +486,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 rules:
@@ -510,10 +510,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 roleRef:
@@ -534,10 +534,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -559,10 +559,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -584,10 +584,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -596,10 +596,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-create
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
@@ -632,10 +632,10 @@ metadata:
     helm.sh/hook: post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -644,10 +644,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-patch
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
diff --git a/deploy/static/provider/scw/deploy.yaml b/deploy/static/provider/scw/deploy.yaml
index 97fa8475e..3e36ace70 100644
--- a/deploy/static/provider/scw/deploy.yaml
+++ b/deploy/static/provider/scw/deploy.yaml
@@ -13,10 +13,10 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -27,10 +27,10 @@ apiVersion: v1
 kind: ConfigMap
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -43,10 +43,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 rules:
@@ -113,10 +113,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
   name: ingress-nginx
 roleRef:
@@ -133,10 +133,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -228,10 +228,10 @@ apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx
@@ -250,10 +250,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller-admission
@@ -276,10 +276,10 @@ metadata:
   annotations:
     service.beta.kubernetes.io/scw-loadbalancer-proxy-protocol-v2: 'true'
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -306,10 +306,10 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: controller
   name: ingress-nginx-controller
@@ -332,7 +332,7 @@ spec:
       dnsPolicy: ClusterFirst
       containers:
         - name: controller
-          image: k8s.gcr.io/ingress-nginx/controller:v0.43.0@sha256:9bba603b99bf25f6d117cf1235b6598c16033ad027b143c90fa5b3cc583c5713
+          image: k8s.gcr.io/ingress-nginx/controller:v0.42.0@sha256:f7187418c647af4a0039938b0ab36c2322ac3662d16be69f9cc178bfd25f7eee
           imagePullPolicy: IfNotPresent
           lifecycle:
             preStop:
@@ -421,10 +421,10 @@ apiVersion: admissionregistration.k8s.io/v1
 kind: ValidatingWebhookConfiguration
 metadata:
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   name: ingress-nginx-admission
@@ -461,10 +461,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -478,10 +478,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 rules:
@@ -502,10 +502,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
 roleRef:
@@ -526,10 +526,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -551,10 +551,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade,post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -576,10 +576,10 @@ metadata:
     helm.sh/hook: pre-install,pre-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -588,10 +588,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-create
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
@@ -624,10 +624,10 @@ metadata:
     helm.sh/hook: post-install,post-upgrade
     helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
   labels:
-    helm.sh/chart: ingress-nginx-3.19.0
+    helm.sh/chart: ingress-nginx-3.17.0
     app.kubernetes.io/name: ingress-nginx
     app.kubernetes.io/instance: ingress-nginx
-    app.kubernetes.io/version: 0.43.0
+    app.kubernetes.io/version: 0.42.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/component: admission-webhook
   namespace: ingress-nginx
@@ -636,10 +636,10 @@ spec:
     metadata:
       name: ingress-nginx-admission-patch
       labels:
-        helm.sh/chart: ingress-nginx-3.19.0
+        helm.sh/chart: ingress-nginx-3.17.0
         app.kubernetes.io/name: ingress-nginx
         app.kubernetes.io/instance: ingress-nginx
-        app.kubernetes.io/version: 0.43.0
+        app.kubernetes.io/version: 0.42.0
         app.kubernetes.io/managed-by: Helm
         app.kubernetes.io/component: admission-webhook
     spec:
diff --git a/docs/deploy/index.md b/docs/deploy/index.md
index cbf32aed7..40279e0cc 100644
--- a/docs/deploy/index.md
+++ b/docs/deploy/index.md
@@ -50,7 +50,7 @@ Kubernetes is available in Docker for Mac (from [version 18.06.0-ce](https://doc
 [enable]: https://docs.docker.com/docker-for-mac/#kubernetes
 
 ```console
-kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/cloud/deploy.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.42.0/deploy/static/provider/cloud/deploy.yaml
 ```
 
 #### minikube
@@ -68,7 +68,7 @@ In AWS we use a Network load balancer (NLB) to expose the NGINX Ingress controll
 ##### Network Load Balancer (NLB)
 
 ```console
-kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/aws/deploy.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.42.0/deploy/static/provider/aws/deploy.yaml
 ```
 
 ##### TLS termination in AWS Load Balancer (ELB)
@@ -77,10 +77,10 @@ In some scenarios is required to terminate TLS in the Load Balancer and not in t
 
 For this purpose we provide a template:
 
-- Download [deploy-tls-termination.yaml](https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/aws/deploy-tls-termination.yaml)
+- Download [deploy-tls-termination.yaml](https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.42.0/deploy/static/provider/aws/deploy-tls-termination.yaml)
 
 ```console
-wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/aws/deploy-tls-termination.yaml
+wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.42.0/deploy/static/provider/aws/deploy-tls-termination.yaml
 ```
 
 - Edit the file and change:
@@ -126,7 +126,7 @@ More information with regards to timeouts can be found in the [official AWS docu
 
 
 ```console
-kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/cloud/deploy.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.42.0/deploy/static/provider/cloud/deploy.yaml
 ```
 
 !!! failure Important
@@ -135,19 +135,19 @@ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/cont
 #### Azure
 
 ```console
-kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/cloud/deploy.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.42.0/deploy/static/provider/cloud/deploy.yaml
 ```
 
 #### Digital Ocean
 
 ```console
-kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/do/deploy.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.42.0/deploy/static/provider/do/deploy.yaml
 ```
 
 #### Scaleway
 
 ```console
-kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/scw/deploy.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.42.0/deploy/static/provider/scw/deploy.yaml
 ```
 
 More information with regards to Azure annotations for ingress controller can be found in the [official AKS documentation](https://docs.microsoft.com/en-us/azure/aks/ingress-internal-ip#create-an-ingress-controller).
@@ -157,7 +157,7 @@ More information with regards to Azure annotations for ingress controller can be
 Using [NodePort](https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport):
 
 ```console
-kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/baremetal/deploy.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.42.0/deploy/static/provider/baremetal/deploy.yaml
 ```
 !!! tip
     Applicable on kubernetes clusters deployed on bare-metal with generic Linux distro(Such as CentOs, Ubuntu ...).
diff --git a/docs/user-guide/nginx-configuration/annotations.md b/docs/user-guide/nginx-configuration/annotations.md
index 77cd3ed07..37e1f8761 100755
--- a/docs/user-guide/nginx-configuration/annotations.md
+++ b/docs/user-guide/nginx-configuration/annotations.md
@@ -56,10 +56,6 @@ You can add these Kubernetes annotations to specific Ingress objects to customiz
 |[nginx.ingress.kubernetes.io/http2-push-preload](#http2-push-preload)|"true" or "false"|
 |[nginx.ingress.kubernetes.io/limit-connections](#rate-limiting)|number|
 |[nginx.ingress.kubernetes.io/limit-rps](#rate-limiting)|number|
-|[nginx.ingress.kubernetes.io/global-rate-limit](#global-rate-limiting)|number|
-|[nginx.ingress.kubernetes.io/global-rate-limit-window](#global-rate-limiting)|duration|
-|[nginx.ingress.kubernetes.io/global-rate-limit-key](#global-rate-limiting)|string|
-|[nginx.ingress.kubernetes.io/global-rate-limit-ignored-cidrs](#global-rate-limiting)|string|
 |[nginx.ingress.kubernetes.io/permanent-redirect](#permanent-redirect)|string|
 |[nginx.ingress.kubernetes.io/permanent-redirect-code](#permanent-redirect-code)|number|
 |[nginx.ingress.kubernetes.io/temporal-redirect](#temporal-redirect)|string|
@@ -478,7 +474,7 @@ By default the controller redirects all requests to an existing service that pro
 !!! note
     For more information please see [global-auth-url](./configmap.md#global-auth-url).
 
-### Rate Limiting
+### Rate limiting
 
 These annotations define limits on connections and transmission rates.  These can be used to mitigate [DDoS Attacks](https://www.nginx.com/blog/mitigating-ddos-attacks-with-nginx-and-nginx-plus).
 
@@ -496,46 +492,6 @@ To configure settings globally for all Ingress rules, the `limit-rate-after` and
 
 The client IP address will be set based on the use of [PROXY protocol](./configmap.md#use-proxy-protocol) or from the `X-Forwarded-For` header value when [use-forwarded-headers](./configmap.md#use-forwarded-headers) is enabled.
 
-### Global Rate Limiting
-
-**Note:** Be careful when configuring both (Local) Rate Limiting and Global Rate Limiting at the same time.
-They are two completely different rate limiting implementations. Whichever limit exceeds first will reject the
-requests. It might be a good idea to configure both of them to ease load on Global Rate Limiting backend
-in cases of spike in traffic.
-
-The stock NGINX rate limiting does not share its counters among different NGINX instances.
-Given that most ingress-nginx deployments are elastic and number of replicas can change any day
-it is impossible to configure a proper rate limit using stock NGINX functionalities.
-Global Rate Limiting overcome this by using [lua-resty-global-throttle](https://github.com/ElvinEfendi/lua-resty-global-throttle). `lua-resty-global-throttle` shares its counters via a central store such as `memcached`.
-The obvious shortcoming of this is users have to deploy and operate a `memcached` instance
-in order to benefit from this functionality. Configure the `memcached`
-using [these configmap settings](./configmap.md#global-rate-limit).
-
-**Here are a few remarks for ingress-nginx integration of `lua-resty-global-throttle`:**
-
-1. We minimize `memcached` access by caching exceeding limit decisions. The expiry of
-cache entry is the desired delay `lua-resty-global-throttle` calculates for us.
-The Lua Shared Dictionary used for that is `global_throttle_cache`. Currently its size defaults to 10M.
-Customize it as per your needs using [lua-shared-dicts](./configmap.md#lua-shared-dicts).
-When we fail to cache the exceeding limit decision then we log an NGINX error. You can monitor
-for that error to decide if you need to bump the cache size. Without cache the cost of processing a
-request is two memcached commands: `GET`, and `INCR`. With the cache it is only `INCR`.
-1. Log NGINX variable `$global_rate_limit_exceeding`'s value to have some visibility into
-what portion of requests are rejected (value `y`), whether they are rejected using cached decision (value `c`),
-or if they are not rejeced (default value `n`). You can use [log-format-upstream](./configmap.md#log-format-upstream)
-to include that in access logs.
-1. In case of an error it will log the error message and **fail open**.
-1. The annotations below creates Global Rate Limiting instance per ingress.
-That means if there are multuple paths configured under the same ingress,
-the Global Rate Limiting will count requests to all the paths under the same counter.
-Extract a path out into its own ingres if you need to isolate a certain path.
-
-
-* `nginx.ingress.kubernetes.io/global-rate-limit`: Configures maximum allowed number of requests per window. Required.
-* `nginx.ingress.kubernetes.io/global-rate-limit-window`: Configures a time window (i.e `1m`) that the limit is applied. Required.
-* `nginx.ingress.kubernetes.io/global-rate-limit-key`: Configures a key for counting the samples. Defaults to `$remote_addr`. You can also combine multiple NGINX variables here, like `${remote_addr}-${http_x_api_client}` which would mean the limit will be applied to requests coming from the same API client (indicated by `X-API-Client` HTTP request header) with the same source IP address.
-* `nginx.ingress.kubernetes.io/global-rate-limit-ignored-cidrs`: comma separated list of IPs and CIDRs to match client IP against. When there's a match request is not considered for rate limiting.
-
 ### Permanent Redirect
 
 This annotation allows to return a permanent redirect (Return Code 301) instead of sending data to the upstream.  For example `nginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com` would redirect everything to Google.
diff --git a/docs/user-guide/nginx-configuration/configmap.md b/docs/user-guide/nginx-configuration/configmap.md
index 0bead1c34..82f318874 100755
--- a/docs/user-guide/nginx-configuration/configmap.md
+++ b/docs/user-guide/nginx-configuration/configmap.md
@@ -192,12 +192,6 @@ The following table shows a configuration option's name, type, and the default v
 |[block-referers](#block-referers)|[]string|""|
 |[proxy-ssl-location-only](#proxy-ssl-location-only)|bool|"false"|
 |[default-type](#default-type)|string|"text/html"|
-|[global-rate-limit-memcached-host](#global-rate-limit)|string|""|
-|[global-rate-limit-memcached-port](#global-rate-limit)|int|11211|
-|[global-rate-limit-memcached-connect-timeout](#global-rate-limit)|int|50|
-|[global-rate-limit-memcached-max-idle-timeout](#global-rate-limit)|int|10000|
-|[global-rate-limit-memcached-pool-size](#global-rate-limit)|int|50|
-|[global-rate-limit-status-code](#global-rate-limit)|int|429|
 
 ## add-headers
 
@@ -1158,19 +1152,3 @@ _**default:**_ text/html
 
 _References:_
 [http://nginx.org/en/docs/http/ngx_http_core_module.html#default_type](http://nginx.org/en/docs/http/ngx_http_core_module.html#default_type)
-
-## global-rate-limit
-
-* `global-rate-limit-status-code`: configure HTTP status code to return when rejecting requests. Defaults to 429.
-
-Configure `memcached` client for [Global Rate Limiting](https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md#global-rate-limiting).
-
-* `global-rate-limit-memcached-host`: IP/FQDN of memcached server to use. Required to enable Global Rate Limiting.
-* `global-rate-limit-memcached-port`: port of memcached server to use. Defaults default memcached port of `11211`.
-* `global-rate-limit-memcached-connect-timeout`: configure timeout for connect, send and receive operations. Unit is millisecond. Defaults to 50ms.
-* `global-rate-limit-memcached-max-idle-timeout`: configure timeout for cleaning idle connections. Unit is millisecond. Defaults to 50ms. 
-* `global-rate-limit-memcached-pool-size`: configure number of max connections to keep alive. Make sure your `memcached` server can handle
-`global-rate-limit-memcached-pool-size * worker-processes * <number of ingress-nginx replicas>` simultaneous connections.
-
-These settings get used by [lua-resty-global-throttle](https://github.com/ElvinEfendi/lua-resty-global-throttle)
-that ingress-nginx includes. Refer to the link to learn more about `lua-resty-global-throttle`.
diff --git a/docs/user-guide/nginx-configuration/custom-template.md b/docs/user-guide/nginx-configuration/custom-template.md
index 211223025..0cbb540c4 100644
--- a/docs/user-guide/nginx-configuration/custom-template.md
+++ b/docs/user-guide/nginx-configuration/custom-template.md
@@ -30,7 +30,6 @@ In addition to the built-in functions provided by the Go package the following f
 - hasSuffix: [strings.HasSuffix](https://golang.org/pkg/strings/#HasSuffix)
 - toUpper: [strings.ToUpper](https://golang.org/pkg/strings/#ToUpper)
 - toLower: [strings.ToLower](https://golang.org/pkg/strings/#ToLower)
-- split: [strings.Split](https://golang.org/pkg/strings/#Split)
 - quote: wraps a string in double quotes
 - buildLocation: helps to build the NGINX Location section in each server
 - buildProxyPass: builds the reverse proxy configuration
diff --git a/images/cfssl/cloudbuild.yaml b/images/cfssl/cloudbuild.yaml
index d80d2aeaf..66b227847 100644
--- a/images/cfssl/cloudbuild.yaml
+++ b/images/cfssl/cloudbuild.yaml
@@ -2,7 +2,7 @@ timeout: 600s
 options:
   substitution_option: ALLOW_LOOSE
 steps:
-  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20201130-750d12f
+  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20200824-5d057db
     entrypoint: bash
     env:
       - DOCKER_CLI_EXPERIMENTAL=enabled
diff --git a/images/echo/Makefile b/images/echo/Makefile
index 7eaf3778b..f45a76467 100644
--- a/images/echo/Makefile
+++ b/images/echo/Makefile
@@ -36,7 +36,7 @@ build: ensure-buildx
 		--platform=${PLATFORMS} $(OUTPUT) \
 		--progress=$(PROGRESS) \
 		--pull \
-		--build-arg BASE_IMAGE=k8s.gcr.io/ingress-nginx/nginx:v20210104-g2254a9186@sha256:edd1d06bc6892b0dfb42de7d782ceb3c50eec843b09024abf3f95ba23f4feed5 \
+		--build-arg BASE_IMAGE=k8s.gcr.io/ingress-nginx/nginx:v20201215-ga48ae4203@sha256:460be3452745c8bd944bee8435df962f53082e6f346b9f1742f6d803fe985ac4 \
 		--build-arg LUAROCKS_VERSION=3.3.1 \
 		--build-arg LUAROCKS_SHA=837481e408f7c06b59befe7ec194537c657687d624894bca7f79034302141a34 \
 		-t $(IMAGE):$(TAG) rootfs
diff --git a/images/echo/cloudbuild.yaml b/images/echo/cloudbuild.yaml
index 3e4d67d06..82281b058 100644
--- a/images/echo/cloudbuild.yaml
+++ b/images/echo/cloudbuild.yaml
@@ -2,7 +2,7 @@ timeout: 1200s
 options:
   substitution_option: ALLOW_LOOSE
 steps:
-  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20201130-750d12f
+  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20200824-5d057db
     entrypoint: bash
     env:
       - DOCKER_CLI_EXPERIMENTAL=enabled
diff --git a/images/fastcgi-helloserver/cloudbuild.yaml b/images/fastcgi-helloserver/cloudbuild.yaml
index d80d2aeaf..66b227847 100644
--- a/images/fastcgi-helloserver/cloudbuild.yaml
+++ b/images/fastcgi-helloserver/cloudbuild.yaml
@@ -2,7 +2,7 @@ timeout: 600s
 options:
   substitution_option: ALLOW_LOOSE
 steps:
-  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20201130-750d12f
+  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20200824-5d057db
     entrypoint: bash
     env:
       - DOCKER_CLI_EXPERIMENTAL=enabled
diff --git a/images/httpbin/cloudbuild.yaml b/images/httpbin/cloudbuild.yaml
index 02f28b8ca..458dbc348 100644
--- a/images/httpbin/cloudbuild.yaml
+++ b/images/httpbin/cloudbuild.yaml
@@ -4,7 +4,7 @@ options:
   # job builds a multi-arch docker image for amd64,arm,arm64 and s390x.
   machineType: N1_HIGHCPU_8
 steps:
-  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20201130-750d12f
+  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20200824-5d057db
     entrypoint: bash
     env:
       - DOCKER_CLI_EXPERIMENTAL=enabled
diff --git a/images/nginx/README.md b/images/nginx/README.md
index cb9cb3cce..c6fe10efd 100644
--- a/images/nginx/README.md
+++ b/images/nginx/README.md
@@ -18,7 +18,7 @@ This image provides a default configuration file with no backend servers.
 _Using docker_
 
 ```console
-docker run -v /some/nginx.con:/etc/nginx/nginx.conf:ro k8s.gcr.io/ingress-nginx/nginx:v20210104-g2254a9186@sha256:edd1d06bc6892b0dfb42de7d782ceb3c50eec843b09024abf3f95ba23f4feed5
+docker run -v /some/nginx.con:/etc/nginx/nginx.conf:ro k8s.gcr.io/ingress-nginx/nginx:v20201215-ga48ae4203@sha256:460be3452745c8bd944bee8435df962f53082e6f346b9f1742f6d803fe985ac4
 ```
 
 _Creating a replication controller_
diff --git a/images/nginx/cloudbuild.yaml b/images/nginx/cloudbuild.yaml
index ba09d2acd..0201403b4 100644
--- a/images/nginx/cloudbuild.yaml
+++ b/images/nginx/cloudbuild.yaml
@@ -4,7 +4,7 @@ options:
   # job builds a multi-arch docker image for amd64,arm,arm64 and s390x.
   machineType: N1_HIGHCPU_32
 steps:
-  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20201130-750d12f
+  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20200824-5d057db
     entrypoint: bash
     env:
       - DOCKER_CLI_EXPERIMENTAL=enabled
diff --git a/images/nginx/rc.yaml b/images/nginx/rc.yaml
index 147cc3f6c..a840486c4 100644
--- a/images/nginx/rc.yaml
+++ b/images/nginx/rc.yaml
@@ -38,7 +38,7 @@ spec:
     spec:
       containers:
         - name: nginx
-          image: k8s.gcr.io/ingress-nginx/nginx:v20210104-g2254a9186@sha256:edd1d06bc6892b0dfb42de7d782ceb3c50eec843b09024abf3f95ba23f4feed5
+          image: k8s.gcr.io/ingress-nginx/nginx:v20201215-ga48ae4203@sha256:460be3452745c8bd944bee8435df962f53082e6f346b9f1742f6d803fe985ac4
           ports:
             - containerPort: 80
             - containerPort: 443
diff --git a/images/nginx/rootfs/Dockerfile b/images/nginx/rootfs/Dockerfile
index 67d639ee2..a8cbd2a66 100644
--- a/images/nginx/rootfs/Dockerfile
+++ b/images/nginx/rootfs/Dockerfile
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 
-FROM alpine:3.12 as builder
+FROM alpine:3.11 as builder
 
 COPY . /
 
diff --git a/images/nginx/rootfs/build.sh b/images/nginx/rootfs/build.sh
index c2c957963..b175b6953 100755
--- a/images/nginx/rootfs/build.sh
+++ b/images/nginx/rootfs/build.sh
@@ -52,10 +52,6 @@ export LUA_RESTY_HTTP=0.15
 export LUA_RESTY_LOCK=0.08
 export LUA_RESTY_UPLOAD_VERSION=0.10
 export LUA_RESTY_STRING_VERSION=0.12
-export LUA_RESTY_MEMCACHED_VERSION=0.15
-export LUA_RESTY_REDIS_VERSION=0.29
-export LUA_RESTY_IPMATCHER_VERSION=1a0a1c58fd085b15eedee58de8b5f45c27aff7bc
-export LUA_RESTY_GLOBAL_THROTTLE_VERSION=0.2.0
 
 export BUILD_PATH=/tmp/build
 
@@ -114,8 +110,7 @@ apk add \
   bc \
   unzip \
   dos2unix \
-  yaml-cpp \
-  coreutils
+  yaml-cpp
 
 mkdir -p /etc/nginx
 
@@ -213,17 +208,6 @@ get_src 4aca34f324d543754968359672dcf5f856234574ee4da360ce02c778d244572a \
 get_src 987d5754a366d3ccbf745d2765f82595dcff5b94ba6c755eeb6d310447996f32 \
         "https://github.com/ledgetech/lua-resty-http/archive/v$LUA_RESTY_HTTP.tar.gz"
 
-get_src 8257e8fbf78eb2cc2cf2fdca2fda3c2e755f7d3222e7d15cc322111a0f720f9c \
-        "https://github.com/openresty/lua-resty-memcached/archive/v$LUA_RESTY_MEMCACHED_VERSION.tar.gz"
-
-get_src 3f602af507aacd1f7aaeddfe7b77627fcde095fe9f115cb9d6ad8de2a52520e1 \
-        "https://github.com/openresty/lua-resty-redis/archive/v$LUA_RESTY_REDIS_VERSION.tar.gz"
-
-get_src d0eacda122ab36585936256cb222ea9147bc5ad1fc3f24fd3748475653dd27ad \
-        "https://github.com/api7/lua-resty-ipmatcher/archive/$LUA_RESTY_IPMATCHER_VERSION.tar.gz"
-
-get_src 0fb790e394510e73fdba1492e576aaec0b8ee9ef08e3e821ce253a07719cf7ea \
-        "https://github.com/ElvinEfendi/lua-resty-global-throttle/archive/v$LUA_RESTY_GLOBAL_THROTTLE_VERSION.tar.gz"
 
 # improve compilation times
 CORES=$(($(grep -c ^processor /proc/cpuinfo) - 1))
@@ -584,18 +568,6 @@ make install
 cd "$BUILD_PATH/lua-resty-string-$LUA_RESTY_STRING_VERSION"
 make install
 
-cd "$BUILD_PATH/lua-resty-memcached-$LUA_RESTY_MEMCACHED_VERSION"
-make install
-
-cd "$BUILD_PATH/lua-resty-redis-$LUA_RESTY_REDIS_VERSION"
-make install
-
-cd "$BUILD_PATH/lua-resty-ipmatcher-$LUA_RESTY_IPMATCHER_VERSION"
-INST_LUADIR=/usr/local/lib/lua make install
-
-cd "$BUILD_PATH/lua-resty-global-throttle-$LUA_RESTY_GLOBAL_THROTTLE_VERSION"
-make install
-
 # mimalloc
 cd "$BUILD_PATH"
 git clone --depth=1 -b v1.6.7 https://github.com/microsoft/mimalloc
diff --git a/internal/ingress/annotations/annotations.go b/internal/ingress/annotations/annotations.go
index 2c3b3c1cf..0e9b7f214 100644
--- a/internal/ingress/annotations/annotations.go
+++ b/internal/ingress/annotations/annotations.go
@@ -40,7 +40,6 @@ import (
 	"k8s.io/ingress-nginx/internal/ingress/annotations/customhttperrors"
 	"k8s.io/ingress-nginx/internal/ingress/annotations/defaultbackend"
 	"k8s.io/ingress-nginx/internal/ingress/annotations/fastcgi"
-	"k8s.io/ingress-nginx/internal/ingress/annotations/globalratelimit"
 	"k8s.io/ingress-nginx/internal/ingress/annotations/http2pushpreload"
 	"k8s.io/ingress-nginx/internal/ingress/annotations/influxdb"
 	"k8s.io/ingress-nginx/internal/ingress/annotations/ipwhitelist"
@@ -95,7 +94,6 @@ type Ingress struct {
 	Proxy              proxy.Config
 	ProxySSL           proxyssl.Config
 	RateLimit          ratelimit.Config
-	GlobalRateLimit    globalratelimit.Config
 	Redirect           redirect.Config
 	Rewrite            rewrite.Config
 	Satisfy            string
@@ -144,7 +142,6 @@ func NewAnnotationExtractor(cfg resolver.Resolver) Extractor {
 			"Proxy":                proxy.NewParser(cfg),
 			"ProxySSL":             proxyssl.NewParser(cfg),
 			"RateLimit":            ratelimit.NewParser(cfg),
-			"GlobalRateLimit":      globalratelimit.NewParser(cfg),
 			"Redirect":             redirect.NewParser(cfg),
 			"Rewrite":              rewrite.NewParser(cfg),
 			"Satisfy":              satisfy.NewParser(cfg),
diff --git a/internal/ingress/annotations/globalratelimit/main.go b/internal/ingress/annotations/globalratelimit/main.go
deleted file mode 100644
index e4b18bd66..000000000
--- a/internal/ingress/annotations/globalratelimit/main.go
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-Copyright 2020 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package globalratelimit
-
-import (
-	"strings"
-	"time"
-
-	"github.com/pkg/errors"
-	networking "k8s.io/api/networking/v1beta1"
-
-	"k8s.io/ingress-nginx/internal/ingress/annotations/parser"
-	ing_errors "k8s.io/ingress-nginx/internal/ingress/errors"
-	"k8s.io/ingress-nginx/internal/ingress/resolver"
-	"k8s.io/ingress-nginx/internal/net"
-	"k8s.io/ingress-nginx/internal/sets"
-)
-
-const defaultKey = "$remote_addr"
-
-// Config encapsulates all global rate limit attributes
-type Config struct {
-	Namespace    string   `json:"namespace"`
-	Limit        int      `json:"limit"`
-	WindowSize   int      `json:"window-size"`
-	Key          string   `json:"key"`
-	IgnoredCIDRs []string `json:"ignored-cidrs"`
-}
-
-// Equal tests for equality between two Config types
-func (l *Config) Equal(r *Config) bool {
-	if l.Namespace != r.Namespace {
-		return false
-	}
-	if l.Limit != r.Limit {
-		return false
-	}
-	if l.WindowSize != r.WindowSize {
-		return false
-	}
-	if l.Key != r.Key {
-		return false
-	}
-	if len(l.IgnoredCIDRs) != len(r.IgnoredCIDRs) || !sets.StringElementsMatch(l.IgnoredCIDRs, r.IgnoredCIDRs) {
-		return false
-	}
-
-	return true
-}
-
-type globalratelimit struct {
-	r resolver.Resolver
-}
-
-// NewParser creates a new globalratelimit annotation parser
-func NewParser(r resolver.Resolver) parser.IngressAnnotation {
-	return globalratelimit{r}
-}
-
-// Parse extracts globalratelimit annotations from the given ingress
-// and returns them structured as Config type
-func (a globalratelimit) Parse(ing *networking.Ingress) (interface{}, error) {
-	config := &Config{}
-
-	limit, _ := parser.GetIntAnnotation("global-rate-limit", ing)
-	rawWindowSize, _ := parser.GetStringAnnotation("global-rate-limit-window", ing)
-
-	if limit == 0 || len(rawWindowSize) == 0 {
-		return config, nil
-	}
-
-	windowSize, err := time.ParseDuration(rawWindowSize)
-	if err != nil {
-		return config, ing_errors.LocationDenied{
-			Reason: errors.Wrap(err, "failed to parse 'global-rate-limit-window' value"),
-		}
-	}
-
-	key, _ := parser.GetStringAnnotation("global-rate-limit-key", ing)
-	if len(key) == 0 {
-		key = defaultKey
-	}
-
-	rawIgnoredCIDRs, _ := parser.GetStringAnnotation("global-rate-limit-ignored-cidrs", ing)
-	ignoredCIDRs, err := net.ParseCIDRs(rawIgnoredCIDRs)
-	if err != nil {
-		return nil, err
-	}
-
-	config.Namespace = strings.Replace(string(ing.UID), "-", "", -1)
-	config.Limit = limit
-	config.WindowSize = int(windowSize.Seconds())
-	config.Key = key
-	config.IgnoredCIDRs = ignoredCIDRs
-
-	return config, nil
-}
diff --git a/internal/ingress/annotations/ratelimit/main.go b/internal/ingress/annotations/ratelimit/main.go
index 7b7d6f4db..3decd59d3 100644
--- a/internal/ingress/annotations/ratelimit/main.go
+++ b/internal/ingress/annotations/ratelimit/main.go
@@ -19,6 +19,7 @@ package ratelimit
 import (
 	"encoding/base64"
 	"fmt"
+	"sort"
 	"strings"
 
 	networking "k8s.io/api/networking/v1beta1"
@@ -163,7 +164,7 @@ func (a ratelimit) Parse(ing *networking.Ingress) (interface{}, error) {
 
 	val, _ := parser.GetStringAnnotation("limit-whitelist", ing)
 
-	cidrs, err := net.ParseCIDRs(val)
+	cidrs, err := parseCIDRs(val)
 	if err != nil {
 		return nil, err
 	}
@@ -207,6 +208,32 @@ func (a ratelimit) Parse(ing *networking.Ingress) (interface{}, error) {
 	}, nil
 }
 
+func parseCIDRs(s string) ([]string, error) {
+	if s == "" {
+		return []string{}, nil
+	}
+
+	values := strings.Split(s, ",")
+
+	ipnets, ips, err := net.ParseIPNets(values...)
+	if err != nil {
+		return nil, err
+	}
+
+	cidrs := []string{}
+	for k := range ipnets {
+		cidrs = append(cidrs, k)
+	}
+
+	for k := range ips {
+		cidrs = append(cidrs, k)
+	}
+
+	sort.Strings(cidrs)
+
+	return cidrs, nil
+}
+
 func encode(s string) string {
 	str := base64.URLEncoding.EncodeToString([]byte(s))
 	return strings.Replace(str, "=", "", -1)
diff --git a/internal/ingress/controller/checker.go b/internal/ingress/controller/checker.go
index 81c6e12be..3603fccb8 100644
--- a/internal/ingress/controller/checker.go
+++ b/internal/ingress/controller/checker.go
@@ -56,7 +56,7 @@ func (n *NGINXController) Check(_ *http.Request) error {
 		return errors.Wrapf(err, "reading NGINX PID from file %v", nginx.PID)
 	}
 
-	_, err = fs.Proc(pid)
+	_, err = fs.NewProc(pid)
 	if err != nil {
 		return errors.Wrapf(err, "checking for NGINX process with PID %v", pid)
 	}
diff --git a/internal/ingress/controller/config/config.go b/internal/ingress/controller/config/config.go
index 63bd65aac..b8c51bdb7 100644
--- a/internal/ingress/controller/config/config.go
+++ b/internal/ingress/controller/config/config.go
@@ -708,31 +708,6 @@ type Configuration struct {
 	// http://nginx.org/en/docs/http/ngx_http_core_module.html#default_type
 	// Default: text/html
 	DefaultType string `json:"default-type"`
-
-	// GlobalRateLimitMemcachedHost configures memcached host.
-	GlobalRateLimitMemcachedHost string `json:"global-rate-limit-memcached-host"`
-
-	// GlobalRateLimitMemcachedPort configures memcached port.
-	GlobalRateLimitMemcachedPort int `json:"global-rate-limit-memcached-port"`
-
-	// GlobalRateLimitMemcachedConnectTimeout configures timeout when connecting to memcached.
-	// The unit is millisecond.
-	GlobalRateLimitMemcachedConnectTimeout int `json:"global-rate-limit-memcached-connect-timeout"`
-
-	// GlobalRateLimitMemcachedMaxIdleTimeout configured how long connections
-	// should be kept alive in idle state. The unit is millisecond.
-	GlobalRateLimitMemcachedMaxIdleTimeout int `json:"global-rate-limit-memcached-max-idle-timeout"`
-
-	// GlobalRateLimitMemcachedPoolSize configures how many connections
-	// should be kept alive in the pool.
-	// Note that this is per NGINX worker. Make sure your memcached server can
-	// handle `MemcachedPoolSize * <nginx worker count> * <nginx replica count>`
-	// simultaneous connections.
-	GlobalRateLimitMemcachedPoolSize int `json:"global-rate-limit-memcached-pool-size"`
-
-	// GlobalRateLimitStatucCode determines the HTTP status code to return
-	// when limit is exceeding during global rate limiting.
-	GlobalRateLimitStatucCode int `json:"global-rate-limit-status-code"`
 }
 
 // NewDefault returns the default nginx configuration
@@ -854,40 +829,35 @@ func NewDefault() Configuration {
 			ProxyHTTPVersion:         "1.1",
 			ProxyMaxTempFileSize:     "1024m",
 		},
-		UpstreamKeepaliveConnections:           320,
-		UpstreamKeepaliveTimeout:               60,
-		UpstreamKeepaliveRequests:              10000,
-		LimitConnZoneVariable:                  defaultLimitConnZoneVariable,
-		BindAddressIpv4:                        defBindAddress,
-		BindAddressIpv6:                        defBindAddress,
-		ZipkinCollectorPort:                    9411,
-		ZipkinServiceName:                      "nginx",
-		ZipkinSampleRate:                       1.0,
-		JaegerCollectorPort:                    6831,
-		JaegerServiceName:                      "nginx",
-		JaegerSamplerType:                      "const",
-		JaegerSamplerParam:                     "1",
-		JaegerSamplerPort:                      5778,
-		JaegerSamplerHost:                      "http://127.0.0.1",
-		DatadogServiceName:                     "nginx",
-		DatadogEnvironment:                     "prod",
-		DatadogCollectorPort:                   8126,
-		DatadogOperationNameOverride:           "nginx.handle",
-		DatadogSampleRate:                      1.0,
-		DatadogPrioritySampling:                true,
-		LimitReqStatusCode:                     503,
-		LimitConnStatusCode:                    503,
-		SyslogPort:                             514,
-		NoTLSRedirectLocations:                 "/.well-known/acme-challenge",
-		NoAuthLocations:                        "/.well-known/acme-challenge",
-		GlobalExternalAuth:                     defGlobalExternalAuth,
-		ProxySSLLocationOnly:                   false,
-		DefaultType:                            "text/html",
-		GlobalRateLimitMemcachedPort:           11211,
-		GlobalRateLimitMemcachedConnectTimeout: 50,
-		GlobalRateLimitMemcachedMaxIdleTimeout: 10000,
-		GlobalRateLimitMemcachedPoolSize:       50,
-		GlobalRateLimitStatucCode:              429,
+		UpstreamKeepaliveConnections: 320,
+		UpstreamKeepaliveTimeout:     60,
+		UpstreamKeepaliveRequests:    10000,
+		LimitConnZoneVariable:        defaultLimitConnZoneVariable,
+		BindAddressIpv4:              defBindAddress,
+		BindAddressIpv6:              defBindAddress,
+		ZipkinCollectorPort:          9411,
+		ZipkinServiceName:            "nginx",
+		ZipkinSampleRate:             1.0,
+		JaegerCollectorPort:          6831,
+		JaegerServiceName:            "nginx",
+		JaegerSamplerType:            "const",
+		JaegerSamplerParam:           "1",
+		JaegerSamplerPort:            5778,
+		JaegerSamplerHost:            "http://127.0.0.1",
+		DatadogServiceName:           "nginx",
+		DatadogEnvironment:           "prod",
+		DatadogCollectorPort:         8126,
+		DatadogOperationNameOverride: "nginx.handle",
+		DatadogSampleRate:            1.0,
+		DatadogPrioritySampling:      true,
+		LimitReqStatusCode:           503,
+		LimitConnStatusCode:          503,
+		SyslogPort:                   514,
+		NoTLSRedirectLocations:       "/.well-known/acme-challenge",
+		NoAuthLocations:              "/.well-known/acme-challenge",
+		GlobalExternalAuth:           defGlobalExternalAuth,
+		ProxySSLLocationOnly:         false,
+		DefaultType:                  "text/html",
 	}
 
 	if klog.V(5).Enabled() {
diff --git a/internal/ingress/controller/controller.go b/internal/ingress/controller/controller.go
index f5e3d2733..3e4a91b5b 100644
--- a/internal/ingress/controller/controller.go
+++ b/internal/ingress/controller/controller.go
@@ -232,17 +232,6 @@ func (n *NGINXController) CheckIngress(ing *networking.Ingress) error {
 
 	k8s.SetDefaultNGINXPathType(ing)
 
-	cfg := n.store.GetBackendConfiguration()
-	cfg.Resolver = n.resolver
-
-	if len(cfg.GlobalRateLimitMemcachedHost) == 0 {
-		for key := range ing.ObjectMeta.GetAnnotations() {
-			if strings.HasPrefix(key, fmt.Sprintf("%s/%s", parser.AnnotationsPrefix, "global-rate-limit")) {
-				return fmt.Errorf("'global-rate-limit*' annotations require 'global-rate-limit-memcached-host' settings configured in the global configmap")
-			}
-		}
-	}
-
 	allIngresses := n.store.ListIngresses()
 
 	filter := func(toCheck *ingress.Ingress) bool {
@@ -255,6 +244,9 @@ func (n *NGINXController) CheckIngress(ing *networking.Ingress) error {
 		ParsedAnnotations: annotations.NewAnnotationExtractor(n.store).Extract(ing),
 	})
 
+	cfg := n.store.GetBackendConfiguration()
+	cfg.Resolver = n.resolver
+
 	_, servers, pcfg := n.getConfiguration(ings)
 
 	err := checkOverlap(ing, allIngresses, servers)
@@ -1261,7 +1253,6 @@ func locationApplyAnnotations(loc *ingress.Location, anns *annotations.Ingress)
 	loc.Proxy = anns.Proxy
 	loc.ProxySSL = anns.ProxySSL
 	loc.RateLimit = anns.RateLimit
-	loc.GlobalRateLimit = anns.GlobalRateLimit
 	loc.Redirect = anns.Redirect
 	loc.Rewrite = anns.Rewrite
 	loc.UpstreamVhost = anns.UpstreamVhost
diff --git a/internal/ingress/controller/store/store.go b/internal/ingress/controller/store/store.go
index 9e8ca06a4..1e36d6cc2 100644
--- a/internal/ingress/controller/store/store.go
+++ b/internal/ingress/controller/store/store.go
@@ -630,6 +630,9 @@ func isCatchAllIngress(spec networkingv1beta1.IngressSpec) bool {
 	return spec.Backend != nil && len(spec.Rules) == 0
 }
 
+// Default path type is Prefix to not break existing definitions
+var defaultPathType = networkingv1beta1.PathTypePrefix
+
 // syncIngress parses ingress annotations converting the value of the
 // annotation to a go struct
 func (s *k8sStore) syncIngress(ing *networkingv1beta1.Ingress) {
diff --git a/internal/ingress/controller/template/configmap.go b/internal/ingress/controller/template/configmap.go
index 93a6b430d..a6a6712aa 100644
--- a/internal/ingress/controller/template/configmap.go
+++ b/internal/ingress/controller/template/configmap.go
@@ -75,7 +75,6 @@ var (
 		"balancer_ewma_locks":           1,
 		"certificate_servers":           5,
 		"ocsp_response_cache":           5, // keep this same as certificate_servers
-		"global_throttle_cache":         10,
 	}
 	defaultGlobalAuthRedirectParam = "rd"
 )
diff --git a/internal/ingress/controller/template/template.go b/internal/ingress/controller/template/template.go
index 014bdfdb9..3a6f02c64 100644
--- a/internal/ingress/controller/template/template.go
+++ b/internal/ingress/controller/template/template.go
@@ -50,9 +50,10 @@ import (
 )
 
 const (
-	slash         = "/"
-	nonIdempotent = "non_idempotent"
-	defBufferSize = 65535
+	slash                      = "/"
+	nonIdempotent              = "non_idempotent"
+	defBufferSize              = 65535
+	defAuthSigninRedirectParam = "rd"
 )
 
 // TemplateWriter is the interface to render a template
@@ -151,7 +152,6 @@ var (
 		"buildDenyVariable":               buildDenyVariable,
 		"getenv":                          os.Getenv,
 		"contains":                        strings.Contains,
-		"split":                           strings.Split,
 		"hasPrefix":                       strings.HasPrefix,
 		"hasSuffix":                       strings.HasSuffix,
 		"trimSpace":                       strings.TrimSpace,
@@ -289,13 +289,6 @@ func configForLua(input interface{}) string {
 		hsts_max_age = %v,
 		hsts_include_subdomains = %t,
 		hsts_preload = %t,
-
-		global_throttle = {
-			memcached = {
-				host = "%v", port = %d, connect_timeout = %d, max_idle_timeout = %d, pool_size = %d,
-			},
-			status_code = %d,
-		}
 	}`,
 		all.Cfg.UseForwardedHeaders,
 		all.Cfg.UseProxyProtocol,
@@ -308,13 +301,6 @@ func configForLua(input interface{}) string {
 		all.Cfg.HSTSMaxAge,
 		all.Cfg.HSTSIncludeSubdomains,
 		all.Cfg.HSTSPreload,
-
-		all.Cfg.GlobalRateLimitMemcachedHost,
-		all.Cfg.GlobalRateLimitMemcachedPort,
-		all.Cfg.GlobalRateLimitMemcachedConnectTimeout,
-		all.Cfg.GlobalRateLimitMemcachedMaxIdleTimeout,
-		all.Cfg.GlobalRateLimitMemcachedPoolSize,
-		all.Cfg.GlobalRateLimitStatucCode,
 	)
 }
 
@@ -332,28 +318,16 @@ func locationConfigForLua(l interface{}, a interface{}) string {
 		return "{}"
 	}
 
-	ignoredCIDRs, err := convertGoSliceIntoLuaTable(location.GlobalRateLimit.IgnoredCIDRs, false)
-	if err != nil {
-		klog.Errorf("failed to convert %v into Lua table: %q", location.GlobalRateLimit.IgnoredCIDRs, err)
-		ignoredCIDRs = "{}"
-	}
-
 	return fmt.Sprintf(`{
 		force_ssl_redirect = %t,
 		ssl_redirect = %t,
 		force_no_ssl_redirect = %t,
 		use_port_in_redirects = %t,
-		global_throttle = { namespace = "%v", limit = %d, window_size = %d, key = %v, ignored_cidrs = %v },
 	}`,
 		location.Rewrite.ForceSSLRedirect,
 		location.Rewrite.SSLRedirect,
 		isLocationInLocationList(l, all.Cfg.NoTLSRedirectLocations),
 		location.UsePortInRedirects,
-		location.GlobalRateLimit.Namespace,
-		location.GlobalRateLimit.Limit,
-		location.GlobalRateLimit.WindowSize,
-		parseComplexNginxVarIntoLuaTable(location.GlobalRateLimit.Key),
-		ignoredCIDRs,
 	)
 }
 
@@ -1527,51 +1501,3 @@ func buildServerName(hostname string) string {
 
 	return `~^(?<subdomain>[\w-]+)\.` + strings.Join(parts, "\\.") + `$`
 }
-
-// parseComplexNGINXVar parses things like "$my${complex}ngx\$var" into
-// [["$var", "complex", "my", "ngx"]]. In other words, 2nd and 3rd elements
-// in the result are actual NGINX variable names, whereas first and 4th elements
-// are string literals.
-func parseComplexNginxVarIntoLuaTable(ngxVar string) string {
-	r := regexp.MustCompile(`(\\\$[0-9a-zA-Z_]+)|\$\{([0-9a-zA-Z_]+)\}|\$([0-9a-zA-Z_]+)|(\$|[^$\\]+)`)
-	matches := r.FindAllStringSubmatch(ngxVar, -1)
-	components := make([][]string, len(matches))
-	for i, match := range matches {
-		components[i] = match[1:]
-	}
-
-	luaTable, err := convertGoSliceIntoLuaTable(components, true)
-	if err != nil {
-		klog.Errorf("unexpected error: %v", err)
-		luaTable = "{}"
-	}
-	return luaTable
-}
-
-func convertGoSliceIntoLuaTable(goSliceInterface interface{}, emptyStringAsNil bool) (string, error) {
-	goSlice := reflect.ValueOf(goSliceInterface)
-	kind := goSlice.Kind()
-
-	switch kind {
-	case reflect.String:
-		if emptyStringAsNil && len(goSlice.Interface().(string)) == 0 {
-			return "nil", nil
-		}
-		return fmt.Sprintf(`"%v"`, goSlice.Interface()), nil
-	case reflect.Int, reflect.Bool:
-		return fmt.Sprintf(`%v`, goSlice.Interface()), nil
-	case reflect.Slice, reflect.Array:
-		luaTable := "{ "
-		for i := 0; i < goSlice.Len(); i++ {
-			luaEl, err := convertGoSliceIntoLuaTable(goSlice.Index(i).Interface(), emptyStringAsNil)
-			if err != nil {
-				return "", err
-			}
-			luaTable = luaTable + luaEl + ", "
-		}
-		luaTable += "}"
-		return luaTable, nil
-	default:
-		return "", fmt.Errorf("could not process type: %s", kind)
-	}
-}
diff --git a/internal/ingress/types.go b/internal/ingress/types.go
index fabd66c98..9cafd6154 100644
--- a/internal/ingress/types.go
+++ b/internal/ingress/types.go
@@ -28,7 +28,6 @@ import (
 	"k8s.io/ingress-nginx/internal/ingress/annotations/connection"
 	"k8s.io/ingress-nginx/internal/ingress/annotations/cors"
 	"k8s.io/ingress-nginx/internal/ingress/annotations/fastcgi"
-	"k8s.io/ingress-nginx/internal/ingress/annotations/globalratelimit"
 	"k8s.io/ingress-nginx/internal/ingress/annotations/influxdb"
 	"k8s.io/ingress-nginx/internal/ingress/annotations/ipwhitelist"
 	"k8s.io/ingress-nginx/internal/ingress/annotations/log"
@@ -271,10 +270,6 @@ type Location struct {
 	// The Redirect annotation precedes RateLimit
 	// +optional
 	RateLimit ratelimit.Config `json:"rateLimit,omitempty"`
-	// GlobalRateLimit similar to RateLimit
-	// but this is applied globally across multiple replicas.
-	// +optional
-	GlobalRateLimit globalratelimit.Config `json:"globalRateLimit,omitempty"`
 	// Redirect describes a temporal o permanent redirection this location.
 	// +optional
 	Redirect redirect.Config `json:"redirect,omitempty"`
diff --git a/internal/ingress/types_equals.go b/internal/ingress/types_equals.go
index ac7bf4bf6..8e19f0881 100644
--- a/internal/ingress/types_equals.go
+++ b/internal/ingress/types_equals.go
@@ -379,9 +379,6 @@ func (l1 *Location) Equal(l2 *Location) bool {
 	if !(&l1.RateLimit).Equal(&l2.RateLimit) {
 		return false
 	}
-	if !(&l1.GlobalRateLimit).Equal(&l2.GlobalRateLimit) {
-		return false
-	}
 	if !(&l1.Redirect).Equal(&l2.Redirect) {
 		return false
 	}
diff --git a/internal/ingress/zz_generated.deepcopy.go b/internal/ingress/zz_generated.deepcopy.go
index 5d49fb05e..e8dfd1903 100644
--- a/internal/ingress/zz_generated.deepcopy.go
+++ b/internal/ingress/zz_generated.deepcopy.go
@@ -1,7 +1,7 @@
 // +build !ignore_autogenerated
 
 /*
-Copyright 2021 The Kubernetes Authors.
+Copyright 2020 The Kubernetes Authors.
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/internal/k8s/main.go b/internal/k8s/main.go
index 364d7c8ec..6012c39e8 100644
--- a/internal/k8s/main.go
+++ b/internal/k8s/main.go
@@ -78,6 +78,12 @@ func GetNodeIPOrName(kubeClient clientset.Interface, name string, useInternalIP
 var (
 	// IngressPodDetails hold information about the ingress-nginx pod
 	IngressPodDetails *PodInfo
+
+	selectorLabelKeys = []string{
+		"app.kubernetes.io/component",
+		"app.kubernetes.io/instance",
+		"app.kubernetes.io/name",
+	}
 )
 
 // PodInfo contains runtime information about the pod running the Ingres controller
@@ -101,12 +107,22 @@ func GetIngressPod(kubeClient clientset.Interface) error {
 		return fmt.Errorf("unable to get POD information: %v", err)
 	}
 
+	labels := map[string]string{}
+	for _, key := range selectorLabelKeys {
+		value, ok := pod.GetLabels()[key]
+		if !ok {
+			return fmt.Errorf("label %v is missing. Please do not remove", key)
+		}
+
+		labels[key] = value
+	}
+
 	IngressPodDetails = &PodInfo{
 		TypeMeta: metav1.TypeMeta{APIVersion: "v1", Kind: "Pod"},
 	}
 
 	pod.ObjectMeta.DeepCopyInto(&IngressPodDetails.ObjectMeta)
-	IngressPodDetails.SetLabels(pod.GetLabels())
+	IngressPodDetails.SetLabels(labels)
 
 	return nil
 }
diff --git a/internal/net/ipnet.go b/internal/net/ipnet.go
index 1cd8832ca..b48d13db8 100644
--- a/internal/net/ipnet.go
+++ b/internal/net/ipnet.go
@@ -18,7 +18,6 @@ package net
 
 import (
 	"net"
-	"sort"
 	"strings"
 )
 
@@ -52,30 +51,3 @@ func ParseIPNets(specs ...string) (IPNet, IP, error) {
 
 	return ipnetset, ipset, nil
 }
-
-// ParseCIDRs parses comma separated CIDRs into a sorted string array
-func ParseCIDRs(s string) ([]string, error) {
-	if s == "" {
-		return []string{}, nil
-	}
-
-	values := strings.Split(s, ",")
-
-	ipnets, ips, err := ParseIPNets(values...)
-	if err != nil {
-		return nil, err
-	}
-
-	cidrs := []string{}
-	for k := range ipnets {
-		cidrs = append(cidrs, k)
-	}
-
-	for k := range ips {
-		cidrs = append(cidrs, k)
-	}
-
-	sort.Strings(cidrs)
-
-	return cidrs, nil
-}
diff --git a/internal/nginx/maxmind.go b/internal/nginx/maxmind.go
index 0f3c37016..a303e8b2e 100644
--- a/internal/nginx/maxmind.go
+++ b/internal/nginx/maxmind.go
@@ -36,9 +36,6 @@ var MaxmindEditionIDs = ""
 // MaxmindEditionFiles maxmind databases on disk
 var MaxmindEditionFiles []string
 
-// MaxmindMirror maxmind database mirror url (http://geoip.local)
-var MaxmindMirror = ""
-
 const (
 	geoIPPath   = "/etc/nginx/geoip"
 	dbExtension = ".mmdb"
@@ -71,15 +68,8 @@ func DownloadGeoLite2DB() error {
 	return nil
 }
 
-func createURL(mirror, licenseKey, dbName string) string {
-	if len(mirror) > 0 {
-		return fmt.Sprintf("%s/%s.tar.gz", mirror, dbName)
-	}
-	return fmt.Sprintf(maxmindURL, licenseKey, dbName)
-}
-
 func downloadDatabase(dbName string) error {
-	url := createURL(MaxmindMirror, MaxmindLicenseKey, dbName)
+	url := fmt.Sprintf(maxmindURL, MaxmindLicenseKey, dbName)
 	req, err := http.NewRequest(http.MethodGet, url, nil)
 	if err != nil {
 		return err
diff --git a/rootfs/etc/nginx/lua/global_throttle.lua b/rootfs/etc/nginx/lua/global_throttle.lua
deleted file mode 100644
index bea8cfd17..000000000
--- a/rootfs/etc/nginx/lua/global_throttle.lua
+++ /dev/null
@@ -1,131 +0,0 @@
-local resty_global_throttle = require("resty.global_throttle")
-local resty_ipmatcher = require("resty.ipmatcher")
-local util = require("util")
-
-local ngx = ngx
-local ngx_exit = ngx.exit
-local ngx_log = ngx.log
-local ngx_ERR = ngx.ERR
-local ngx_INFO = ngx.INFO
-
-local _M = {}
-
-local DECISION_CACHE = ngx.shared.global_throttle_cache
-
--- it does not make sense to cache decision for too little time
--- the benefit of caching likely is negated if we cache for too little time
--- Lua Shared Dict's time resolution for expiry is 0.001.
-local CACHE_THRESHOLD = 0.001
-
-local DEFAULT_RAW_KEY = "remote_addr"
-
-local function should_ignore_request(ignored_cidrs)
-  if not ignored_cidrs or #ignored_cidrs == 0 then
-    return false
-  end
-
-  local ignored_cidrs_matcher, err = resty_ipmatcher.new(ignored_cidrs)
-  if not ignored_cidrs_matcher then
-    ngx_log(ngx_ERR, "failed to initialize resty-ipmatcher: ", err)
-    return false
-  end
-
-  local is_ignored
-  is_ignored, err = ignored_cidrs_matcher:match(ngx.var.remote_addr)
-  if err then
-    ngx_log(ngx_ERR, "failed to match ip: '",
-      ngx.var.remote_addr, "': ", err)
-    return false
-  end
-
-  return is_ignored
-end
-
-local function is_enabled(config, location_config)
-  if config.memcached.host == "" or config.memcached.port == 0 then
-    return false
-  end
-  if location_config.limit == 0 or
-    location_config.window_size == 0 then
-    return false
-  end
-
-  if should_ignore_request(location_config.ignored_cidrs) then
-    return false
-  end
-
-  return true
-end
-
-local function get_namespaced_key_value(namespace, key_value)
-  return namespace .. key_value
-end
-
-function _M.throttle(config, location_config)
-  if not is_enabled(config, location_config) then
-    return
-  end
-
-  local key_value = util.generate_var_value(location_config.key)
-  if not key_value or key_value == "" then
-    key_value = ngx.var[DEFAULT_RAW_KEY]
-  end
-
-  local namespaced_key_value =
-    get_namespaced_key_value(location_config.namespace, key_value)
-
-  local is_limit_exceeding = DECISION_CACHE:get(namespaced_key_value)
-  if is_limit_exceeding then
-    ngx.var.global_rate_limit_exceeding = "c"
-    return ngx_exit(config.status_code)
-  end
-
-  local my_throttle, err = resty_global_throttle.new(
-    location_config.namespace,
-    location_config.limit,
-    location_config.window_size,
-    {
-      provider = "memcached",
-      host = config.memcached.host,
-      port = config.memcached.port,
-      connect_timeout = config.memcached.connect_timeout,
-      max_idle_timeout = config.memcached.max_idle_timeout,
-      pool_size = config.memcached.pool_size,
-    }
-  )
-  if err then
-    ngx.log(ngx.ERR, "faled to initialize resty_global_throttle: ", err)
-    -- fail open
-    return
-  end
-
-  local desired_delay, estimated_final_count
-  estimated_final_count, desired_delay, err = my_throttle:process(key_value)
-  if err then
-    ngx.log(ngx.ERR, "error while processing key: ", err)
-    -- fail open
-    return
-  end
-
-  if desired_delay then
-    if desired_delay > CACHE_THRESHOLD then
-      local ok
-      ok, err =
-        DECISION_CACHE:safe_add(namespaced_key_value, true, desired_delay)
-      if not ok then
-        if err ~= "exists" then
-          ngx_log(ngx_ERR, "failed to cache decision: ", err)
-        end
-      end
-    end
-
-    ngx.var.global_rate_limit_exceeding = "y"
-    ngx_log(ngx_INFO, "limit is exceeding for ",
-      location_config.namespace, "/", key_value,
-      " with estimated_final_count: ", estimated_final_count)
-
-    return ngx_exit(config.status_code)
-  end
-end
-
-return _M
diff --git a/rootfs/etc/nginx/lua/lua_ingress.lua b/rootfs/etc/nginx/lua/lua_ingress.lua
index 90042fbd3..3facb14c4 100644
--- a/rootfs/etc/nginx/lua/lua_ingress.lua
+++ b/rootfs/etc/nginx/lua/lua_ingress.lua
@@ -2,7 +2,6 @@ local ngx_re_split = require("ngx.re").split
 
 local certificate_configured_for_current_request =
   require("certificate").configured_for_current_request
-local global_throttle = require("global_throttle")
 
 local ngx = ngx
 local io = io
@@ -161,8 +160,6 @@ function _M.rewrite(location_config)
 
     return ngx_redirect(uri, config.http_redirect_code)
   end
-
-  global_throttle.throttle(config.global_throttle, location_config.global_throttle)
 end
 
 function _M.header()
diff --git a/rootfs/etc/nginx/lua/tcp_udp_balancer.lua b/rootfs/etc/nginx/lua/tcp_udp_balancer.lua
index d90458762..a2a491af8 100644
--- a/rootfs/etc/nginx/lua/tcp_udp_balancer.lua
+++ b/rootfs/etc/nginx/lua/tcp_udp_balancer.lua
@@ -79,7 +79,7 @@ local function sync_backend(backend)
     return
   end
 
-  ngx.log(ngx.INFO, string.format("backend ", backend.name))
+  ngx.log(ngx.INFO, "sync tcp/udp backend: ", backend.name)
   local implementation = get_implementation(backend)
   local balancer = balancers[backend.name]
 
diff --git a/rootfs/etc/nginx/template/nginx.tmpl b/rootfs/etc/nginx/template/nginx.tmpl
index 9af7c9f5e..b37cfe7b4 100755
--- a/rootfs/etc/nginx/template/nginx.tmpl
+++ b/rootfs/etc/nginx/template/nginx.tmpl
@@ -1085,7 +1085,6 @@ stream {
             set $service_name   {{ $ing.Service | quote }};
             set $service_port   {{ $ing.ServicePort | quote }};
             set $location_path  {{ $ing.Path | escapeLiteralDollar | quote }};
-            set $global_rate_limit_exceeding n;
 
             {{ buildOpentracingForLocation $all.Cfg.EnableOpentracing $location }}
 


Test patch:
diff --git a/build/test-lua.sh b/build/test-lua.sh
index 3b00cf35a..c9b3ec53e 100755
--- a/build/test-lua.sh
+++ b/build/test-lua.sh
@@ -34,5 +34,4 @@ resty \
   --shdict "balancer_ewma 1M" \
   --shdict "balancer_ewma_last_touched_at 1M" \
   --shdict "balancer_ewma_locks 512k" \
-  --shdict "global_throttle_cache 5M" \
   ./rootfs/etc/nginx/lua/test/run.lua ${BUSTED_ARGS} ./rootfs/etc/nginx/lua/test/ ./rootfs/etc/nginx/lua/plugins/**/test
diff --git a/cmd/nginx/flags_test.go b/cmd/nginx/flags_test.go
index 4286d4a20..411c7c993 100644
--- a/cmd/nginx/flags_test.go
+++ b/cmd/nginx/flags_test.go
@@ -92,16 +92,3 @@ func TestMaxmindEdition(t *testing.T) {
 		t.Fatalf("Expected an error parsing flags but none returned")
 	}
 }
-
-func TestMaxmindMirror(t *testing.T) {
-	resetForTesting(func() { t.Fatal("Parsing failed") })
-
-	oldArgs := os.Args
-	defer func() { os.Args = oldArgs }()
-	os.Args = []string{"cmd", "--publish-service", "namespace/test", "--http-port", "0", "--https-port", "0", "--maxmind-mirror", "http://geoip.local", "--maxmind-license-key", "0000000", "--maxmind-edition-ids", "GeoLite2-City, TestCheck"}
-
-	_, _, err := parseFlags()
-	if err == nil {
-		t.Fatalf("Expected an error parsing flags but none returned")
-	}
-}
diff --git a/images/test-runner/Makefile b/images/test-runner/Makefile
index f68cc105c..b7fa02ec8 100644
--- a/images/test-runner/Makefile
+++ b/images/test-runner/Makefile
@@ -36,7 +36,7 @@ build: ensure-buildx
 		--platform=${PLATFORMS} $(OUTPUT) \
 		--progress=$(PROGRESS) \
 		--pull \
-		--build-arg BASE_IMAGE=k8s.gcr.io/ingress-nginx/nginx:v20210104-g2254a9186@sha256:edd1d06bc6892b0dfb42de7d782ceb3c50eec843b09024abf3f95ba23f4feed5 \
+		--build-arg BASE_IMAGE=k8s.gcr.io/ingress-nginx/nginx:v20201215-ga48ae4203@sha256:460be3452745c8bd944bee8435df962f53082e6f346b9f1742f6d803fe985ac4 \
 		--build-arg GOLANG_VERSION=1.15.6 \
 		--build-arg ETCD_VERSION=3.4.3-0 \
 		--build-arg K8S_RELEASE=v1.19.4 \
diff --git a/images/test-runner/cloudbuild.yaml b/images/test-runner/cloudbuild.yaml
index 3e4d67d06..82281b058 100644
--- a/images/test-runner/cloudbuild.yaml
+++ b/images/test-runner/cloudbuild.yaml
@@ -2,7 +2,7 @@ timeout: 1200s
 options:
   substitution_option: ALLOW_LOOSE
 steps:
-  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20201130-750d12f
+  - name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20200824-5d057db
     entrypoint: bash
     env:
       - DOCKER_CLI_EXPERIMENTAL=enabled
diff --git a/internal/ingress/annotations/annotations_test.go b/internal/ingress/annotations/annotations_test.go
index 1a428e729..2e4da69a6 100644
--- a/internal/ingress/annotations/annotations_test.go
+++ b/internal/ingress/annotations/annotations_test.go
@@ -30,6 +30,7 @@ import (
 )
 
 var (
+	annotationSecureVerifyCACert   = parser.GetAnnotationWithPrefix("secure-verify-ca-secret")
 	annotationPassthrough          = parser.GetAnnotationWithPrefix("ssl-passthrough")
 	annotationAffinityType         = parser.GetAnnotationWithPrefix("affinity")
 	annotationAffinityMode         = parser.GetAnnotationWithPrefix("affinity-mode")
@@ -38,6 +39,7 @@ var (
 	annotationCorsAllowHeaders     = parser.GetAnnotationWithPrefix("cors-allow-headers")
 	annotationCorsExposeHeaders    = parser.GetAnnotationWithPrefix("cors-expose-headers")
 	annotationCorsAllowCredentials = parser.GetAnnotationWithPrefix("cors-allow-credentials")
+	backendProtocol                = parser.GetAnnotationWithPrefix("backend-protocol")
 	defaultCorsMethods             = "GET, PUT, POST, DELETE, PATCH, OPTIONS"
 	defaultCorsHeaders             = "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization"
 	annotationAffinityCookieName   = parser.GetAnnotationWithPrefix("session-cookie-name")
diff --git a/internal/ingress/annotations/globalratelimit/main_test.go b/internal/ingress/annotations/globalratelimit/main_test.go
deleted file mode 100644
index 38da8f4a9..000000000
--- a/internal/ingress/annotations/globalratelimit/main_test.go
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
-Copyright 2020 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package globalratelimit
-
-import (
-	"encoding/json"
-	"fmt"
-	"testing"
-
-	"github.com/pkg/errors"
-	api "k8s.io/api/core/v1"
-	networking "k8s.io/api/networking/v1beta1"
-	meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-
-	"k8s.io/apimachinery/pkg/util/intstr"
-	"k8s.io/ingress-nginx/internal/ingress/annotations/parser"
-	ing_errors "k8s.io/ingress-nginx/internal/ingress/errors"
-	"k8s.io/ingress-nginx/internal/ingress/resolver"
-)
-
-const UID = "31285d47-b150-4dcf-bd6f-12c46d769f6e"
-const expectedUID = "31285d47b1504dcfbd6f12c46d769f6e"
-
-func buildIngress() *networking.Ingress {
-	defaultBackend := networking.IngressBackend{
-		ServiceName: "default-backend",
-		ServicePort: intstr.FromInt(80),
-	}
-
-	return &networking.Ingress{
-		ObjectMeta: meta_v1.ObjectMeta{
-			Name:      "foo",
-			Namespace: api.NamespaceDefault,
-			UID:       UID,
-		},
-		Spec: networking.IngressSpec{
-			Backend: &networking.IngressBackend{
-				ServiceName: "default-backend",
-				ServicePort: intstr.FromInt(80),
-			},
-			Rules: []networking.IngressRule{
-				{
-					Host: "foo.bar.com",
-					IngressRuleValue: networking.IngressRuleValue{
-						HTTP: &networking.HTTPIngressRuleValue{
-							Paths: []networking.HTTPIngressPath{
-								{
-									Path:    "/foo",
-									Backend: defaultBackend,
-								},
-							},
-						},
-					},
-				},
-			},
-		},
-	}
-}
-
-type mockBackend struct {
-	resolver.Mock
-}
-
-func TestGlobalRateLimiting(t *testing.T) {
-	ing := buildIngress()
-
-	annRateLimit := parser.GetAnnotationWithPrefix("global-rate-limit")
-	annRateLimitWindow := parser.GetAnnotationWithPrefix("global-rate-limit-window")
-	annRateLimitKey := parser.GetAnnotationWithPrefix("global-rate-limit-key")
-	annRateLimitIgnoredCIDRs := parser.GetAnnotationWithPrefix("global-rate-limit-ignored-cidrs")
-
-	testCases := []struct {
-		title          string
-		annotations    map[string]string
-		expectedConfig *Config
-		expectedErr    error
-	}{
-		{
-			"no annotation",
-			nil,
-			&Config{},
-			nil,
-		},
-		{
-			"minimum required annotations",
-			map[string]string{
-				annRateLimit:       "100",
-				annRateLimitWindow: "2m",
-			},
-			&Config{
-				Namespace:    expectedUID,
-				Limit:        100,
-				WindowSize:   120,
-				Key:          "$remote_addr",
-				IgnoredCIDRs: make([]string, 0),
-			},
-			nil,
-		},
-		{
-			"global-rate-limit-key annotation",
-			map[string]string{
-				annRateLimit:       "100",
-				annRateLimitWindow: "2m",
-				annRateLimitKey:    "$http_x_api_user",
-			},
-			&Config{
-				Namespace:    expectedUID,
-				Limit:        100,
-				WindowSize:   120,
-				Key:          "$http_x_api_user",
-				IgnoredCIDRs: make([]string, 0),
-			},
-			nil,
-		},
-		{
-			"global-rate-limit-ignored-cidrs annotation",
-			map[string]string{
-				annRateLimit:             "100",
-				annRateLimitWindow:       "2m",
-				annRateLimitKey:          "$http_x_api_user",
-				annRateLimitIgnoredCIDRs: "127.0.0.1, 200.200.24.0/24",
-			},
-			&Config{
-				Namespace:    expectedUID,
-				Limit:        100,
-				WindowSize:   120,
-				Key:          "$http_x_api_user",
-				IgnoredCIDRs: []string{"127.0.0.1", "200.200.24.0/24"},
-			},
-			nil,
-		},
-		{
-			"incorrect duration for window",
-			map[string]string{
-				annRateLimit:       "100",
-				annRateLimitWindow: "2mb",
-				annRateLimitKey:    "$http_x_api_user",
-			},
-			&Config{},
-			ing_errors.LocationDenied{
-				Reason: errors.Wrap(fmt.Errorf(`time: unknown unit "mb" in duration "2mb"`),
-					"failed to parse 'global-rate-limit-window' value"),
-			},
-		},
-	}
-
-	for _, testCase := range testCases {
-		ing.SetAnnotations(testCase.annotations)
-
-		i, actualErr := NewParser(mockBackend{}).Parse(ing)
-		if (testCase.expectedErr == nil || actualErr == nil) && testCase.expectedErr != actualErr {
-			t.Errorf("expected error 'nil' but got '%v'", actualErr)
-		} else if testCase.expectedErr != nil && actualErr != nil &&
-			testCase.expectedErr.Error() != actualErr.Error() {
-			t.Errorf("expected error '%v' but got '%v'", testCase.expectedErr, actualErr)
-		}
-
-		actualConfig := i.(*Config)
-		if !testCase.expectedConfig.Equal(actualConfig) {
-			expectedJSON, _ := json.Marshal(testCase.expectedConfig)
-			actualJSON, _ := json.Marshal(actualConfig)
-			t.Errorf("%v: expected config '%s' but got '%s'", testCase.title, expectedJSON, actualJSON)
-		}
-	}
-}
diff --git a/internal/ingress/annotations/ratelimit/main_test.go b/internal/ingress/annotations/ratelimit/main_test.go
index 7ffbac3ff..1975ddb96 100644
--- a/internal/ingress/annotations/ratelimit/main_test.go
+++ b/internal/ingress/annotations/ratelimit/main_test.go
@@ -17,6 +17,8 @@ limitations under the License.
 package ratelimit
 
 import (
+	"reflect"
+	"sort"
 	"testing"
 
 	api "k8s.io/api/core/v1"
@@ -83,6 +85,23 @@ func TestWithoutAnnotations(t *testing.T) {
 	}
 }
 
+func TestParseCIDRs(t *testing.T) {
+	cidr, _ := parseCIDRs("invalid.com")
+	if cidr != nil {
+		t.Errorf("expected %v but got %v", nil, cidr)
+	}
+
+	expected := []string{"192.0.0.1", "192.0.1.0/24"}
+	cidr, err := parseCIDRs("192.0.0.1, 192.0.1.0/24")
+	if err != nil {
+		t.Errorf("unexpected error %v", err)
+	}
+	sort.Strings(cidr)
+	if !reflect.DeepEqual(expected, cidr) {
+		t.Errorf("expected %v but got %v", expected, cidr)
+	}
+}
+
 func TestRateLimiting(t *testing.T) {
 	ing := buildIngress()
 
diff --git a/internal/ingress/controller/template/template_test.go b/internal/ingress/controller/template/template_test.go
index abccb0d9c..69a8fe9c5 100644
--- a/internal/ingress/controller/template/template_test.go
+++ b/internal/ingress/controller/template/template_test.go
@@ -1472,86 +1472,3 @@ func TestBuildServerName(t *testing.T) {
 		}
 	}
 }
-
-func TestParseComplexNginxVarIntoLuaTable(t *testing.T) {
-	testCases := []struct {
-		ngxVar           string
-		expectedLuaTable string
-	}{
-		{"foo", `{ { nil, nil, nil, "foo", }, }`},
-		{"$foo", `{ { nil, nil, "foo", nil, }, }`},
-		{"${foo}", `{ { nil, "foo", nil, nil, }, }`},
-		{"\\$foo", `{ { "\$foo", nil, nil, nil, }, }`},
-		{
-			"foo\\$bar$baz${daz}xiyar$pomidor",
-			`{ { nil, nil, nil, "foo", }, { "\$bar", nil, nil, nil, }, { nil, nil, "baz", nil, }, ` +
-				`{ nil, "daz", nil, nil, }, { nil, nil, nil, "xiyar", }, { nil, nil, "pomidor", nil, }, }`,
-		},
-	}
-
-	for _, testCase := range testCases {
-		actualLuaTable := parseComplexNginxVarIntoLuaTable(testCase.ngxVar)
-		if actualLuaTable != testCase.expectedLuaTable {
-			t.Errorf("expected %v but returned %v", testCase.expectedLuaTable, actualLuaTable)
-		}
-	}
-}
-
-func TestConvertGoSliceIntoLuaTablet(t *testing.T) {
-	testCases := []struct {
-		title            string
-		goSlice          interface{}
-		emptyStringAsNil bool
-		expectedLuaTable string
-		expectedErr      error
-	}{
-		{
-			"flat string slice",
-			[]string{"one", "two", "three"},
-			false,
-			`{ "one", "two", "three", }`,
-			nil,
-		},
-		{
-			"nested string slice",
-			[][]string{{"one", "", "three"}, {"foo", "bar"}},
-			false,
-			`{ { "one", "", "three", }, { "foo", "bar", }, }`,
-			nil,
-		},
-		{
-			"converts empty string to nil when enabled",
-			[][]string{{"one", "", "three"}, {"foo", "bar"}},
-			true,
-			`{ { "one", nil, "three", }, { "foo", "bar", }, }`,
-			nil,
-		},
-		{
-			"boolean slice",
-			[]bool{true, true, false},
-			false,
-			`{ true, true, false, }`,
-			nil,
-		},
-		{
-			"integer slice",
-			[]int{4, 3, 6},
-			false,
-			`{ 4, 3, 6, }`,
-			nil,
-		},
-	}
-
-	for _, testCase := range testCases {
-		actualLuaTable, err := convertGoSliceIntoLuaTable(testCase.goSlice, testCase.emptyStringAsNil)
-		if testCase.expectedErr != nil && err != nil && testCase.expectedErr.Error() != err.Error() {
-			t.Errorf("expected error '%v' but returned '%v'", testCase.expectedErr, err)
-		}
-		if testCase.expectedErr == nil && err != nil {
-			t.Errorf("expected error to be nil but returned '%v'", err)
-		}
-		if testCase.expectedLuaTable != actualLuaTable {
-			t.Errorf("%v: expected '%v' but returned '%v'", testCase.title, testCase.expectedLuaTable, actualLuaTable)
-		}
-	}
-}
diff --git a/internal/ingress/resolver/main_test.go b/internal/ingress/resolver/main_test.go
deleted file mode 100644
index 044351310..000000000
--- a/internal/ingress/resolver/main_test.go
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-Copyright 2020 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package resolver
-
-import "testing"
-
-func TestAuthSSLCertEqual(t *testing.T) {
-	tests := []struct {
-		exp         bool
-		authcert    *AuthSSLCert
-		compareWith *AuthSSLCert
-	}{
-		{true, &AuthSSLCert{
-			Secret: "same_secret_value",
-			CRLSHA: "same_crl_sha_value",
-		}, &AuthSSLCert{
-			Secret: "same_secret_value",
-			CRLSHA: "same_crl_sha_value",
-		}},
-
-		{false, &AuthSSLCert{
-			Secret: "test_ssl_secret",
-		}, &AuthSSLCert{
-			Secret: "test_ssl_secret",
-			CRLSHA: "test_crl_sha",
-		}},
-
-		{false, &AuthSSLCert{}, &AuthSSLCert{
-			Secret: "test_ssl_secret",
-		}},
-
-		{false, nil, &AuthSSLCert{
-			Secret: "test_ssl_secret",
-		}},
-	}
-
-	for _, test := range tests {
-		out := test.authcert.Equal(test.compareWith)
-
-		if out != test.exp {
-			t.Errorf(
-				"AuthSSLCert: %v compared with %v, expected %v but got %v",
-				test.authcert, test.compareWith, test.exp, out)
-		}
-	}
-}
diff --git a/internal/net/ipnet_test.go b/internal/net/ipnet_test.go
index 95e6b9c32..3ce1345c6 100644
--- a/internal/net/ipnet_test.go
+++ b/internal/net/ipnet_test.go
@@ -17,8 +17,6 @@ limitations under the License.
 package net
 
 import (
-	"reflect"
-	"sort"
 	"testing"
 )
 
@@ -34,20 +32,3 @@ func TestNewIPSet(t *testing.T) {
 		t.Errorf("Expected len=1: %d", len(ips))
 	}
 }
-
-func TestParseCIDRs(t *testing.T) {
-	cidr, _ := ParseCIDRs("invalid.com")
-	if cidr != nil {
-		t.Errorf("expected %v but got %v", nil, cidr)
-	}
-
-	expected := []string{"192.0.0.1", "192.0.1.0/24"}
-	cidr, err := ParseCIDRs("192.0.0.1, 192.0.1.0/24")
-	if err != nil {
-		t.Errorf("unexpected error %v", err)
-	}
-	sort.Strings(cidr)
-	if !reflect.DeepEqual(expected, cidr) {
-		t.Errorf("expected %v but got %v", expected, cidr)
-	}
-}
diff --git a/rootfs/etc/nginx/lua/test/balancer/chash_test.lua b/rootfs/etc/nginx/lua/test/balancer/chash_test.lua
index dda3f848c..94379e7dd 100644
--- a/rootfs/etc/nginx/lua/test/balancer/chash_test.lua
+++ b/rootfs/etc/nginx/lua/test/balancer/chash_test.lua
@@ -1,12 +1,15 @@
+function mock_ngx(mock)
+  local _ngx = mock
+  setmetatable(_ngx, {__index = _G.ngx})
+  _G.ngx = _ngx
+end
+
 describe("Balancer chash", function()
-  after_each(function()
-    reset_ngx()
-  end)
 
   describe("balance()", function()
     it("uses correct key for given backend", function()
-      ngx.var = { request_uri = "/alma/armud"}
-      local balancer_chash = require_without_cache("balancer.chash")
+      mock_ngx({var = { request_uri = "/alma/armud"}})
+      local balancer_chash = require("balancer.chash")
 
       local resty_chash = package.loaded["resty.chash"]
       resty_chash.new = function(self, nodes)
diff --git a/rootfs/etc/nginx/lua/test/global_throttle_test.lua b/rootfs/etc/nginx/lua/test/global_throttle_test.lua
deleted file mode 100644
index b8db740ad..000000000
--- a/rootfs/etc/nginx/lua/test/global_throttle_test.lua
+++ /dev/null
@@ -1,258 +0,0 @@
-local util = require("util")
-
-local function assert_request_rejected(config, location_config, opts)
-  stub(ngx, "exit")
-
-  local global_throttle = require_without_cache("global_throttle")
-  assert.has_no.errors(function()
-    global_throttle.throttle(config, location_config)
-  end)
-
-  assert.stub(ngx.exit).was_called_with(config.status_code)
-  if opts.with_cache then
-    assert.are.same("c", ngx.var.global_rate_limit_exceeding)
-  else
-    assert.are.same("y", ngx.var.global_rate_limit_exceeding)
-  end
-end
-
-local function assert_request_not_rejected(config, location_config)
-  stub(ngx, "exit")
-  local cache_safe_add_spy = spy.on(ngx.shared.global_throttle_cache, "safe_add")
-
-  local global_throttle = require_without_cache("global_throttle")
-  assert.has_no.errors(function()
-    global_throttle.throttle(config, location_config)
-  end)
-
-  assert.stub(ngx.exit).was_not_called()
-  assert.is_nil(ngx.var.global_rate_limit_exceeding)
-  assert.spy(cache_safe_add_spy).was_not_called()
-end
-
-local function assert_short_circuits(f)
-  local cache_get_spy = spy.on(ngx.shared.global_throttle_cache, "get")
-
-  local resty_global_throttle = require_without_cache("resty.global_throttle")
-  local resty_global_throttle_new_spy = spy.on(resty_global_throttle, "new")
-
-  local global_throttle = require_without_cache("global_throttle")
-
-  f(global_throttle)
-
-  assert.spy(resty_global_throttle_new_spy).was_not_called()
-  assert.spy(cache_get_spy).was_not_called()
-end
-
-local function assert_fails_open(config, location_config, ...)
-  stub(ngx, "exit")
-  stub(ngx, "log")
-
-  local global_throttle = require_without_cache("global_throttle")
-
-  assert.has_no.errors(function()
-    global_throttle.throttle(config, location_config)
-  end)
-
-  assert.stub(ngx.exit).was_not_called()
-  assert.stub(ngx.log).was_called_with(ngx.ERR, ...)
-  assert.is_nil(ngx.var.global_rate_limit_exceeding)
-end
-
-local function stub_resty_global_throttle_process(ret1, ret2, ret3, f)
-  local resty_global_throttle = require_without_cache("resty.global_throttle")
-  local resty_global_throttle_mock = {
-    process = function(self, key) return ret1, ret2, ret3 end
-  }
-  stub(resty_global_throttle, "new", resty_global_throttle_mock)
-
-  f()
-
-  assert.stub(resty_global_throttle.new).was_called()
-end
-
-local function cache_rejection_decision(namespace, key_value, desired_delay)
-  local namespaced_key_value = namespace .. key_value
-  local ok, err = ngx.shared.global_throttle_cache:safe_add(namespaced_key_value, true, desired_delay)
-  assert.is_nil(err)
-  assert.is_true(ok)
-  assert.is_true(ngx.shared.global_throttle_cache:get(namespaced_key_value))
-end
-
-describe("global_throttle", function()
-  local snapshot
-
-  local NAMESPACE = "31285d47b1504dcfbd6f12c46d769f6e"
-  local LOCATION_CONFIG = {
-    namespace = NAMESPACE,
-    limit = 10,
-    window_size = 60,
-    key = {},
-    ignored_cidrs = {},
-  }
-  local CONFIG = {
-    memcached = {
-      host = "memc.default.svc.cluster.local", port = 11211,
-      connect_timeout = 50, max_idle_timeout = 10000, pool_size = 50,
-    },
-    status_code = 429,
-  }
-
-  before_each(function()
-    snapshot = assert:snapshot()
-
-    ngx.var = { remote_addr = "127.0.0.1", global_rate_limit_exceeding = nil }
-  end)
-
-  after_each(function()
-    snapshot:revert()
-
-    ngx.shared.global_throttle_cache:flush_all()
-    reset_ngx()
-  end)
-
-  it("short circuits when memcached is not configured", function()
-    assert_short_circuits(function(global_throttle)
-      assert.has_no.errors(function()
-        global_throttle.throttle({ memcached = { host = "", port = 0 } }, LOCATION_CONFIG)
-      end)
-    end)
-  end)
-
-  it("short circuits when limit or window_size is not configured", function()
-    assert_short_circuits(function(global_throttle)
-      local location_config_copy = util.deepcopy(LOCATION_CONFIG)
-      location_config_copy.limit = 0
-      assert.has_no.errors(function()
-        global_throttle.throttle(CONFIG, location_config_copy)
-      end)
-    end)
-
-    assert_short_circuits(function(global_throttle)
-      local location_config_copy = util.deepcopy(LOCATION_CONFIG)
-      location_config_copy.window_size = 0
-      assert.has_no.errors(function()
-        global_throttle.throttle(CONFIG, location_config_copy)
-      end)
-    end)
-  end)
-
-  it("short circuits when remote_addr is in ignored_cidrs", function()
-    local global_throttle = require_without_cache("global_throttle")
-    local location_config = util.deepcopy(LOCATION_CONFIG)
-    location_config.ignored_cidrs = { ngx.var.remote_addr }
-    assert_short_circuits(function(global_throttle)
-      assert.has_no.errors(function()
-        global_throttle.throttle(CONFIG, location_config)
-      end)
-    end)
-  end)
-
-  it("rejects when exceeding limit has already been cached", function()
-    local key_value = "foo"
-    local location_config = util.deepcopy(LOCATION_CONFIG)
-    location_config.key = { { nil, nil, nil, key_value } }
-    cache_rejection_decision(NAMESPACE, key_value, 0.5)
-
-    assert_request_rejected(CONFIG, location_config, { with_cache = true })
-  end)
-
-  describe("when resty_global_throttle fails", function()
-    it("fails open in case of initialization error", function()
-      local too_long_namespace = ""
-      for i=1,36,1 do
-        too_long_namespace = too_long_namespace .. "a"
-      end
-
-      local location_config = util.deepcopy(LOCATION_CONFIG)
-      location_config.namespace = too_long_namespace
-
-      assert_fails_open(CONFIG, location_config, "faled to initialize resty_global_throttle: ", "'namespace' can be at most 35 characters")
-    end)
-
-    it("fails open in case of key processing error", function()
-      stub_resty_global_throttle_process(nil, nil, "failed to process", function()
-        assert_fails_open(CONFIG, LOCATION_CONFIG, "error while processing key: ", "failed to process")
-      end)
-    end)
-  end)
-
-  it("initializes resty_global_throttle with the right parameters", function()
-    local resty_global_throttle = require_without_cache("resty.global_throttle")
-    local resty_global_throttle_original_new = resty_global_throttle.new
-    resty_global_throttle.new = function(namespace, limit, window_size, store_opts)
-      local o, err = resty_global_throttle_original_new(namespace, limit, window_size, store_opts)
-      if not o then
-        return nil, err
-      end
-      o.process = function(self, key) return 1, nil, nil end
-
-      local expected = LOCATION_CONFIG
-      assert.are.same(expected.namespace, namespace)
-      assert.are.same(expected.limit, limit)
-      assert.are.same(expected.window_size, window_size)
-
-      assert.are.same("memcached", store_opts.provider)
-      assert.are.same(CONFIG.memcached.host, store_opts.host)
-      assert.are.same(CONFIG.memcached.port, store_opts.port)
-      assert.are.same(CONFIG.memcached.connect_timeout, store_opts.connect_timeout)
-      assert.are.same(CONFIG.memcached.max_idle_timeout, store_opts.max_idle_timeout)
-      assert.are.same(CONFIG.memcached.pool_size, store_opts.pool_size)
-
-      return o, nil
-    end
-    local resty_global_throttle_new_spy = spy.on(resty_global_throttle, "new")
-
-    local global_throttle = require_without_cache("global_throttle")
-
-    assert.has_no.errors(function()
-      global_throttle.throttle(CONFIG, LOCATION_CONFIG)
-    end)
-
-    assert.spy(resty_global_throttle_new_spy).was_called()
-  end)
-
-  it("rejects request and caches decision when limit is exceeding after processing a key", function()
-    local desired_delay = 0.015
-
-    stub_resty_global_throttle_process(LOCATION_CONFIG.limit + 1, desired_delay, nil, function()
-      assert_request_rejected(CONFIG, LOCATION_CONFIG, { with_cache = false })
-
-      local cache_key = LOCATION_CONFIG.namespace .. ngx.var.remote_addr
-      assert.is_true(ngx.shared.global_throttle_cache:get(cache_key))
-
-      -- we assume it won't take more than this  after caching
-      -- until we execute the assertion below
-      local delta = 0.001
-      local ttl = ngx.shared.global_throttle_cache:ttl(cache_key)
-      assert.is_true(ttl > desired_delay - delta)
-      assert.is_true(ttl <= desired_delay)
-    end)
-  end)
-
-  it("rejects request and skip caching of decision when limit is exceeding after processing a key but desired delay is lower than the threshold", function()
-    local desired_delay = 0.0009
-
-    stub_resty_global_throttle_process(LOCATION_CONFIG.limit, desired_delay, nil, function()
-      assert_request_rejected(CONFIG, LOCATION_CONFIG, { with_cache = false })
-
-      local cache_key = LOCATION_CONFIG.namespace .. ngx.var.remote_addr
-      assert.is_nil(ngx.shared.global_throttle_cache:get(cache_key))
-    end)
-  end)
-
-  it("allows the request when limit is not exceeding after processing a key", function()
-    stub_resty_global_throttle_process(LOCATION_CONFIG.limit - 3, nil, nil,
-      function()
-        assert_request_not_rejected(CONFIG, LOCATION_CONFIG)
-      end
-    )
-  end)
-
-  it("rejects with custom status code", function()
-    cache_rejection_decision(NAMESPACE, ngx.var.remote_addr, 0.3)
-    local config = util.deepcopy(CONFIG)
-    config.status_code = 503
-    assert_request_rejected(config, LOCATION_CONFIG, { with_cache = true })
-  end)
-end)
diff --git a/rootfs/etc/nginx/lua/test/run.lua b/rootfs/etc/nginx/lua/test/run.lua
index d43ce8612..8e20ea3f5 100644
--- a/rootfs/etc/nginx/lua/test/run.lua
+++ b/rootfs/etc/nginx/lua/test/run.lua
@@ -11,8 +11,6 @@ do
   -- if there's more constants need to be whitelisted for test runs, add here.
   local GLOBALS_ALLOWED_IN_TEST = {
     helpers = true,
-    require_without_cache = true,
-    reset_ngx = true,
   }
   local newindex = function(table, key, value)
     rawset(table, key, value)
@@ -71,15 +69,6 @@ end
 
 ngx.log = function(...) end
 ngx.print = function(...) end
-local original_ngx = ngx
-_G.reset_ngx = function()
-  ngx = original_ngx
-end
-
-_G.require_without_cache = function(module)
-  package.loaded[module] = nil
-  return require(module)
-end
 
 lua_ingress.init_worker()
 
diff --git a/rootfs/etc/nginx/lua/test/util_test.lua b/rootfs/etc/nginx/lua/test/util_test.lua
index 1aca67fa1..0b8d48ae4 100644
--- a/rootfs/etc/nginx/lua/test/util_test.lua
+++ b/rootfs/etc/nginx/lua/test/util_test.lua
@@ -1,16 +1,27 @@
+local original_ngx = ngx
 local util
 
+local function reset_ngx()
+  _G.ngx = original_ngx
+end
+
+local function mock_ngx(mock)
+  local _ngx = mock
+  setmetatable(_ngx, { __index = ngx })
+  _G.ngx = _ngx
+end
+
 describe("utility", function()
-  before_each(function()
-    ngx.var = { remote_addr = "192.168.1.1", [1] = "nginx/regexp/1/group/capturing" }
-    util = require_without_cache("util")
-  end)
 
   after_each(function()
     reset_ngx()
   end)
 
   describe("ngx_complex_value", function()
+    before_each(function()
+      mock_ngx({ var = { remote_addr = "192.168.1.1", [1] = "nginx/regexp/1/group/capturing" } })
+      util = require("util")
+    end)
 
     local ngx_complex_value = function(data)
       local ret, err = util.parse_complex_value(data)
diff --git a/test/e2e-image/Dockerfile b/test/e2e-image/Dockerfile
index a9cdd80c3..4e5f89c34 100644
--- a/test/e2e-image/Dockerfile
+++ b/test/e2e-image/Dockerfile
@@ -1,4 +1,4 @@
-FROM k8s.gcr.io/ingress-nginx/e2e-test-runner:v20210104-g81a8d5cd8@sha256:bfd55f589ea998f961825a9d09158d766cf621d1b8fc5d8c905aba07d9794e08 AS BASE
+FROM k8s.gcr.io/ingress-nginx/e2e-test-runner:v20201216-g7de30e45d@sha256:4d5ac3f6a88137480f3fb5002af3703304b9fbac6b7024090417f2b479c31e71 AS BASE
 
 FROM alpine:3.12
 
diff --git a/test/e2e/admission/admission.go b/test/e2e/admission/admission.go
index b6cf638fe..520691942 100644
--- a/test/e2e/admission/admission.go
+++ b/test/e2e/admission/admission.go
@@ -45,33 +45,6 @@ var _ = framework.IngressNginxDescribe("[Serial] admission controller", func() {
 		assert.Nil(ginkgo.GinkgoT(), err, "uninstalling helm chart")
 	})
 
-	ginkgo.It("reject ingress with global-rate-limit annotations when memcached is not configured", func() {
-		host := "admission-test"
-
-		annotations := map[string]string{
-			"nginx.ingress.kubernetes.io/global-rate-limit":        "100",
-			"nginx.ingress.kubernetes.io/global-rate-limit-window": "1m",
-		}
-		ing := framework.NewSingleIngress("first-ingress", "/", host, f.Namespace, framework.EchoService, 80, annotations)
-
-		ginkgo.By("rejects ingress when memcached is not configured")
-
-		_, err := f.KubeClientSet.NetworkingV1beta1().Ingresses(f.Namespace).Create(context.TODO(), ing, metav1.CreateOptions{})
-		assert.NotNil(ginkgo.GinkgoT(), err, "creating ingress with global throttle annotations when memcached is not configured")
-
-		ginkgo.By("accepts ingress when memcached is not configured")
-
-		f.UpdateNginxConfigMapData("global-rate-limit-memcached-host", "memc.default.svc.cluster.local")
-
-		_, err = f.KubeClientSet.NetworkingV1beta1().Ingresses(f.Namespace).Create(context.TODO(), ing, metav1.CreateOptions{})
-		assert.Nil(ginkgo.GinkgoT(), err, "creating ingress with global throttle annotations when memcached is configured")
-
-		f.WaitForNginxServer(host,
-			func(server string) bool {
-				return strings.Contains(server, fmt.Sprintf("server_name %v", host))
-			})
-	})
-
 	ginkgo.It("should not allow overlaps of host and paths without canary annotations", func() {
 		host := "admission-test"
 
diff --git a/test/e2e/annotations/globalratelimit.go b/test/e2e/annotations/globalratelimit.go
deleted file mode 100644
index dd985c68c..000000000
--- a/test/e2e/annotations/globalratelimit.go
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-Copyright 2020 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package annotations
-
-import (
-	"fmt"
-	"net/http"
-	"strings"
-
-	"github.com/onsi/ginkgo"
-	"github.com/stretchr/testify/assert"
-
-	"k8s.io/ingress-nginx/test/e2e/framework"
-)
-
-var _ = framework.DescribeAnnotation("annotation-global-rate-limit", func() {
-	f := framework.NewDefaultFramework("global-rate-limit")
-	host := "global-rate-limit-annotation"
-
-	ginkgo.BeforeEach(func() {
-		f.NewEchoDeployment()
-	})
-
-	ginkgo.It("generates correct configuration", func() {
-		annotations := make(map[string]string)
-		annotations["nginx.ingress.kubernetes.io/global-rate-limit"] = "5"
-		annotations["nginx.ingress.kubernetes.io/global-rate-limit-window"] = "2m"
-
-		ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.EchoService, 80, annotations)
-		ing = f.EnsureIngress(ing)
-		namespace := strings.Replace(string(ing.UID), "-", "", -1)
-
-		serverConfig := ""
-		f.WaitForNginxServer(host, func(server string) bool {
-			serverConfig = server
-			return true
-		})
-		assert.Contains(ginkgo.GinkgoT(), serverConfig,
-			fmt.Sprintf(`global_throttle = { namespace = "%v", `+
-				`limit = 5, window_size = 120, key = { { nil, nil, "remote_addr", nil, }, }, `+
-				`ignored_cidrs = { } }`,
-				namespace))
-
-		f.HTTPTestClient().GET("/").WithHeader("Host", host).Expect().Status(http.StatusOK)
-
-		ginkgo.By("regenerating the correct configuration after update")
-		annotations["nginx.ingress.kubernetes.io/global-rate-limit-key"] = "${remote_addr}${http_x_api_client}"
-		annotations["nginx.ingress.kubernetes.io/global-rate-limit-ignored-cidrs"] = "192.168.1.1, 234.234.234.0/24"
-		ing.SetAnnotations(annotations)
-
-		f.WaitForReload(func() {
-			ing = f.UpdateIngress(ing)
-		})
-
-		serverConfig = ""
-		f.WaitForNginxServer(host, func(server string) bool {
-			serverConfig = server
-			return true
-		})
-		assert.Contains(ginkgo.GinkgoT(), serverConfig,
-			fmt.Sprintf(`global_throttle = { namespace = "%v", `+
-				`limit = 5, window_size = 120, `+
-				`key = { { nil, "remote_addr", nil, nil, }, { nil, "http_x_api_client", nil, nil, }, }, `+
-				`ignored_cidrs = { "192.168.1.1", "234.234.234.0/24", } }`,
-				namespace))
-
-		f.HTTPTestClient().GET("/").WithHeader("Host", host).Expect().Status(http.StatusOK)
-	})
-})
diff --git a/test/e2e/framework/deployment.go b/test/e2e/framework/deployment.go
index 5d1ddc790..a2a8bd180 100644
--- a/test/e2e/framework/deployment.go
+++ b/test/e2e/framework/deployment.go
@@ -52,7 +52,7 @@ func (f *Framework) NewEchoDeploymentWithReplicas(replicas int) {
 // replicas is configurable and
 // name is configurable
 func (f *Framework) NewEchoDeploymentWithNameAndReplicas(name string, replicas int) {
-	deployment := newDeployment(name, f.Namespace, "k8s.gcr.io/ingress-nginx/e2e-test-echo@sha256:d34944a61a65382e9a81f5e28e981187b419b9d579322277c5a98c2857fd7c5e", 80, int32(replicas),
+	deployment := newDeployment(name, f.Namespace, "k8s.gcr.io/ingress-nginx/e2e-test-echo@sha256:fda9a88ff1d4d22fda6b0220118252da79ff0c7cd06d4f736a89bc28b64890eb", 80, int32(replicas),
 		nil,
 		[]corev1.VolumeMount{},
 		[]corev1.Volume{},
@@ -139,7 +139,7 @@ func (f *Framework) NGINXWithConfigDeployment(name string, cfg string) {
 	}, metav1.CreateOptions{})
 	assert.Nil(ginkgo.GinkgoT(), err, "creating configmap")
 
-	deployment := newDeployment(name, f.Namespace, "k8s.gcr.io/ingress-nginx/nginx:v20210104-g2254a9186@sha256:edd1d06bc6892b0dfb42de7d782ceb3c50eec843b09024abf3f95ba23f4feed5", 80, 1,
+	deployment := newDeployment(name, f.Namespace, "k8s.gcr.io/ingress-nginx/nginx:v20201215-ga48ae4203@sha256:460be3452745c8bd944bee8435df962f53082e6f346b9f1742f6d803fe985ac4", 80, 1,
 		nil,
 		[]corev1.VolumeMount{
 			{
diff --git a/test/e2e/framework/framework.go b/test/e2e/framework/framework.go
index 8f5fb3884..ae5a96a38 100644
--- a/test/e2e/framework/framework.go
+++ b/test/e2e/framework/framework.go
@@ -215,8 +215,7 @@ func (f *Framework) updateIngressNGINXPod() error {
 	return err
 }
 
-// WaitForNginxServer waits until the nginx configuration contains a particular server section.
-// `cfg` passed to matcher is normalized by replacing all tabs and spaces with single space.
+// WaitForNginxServer waits until the nginx configuration contains a particular server section
 func (f *Framework) WaitForNginxServer(name string, matcher func(cfg string) bool) {
 	err := wait.Poll(Poll, DefaultTimeout, f.matchNginxConditions(name, matcher))
 	assert.Nil(ginkgo.GinkgoT(), err, "waiting for nginx server condition/s")
@@ -224,7 +223,6 @@ func (f *Framework) WaitForNginxServer(name string, matcher func(cfg string) boo
 }
 
 // WaitForNginxConfiguration waits until the nginx configuration contains a particular configuration
-// `cfg` passed to matcher is normalized by replacing all tabs and spaces with single space.
 func (f *Framework) WaitForNginxConfiguration(matcher func(cfg string) bool) {
 	err := wait.Poll(Poll, DefaultTimeout, f.matchNginxConditions("", matcher))
 	assert.Nil(ginkgo.GinkgoT(), err, "waiting for nginx server condition/s")
@@ -295,6 +293,10 @@ func (f *Framework) matchNginxCustomConditions(from string, to string, matcher f
 	}
 }
 
+func (f *Framework) getNginxConfigMap() (*v1.ConfigMap, error) {
+	return f.getConfigMap("nginx-ingress-controller")
+}
+
 func (f *Framework) getConfigMap(name string) (*v1.ConfigMap, error) {
 	if f.KubeClientSet == nil {
 		return nil, fmt.Errorf("KubeClientSet not initialized")
@@ -327,7 +329,7 @@ func (f *Framework) SetNginxConfigMapData(cmData map[string]string) {
 		assert.Nil(ginkgo.GinkgoT(), err, "updating configuration configmap")
 	}
 
-	f.WaitForReload(fn)
+	f.waitForReload(fn)
 }
 
 // CreateConfigMap creates a new configmap in the current namespace
@@ -358,12 +360,10 @@ func (f *Framework) UpdateNginxConfigMapData(key string, value string) {
 		assert.Nil(ginkgo.GinkgoT(), err, "updating configuration configmap")
 	}
 
-	f.WaitForReload(fn)
+	f.waitForReload(fn)
 }
 
-// WaitForReload calls the passed function and
-// asser it has caused at least 1 reload.
-func (f *Framework) WaitForReload(fn func()) {
+func (f *Framework) waitForReload(fn func()) {
 	initialReloadCount := getReloadCount(f.pod, f.Namespace, f.KubeClientSet)
 
 	fn()
diff --git a/test/e2e/framework/k8s.go b/test/e2e/framework/k8s.go
index 3ca4a3c46..7bff65b82 100644
--- a/test/e2e/framework/k8s.go
+++ b/test/e2e/framework/k8s.go
@@ -76,7 +76,7 @@ func (f *Framework) EnsureIngress(ingress *networking.Ingress) *networking.Ingre
 		assert.Nil(ginkgo.GinkgoT(), err, "creating ingress")
 	}
 
-	f.WaitForReload(fn)
+	f.waitForReload(fn)
 
 	ing := f.GetIngress(f.Namespace, ingress.Name)
 	if ing.Annotations == nil {
diff --git a/test/e2e/lua/dynamic_configuration.go b/test/e2e/lua/dynamic_configuration.go
index 5fcebac7d..ce79827a7 100644
--- a/test/e2e/lua/dynamic_configuration.go
+++ b/test/e2e/lua/dynamic_configuration.go
@@ -33,8 +33,11 @@ import (
 )
 
 const (
+	logDynamicConfigSuccess = "Dynamic reconfiguration succeeded"
+	logDynamicConfigFailure = "Dynamic reconfiguration failed"
 	logRequireBackendReload = "Configuration changes detected, backend reload required"
 	logBackendReloadSuccess = "Backend successfully reloaded"
+	logInitialConfigSync    = "Initial synchronization of the NGINX configuration"
 
 	waitForLuaSync = 5 * time.Second
 )
diff --git a/test/e2e/settings/globalratelimit.go b/test/e2e/settings/globalratelimit.go
deleted file mode 100644
index 409cd5d9c..000000000
--- a/test/e2e/settings/globalratelimit.go
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-Copyright 2020 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package settings
-
-import (
-	"fmt"
-	"net/http"
-	"strconv"
-	"strings"
-
-	"github.com/onsi/ginkgo"
-	"github.com/stretchr/testify/assert"
-	"k8s.io/ingress-nginx/test/e2e/framework"
-)
-
-var _ = framework.DescribeSetting("settings-global-rate-limit", func() {
-	f := framework.NewDefaultFramework("global-rate-limit")
-	host := "global-rate-limit"
-
-	ginkgo.BeforeEach(func() {
-		f.NewEchoDeployment()
-	})
-
-	ginkgo.It("generates correct NGINX configuration", func() {
-		annotations := make(map[string]string)
-		ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.EchoService, 80, annotations)
-		f.EnsureIngress(ing)
-
-		ginkgo.By("generating correct defaults")
-
-		ngxCfg := ""
-		f.WaitForNginxConfiguration(func(cfg string) bool {
-			if strings.Contains(cfg, "global_throttle") {
-				ngxCfg = cfg
-				return true
-			}
-			return false
-		})
-
-		assert.Contains(ginkgo.GinkgoT(), ngxCfg, fmt.Sprintf(`global_throttle = { `+
-			`memcached = { host = "%v", port = %d, connect_timeout = %d, max_idle_timeout = %d, `+
-			`pool_size = %d, }, status_code = %d, }`,
-			"", 11211, 50, 10000, 50, 429))
-
-		f.HTTPTestClient().GET("/").WithHeader("Host", host).Expect().Status(http.StatusOK)
-
-		ginkgo.By("applying customizations")
-
-		memcachedHost := "memc.default.svc.cluster.local"
-		memcachedPort := 11211
-		memcachedConnectTimeout := 100
-		memcachedMaxIdleTimeout := 5000
-		memcachedPoolSize := 100
-		statusCode := 503
-
-		f.SetNginxConfigMapData(map[string]string{
-			"global-rate-limit-memcached-host":             memcachedHost,
-			"global-rate-limit-memcached-port":             strconv.Itoa(memcachedPort),
-			"global-rate-limit-memcached-connect-timeout":  strconv.Itoa(memcachedConnectTimeout),
-			"global-rate-limit-memcached-max-idle-timeout": strconv.Itoa(memcachedMaxIdleTimeout),
-			"global-rate-limit-memcached-pool-size":        strconv.Itoa(memcachedPoolSize),
-			"global-rate-limit-status-code":                strconv.Itoa(statusCode),
-		})
-
-		ngxCfg = ""
-		f.WaitForNginxConfiguration(func(cfg string) bool {
-			if strings.Contains(cfg, "global_throttle") {
-				ngxCfg = cfg
-				return true
-			}
-			return false
-		})
-
-		assert.Contains(ginkgo.GinkgoT(), ngxCfg, fmt.Sprintf(`global_throttle = { `+
-			`memcached = { host = "%v", port = %d, connect_timeout = %d, max_idle_timeout = %d, `+
-			`pool_size = %d, }, status_code = %d, }`,
-			memcachedHost, memcachedPort, memcachedConnectTimeout, memcachedMaxIdleTimeout,
-			memcachedPoolSize, statusCode))
-
-		f.HTTPTestClient().GET("/").WithHeader("Host", host).Expect().Status(http.StatusOK)
-	})
-})
diff --git a/test/e2e/settings/ocsp/ocsp.go b/test/e2e/settings/ocsp/ocsp.go
index 873d10f2b..38055659d 100644
--- a/test/e2e/settings/ocsp/ocsp.go
+++ b/test/e2e/settings/ocsp/ocsp.go
@@ -267,6 +267,15 @@ func prepareCertificates(namespace string) error {
 	return nil
 }
 
+func commandExists(name string) bool {
+	_, err := exec.Command(name, "version").Output()
+	if err != nil {
+		return false
+	}
+
+	return true
+}
+
 func ocspserveDeployment(namespace string) (*appsv1.Deployment, *corev1.Service) {
 	name := "ocspserve"
 	return &appsv1.Deployment{