Repository: kubernetes/ingress-nginx
Pull request #6541 (2020-11-29 23:38:46)

fixed misspell
<!--- Provide a general summary of your changes in the Title above --->
fixed misspell
<!--- Please don't @-mention people in PR or commit messages (do so in an additional comment). --->

## What this PR does / why we need it:
<!--- Why is this change required? What problem does it solve? -->
in rootfs/etc/nginx/plugins/README.md, misspell is found
<!--- If it fixes an open issue, please link to the issue here. -->

## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)

## Which issue/s this PR fixes
<!--
(optional, in `fixes #<issue number>` format, will close that issue when PR gets merged):

fixes #
-->

## How Has This Been Tested?
<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran to -->
<!--- see how your change affects other areas of the code, etc. -->

## Checklist:
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [x ] I've read the [CONTRIBUTION](https://github.com/kubernetes/ingress-nginx/blob/master/CONTRIBUTING.md) guide
- [ ] I have added tests to cover my changes.
- [ ] All new and existing tests passed.


k8s-ci-robot: Hi @Jangyooseok. 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/6541#" title="Author self-approved">Jangyooseok</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **aledbf** after the PR has been reviewed.
You can assign the PR to them by writing `/assign @aledbf` 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":["aledbf"]} -->
cmluciano: /ok-to-test

Patch:
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 0de5cdba5..ec1fe3a98 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -36,7 +36,7 @@ jobs:
               - 'test/e2e/**/*'
             charts:
               - 'charts/ingress-nginx/Chart.yaml'
-              - 'charts/ingress-nginx/**/*'
+              - 'charts/ingress-nginx/*'
 
   build:
     name: Build
@@ -123,7 +123,7 @@ jobs:
         uses: engineerd/setup-kind@v0.5.0
         with:
           version: v0.9.0
-          image: kindest/node:v1.19.4
+          image: kindest/node:v1.18.8
 
       - name: Test
         env:
@@ -144,7 +144,7 @@ jobs:
 
     strategy:
       matrix:
-        k8s: [v1.16.15, v1.17.11, v1.18.8, v1.19.4]
+        k8s: [v1.16.15, v1.17.11, v1.18.8, v1.19.1]
 
     steps:
 
diff --git a/.github/workflows/helm.yaml b/.github/workflows/helm.yaml
index 4a9bdad42..f753a2992 100644
--- a/.github/workflows/helm.yaml
+++ b/.github/workflows/helm.yaml
@@ -49,6 +49,6 @@ jobs:
           git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com"
 
       - name: Run chart-releaser
-        uses: helm/chart-releaser-action@v1.1.0
+        uses: helm/chart-releaser-action@v1.0.0-rc.2
         env:
           CR_TOKEN: "${{ secrets.PERSONAL_TOKEN }}"
diff --git a/build/dev-env.sh b/build/dev-env.sh
index d21ffb241..08ead352b 100755
--- a/build/dev-env.sh
+++ b/build/dev-env.sh
@@ -61,7 +61,7 @@ echo "[dev-env] building image"
 make build image
 docker tag "${REGISTRY}/controller:${TAG}" "${DEV_IMAGE}"
 
-export K8S_VERSION=${K8S_VERSION:-v1.19.4@sha256:796d09e217d93bed01ecf8502633e48fd806fe42f9d02fdd468b81cd4e3bd40b}
+export K8S_VERSION=${K8S_VERSION:-v1.19.0@sha256:3b0289b2d1bab2cb9108645a006939d2f447a10ad2bb21919c332d06b548bbc6}
 
 KIND_CLUSTER_NAME="ingress-nginx-dev"
 
diff --git a/charts/ingress-nginx/CHANGELOG.md b/charts/ingress-nginx/CHANGELOG.md
index 420898358..9ea1c3717 100644
--- a/charts/ingress-nginx/CHANGELOG.md
+++ b/charts/ingress-nginx/CHANGELOG.md
@@ -4,18 +4,6 @@ This file documents all notable changes to [ingress-nginx](https://github.com/ku
 
 ### Unreleased
 
-### 3.12.0
-
-- [X] [#6514](https://github.com/kubernetes/ingress-nginx/pull/6514) Remove helm2 support and update docs
-
-### 3.11.1
-
-- [X] [#6505](https://github.com/kubernetes/ingress-nginx/pull/6505) Reorder HPA resource list to work with GitOps tooling
-
-### 3.11.0
-
-- Support Keda Autoscaling
-
 ### 3.10.1
 
 - Fix regression introduced in 0.41.0 with external authentication
diff --git a/charts/ingress-nginx/Chart.yaml b/charts/ingress-nginx/Chart.yaml
index b20949771..eca4f9546 100644
--- a/charts/ingress-nginx/Chart.yaml
+++ b/charts/ingress-nginx/Chart.yaml
@@ -1,8 +1,6 @@
-apiVersion: v2
+apiVersion: v1
 name: ingress-nginx
-# When the version is modified, make sure the artifacthub.io/changes list is updated
-# Also update CHANGELOG.md
-version: 3.12.0
+version: 3.10.1
 appVersion: 0.41.2
 home: https://github.com/kubernetes/ingress-nginx
 description: Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer
@@ -12,13 +10,10 @@ keywords:
   - nginx
 sources:
   - https://github.com/kubernetes/ingress-nginx
-type: application
 maintainers:
   - name: ChiefAlexander
 engine: gotpl
 kubeVersion: ">=1.16.0-0"
 annotations:
-  # List of changes for the release in artifacthub.io
-  # https://artifacthub.io/packages/helm/ingress-nginx/ingress-nginx?modal=changelog
   artifacthub.io/changes: |
-    - Remove helm2 support and update docs
+    - Update ingress-nginx image to v0.41.2
diff --git a/charts/ingress-nginx/README.md b/charts/ingress-nginx/README.md
index 37b0ca1fb..1a157d578 100644
--- a/charts/ingress-nginx/README.md
+++ b/charts/ingress-nginx/README.md
@@ -14,15 +14,18 @@ This chart bootstraps an ingress-nginx deployment on a [Kubernetes](http://kuber
 
 ```console
 helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
+helm repo add stable https://charts.helm.sh/stable
 helm repo update
 ```
 
 ## Install Chart
 
-**Important:** only helm3 is supported
-
 ```console
-helm install [RELEASE_NAME] ingress-nginx/ingress-nginx
+# Helm 3
+$ helm install [RELEASE_NAME] ingress-nginx/ingress-nginx
+
+# Helm 2
+$ helm install --name [RELEASE_NAME] ingress-nginx/ingress-nginx
 ```
 
 The command deploys ingress-nginx on the Kubernetes cluster in the default configuration.
@@ -34,7 +37,11 @@ _See [helm install](https://helm.sh/docs/helm/helm_install/) for command documen
 ## Uninstall Chart
 
 ```console
-helm uninstall [RELEASE_NAME]
+# Helm 3
+$ helm uninstall [RELEASE_NAME]
+
+# Helm 2
+# helm delete --purge [RELEASE_NAME]
 ```
 
 This removes all the Kubernetes components associated with the chart and deletes the release.
@@ -44,7 +51,8 @@ _See [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) for command doc
 ## Upgrading Chart
 
 ```console
-helm upgrade [RELEASE_NAME] [CHART] --install
+# Helm 3 or 2
+$ helm upgrade [RELEASE_NAME] [CHART] --install
 ```
 
 _See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command documentation._
@@ -72,7 +80,11 @@ Note that there are some different and upgraded configurations between the two c
 See [Customizing the Chart Before Installing](https://helm.sh/docs/intro/using_helm/#customizing-the-chart-before-installing). To see all configurable options with detailed comments, visit the chart's [values.yaml](./values.yaml), or run these configuration commands:
 
 ```console
-helm show values ingress-nginx/ingress-nginx
+# Helm 2
+$ helm inspect values ingress-nginx/ingress-nginx
+
+# Helm 3
+$ helm show values ingress-nginx/ingress-nginx
 ```
 
 ### PodDisruptionBudget
diff --git a/charts/ingress-nginx/templates/controller-hpa.yaml b/charts/ingress-nginx/templates/controller-hpa.yaml
index b46807fc1..4923cf8d2 100644
--- a/charts/ingress-nginx/templates/controller-hpa.yaml
+++ b/charts/ingress-nginx/templates/controller-hpa.yaml
@@ -1,6 +1,4 @@
 {{- if and .Values.controller.autoscaling.enabled (or (eq .Values.controller.kind "Deployment") (eq .Values.controller.kind "Both")) -}}
-{{- if not .Values.controller.keda.enabled }}
-
 apiVersion: autoscaling/v2beta2
 kind: HorizontalPodAutoscaler
 metadata:
@@ -16,14 +14,6 @@ spec:
   minReplicas: {{ .Values.controller.autoscaling.minReplicas }}
   maxReplicas: {{ .Values.controller.autoscaling.maxReplicas }}
   metrics:
-  {{- with .Values.controller.autoscaling.targetMemoryUtilizationPercentage }}
-  - type: Resource 
-    resource: 
-      name: memory 
-      target:
-        type: Utilization
-        averageUtilization: {{ . }}
-  {{- end }}
   {{- with .Values.controller.autoscaling.targetCPUUtilizationPercentage }}
   - type: Resource
     resource:
@@ -32,9 +22,15 @@ spec:
         type: Utilization
         averageUtilization: {{ . }}
   {{- end }}
+  {{- with .Values.controller.autoscaling.targetMemoryUtilizationPercentage }}
+  - type: Resource 
+    resource: 
+      name: memory 
+      target:
+        type: Utilization
+        averageUtilization: {{ . }}
+  {{- end }}
   {{- with .Values.controller.autoscalingTemplate }}
 {{- toYaml . | nindent 2 }}
   {{- end }}
 {{- end }}
-{{- end }}
-
diff --git a/charts/ingress-nginx/templates/controller-keda.yaml b/charts/ingress-nginx/templates/controller-keda.yaml
deleted file mode 100644
index 7c391de9d..000000000
--- a/charts/ingress-nginx/templates/controller-keda.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-{{- if .Values.controller.keda.enabled }}
-# https://keda.sh/docs/
-
-apiVersion: {{ .Values.controller.keda.apiVersion }}
-kind: ScaledObject
-metadata:
-  labels:
-    {{- include "ingress-nginx.labels" . | nindent 4 }}
-    app.kubernetes.io/component: controller
-  name: {{ include "ingress-nginx.controller.fullname" . }}
-
-spec:
-  scaleTargetRef:
-    deploymentName: {{ include "ingress-nginx.controller.fullname" . }}
-  pollingInterval: {{ .Values.controller.keda.pollingInterval }}
-  cooldownPeriod: {{ .Values.controller.keda.cooldownPeriod }}
-  minReplicaCount: {{ .Values.controller.keda.minReplicas }}
-  maxReplicaCount: {{ .Values.controller.keda.maxReplicas }}
-  triggers:
-{{- with .Values.controller.keda.triggers }}
-{{ toYaml . | indent 2 }}
-{{ end }}
-  advanced:
-    restoreToOriginalReplicaCount: {{ .Values.controller.keda.restoreToOriginalReplicaCount }}
-{{- if .Values.controller.keda.behavior }}
-    horizontalPodAutoscalerConfig:
-      behavior:
-{{ with .Values.controller.keda.behavior -}}
-{{ toYaml . | indent 8 }}
-{{ end }}
-
-{{- end }}
-{{- end }}
diff --git a/charts/ingress-nginx/values.yaml b/charts/ingress-nginx/values.yaml
index 7e2e54c72..f62f466a1 100644
--- a/charts/ingress-nginx/values.yaml
+++ b/charts/ingress-nginx/values.yaml
@@ -273,7 +273,6 @@ controller:
       cpu: 100m
       memory: 90Mi
 
-  # Mutually exclusive with keda autoscaling
   autoscaling:
     enabled: false
     minReplicas: 1
@@ -292,40 +291,6 @@ controller:
   #       type: AverageValue
   #       averageValue: 10000m
 
-  # Mutually exclusive with hpa autoscaling
-  keda:
-    apiVersion: "keda.sh/v1alpha1"
-  # apiVersion changes with keda 1.x vs 2.x
-  # 2.x = keda.sh/v1alpha1
-  # 1.x = keda.k8s.io/v1alpha1
-    enabled: false
-    minReplicas: 1
-    maxReplicas: 11
-    pollingInterval: 30
-    cooldownPeriod: 300
-    restoreToOriginalReplicaCount: false
-    triggers: []
- #     - type: prometheus
- #       metadata:
- #         serverAddress: http://<prometheus-host>:9090
- #         metricName: http_requests_total
- #         threshold: '100'
- #         query: sum(rate(http_requests_total{deployment="my-deployment"}[2m]))
-
-    behavior: {}
- #     scaleDown:
- #       stabilizationWindowSeconds: 300
- #       policies:
- #       - type: Pods
- #         value: 1
- #         periodSeconds: 180
- #     scaleUp:
- #       stabilizationWindowSeconds: 300
- #       policies:
- #       - type: Pods
- #         value: 2
- #         periodSeconds: 60
-
   ## Enable mimalloc as a drop-in replacement for malloc.
   ## ref: https://github.com/microsoft/mimalloc
   ##
diff --git a/deploy/grafana/dashboards/nginx.json b/deploy/grafana/dashboards/nginx.json
index 5369efb68..3641b844a 100644
--- a/deploy/grafana/dashboards/nginx.json
+++ b/deploy/grafana/dashboards/nginx.json
@@ -206,7 +206,7 @@
       "tableColumn": "",
       "targets": [
         {
-          "expr": "sum(avg_over_time(nginx_ingress_controller_nginx_process_connections{controller_pod=~\"$controller\",controller_class=~\"$controller_class\",controller_namespace=~\"$namespace\",state=\"active\"}[2m]))",
+          "expr": "sum(avg_over_time(nginx_ingress_controller_nginx_process_connections{controller_pod=~\"$controller\",controller_class=~\"$controller_class\",controller_namespace=~\"$namespace\"}[2m]))",
           "format": "time_series",
           "instant": false,
           "intervalFactor": 1,
diff --git a/docs/deploy/index.md b/docs/deploy/index.md
index 0aced86a0..ad1f4c00e 100644
--- a/docs/deploy/index.md
+++ b/docs/deploy/index.md
@@ -190,19 +190,21 @@ kubectl exec -it $POD_NAME -n $POD_NAMESPACE -- /nginx-ingress-controller --vers
 
 ## Using Helm
 
-!!! attention
-    Only helm3 is supported
-
 NGINX Ingress controller can be installed via [Helm](https://helm.sh/) using the chart from the project repository.
 To install the chart with the release name `ingress-nginx`:
 
 ```console
 helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
-helm repo update
-
 helm install my-release ingress-nginx/ingress-nginx
 ```
 
+If you are using [Helm 2](https://v2.helm.sh/) then specify release name using `--name` flag
+
+```console
+helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx/
+helm install --name ingress-nginx ingress-nginx/ingress-nginx
+```
+
 ## Detect installed version:
 
 ```console
diff --git a/docs/development.md b/docs/development.md
index eb5e7cae5..92f034491 100644
--- a/docs/development.md
+++ b/docs/development.md
@@ -9,7 +9,7 @@ Install [Go 1.14](https://golang.org/dl/) or later.
 !!! note
     The project uses [Go Modules](https://github.com/golang/go/wiki/Modules)
 
-Install [Docker](https://docs.docker.com/engine/install/) (v19.03.0 or later with experimental feature on)
+Install [Docker](https://docs.docker.com/engine/install/)
 
 !!! important
     The majority of make tasks run as docker containers
diff --git a/docs/user-guide/nginx-configuration/annotations.md b/docs/user-guide/nginx-configuration/annotations.md
index 5b9eab5b9..8714f400b 100755
--- a/docs/user-guide/nginx-configuration/annotations.md
+++ b/docs/user-guide/nginx-configuration/annotations.md
@@ -440,8 +440,6 @@ Additionally it is possible to set:
   `<Method>` to specify the HTTP method to use.
 * `nginx.ingress.kubernetes.io/auth-signin`:
   `<SignIn_URL>` to specify the location of the error page.
-* `nginx.ingress.kubernetes.io/auth-signin-redirect-param`:
-  `<SignIn_URL>` to specify the URL parameter in the error page which should contain the original URL for a failed signin request.
 * `nginx.ingress.kubernetes.io/auth-response-headers`:
   `<Response_Header_1, ..., Response_Header_n>` to specify headers to pass to backend once authentication request completes.
 * `nginx.ingress.kubernetes.io/auth-proxy-set-headers`:
diff --git a/docs/user-guide/nginx-configuration/configmap.md b/docs/user-guide/nginx-configuration/configmap.md
index 5d76604b7..0005490be 100755
--- a/docs/user-guide/nginx-configuration/configmap.md
+++ b/docs/user-guide/nginx-configuration/configmap.md
@@ -112,9 +112,6 @@ The following table shows a configuration option's name, type, and the default v
 |[upstream-keepalive-requests](#upstream-keepalive-requests)|int|10000|
 |[limit-conn-zone-variable](#limit-conn-zone-variable)|string|"$binary_remote_addr"|
 |[proxy-stream-timeout](#proxy-stream-timeout)|string|"600s"|
-|[proxy-stream-next-upstream](#proxy-stream-next-upstream)|bool|"true"|
-|[proxy-stream-next-upstream-timeout](#proxy-stream-next-upstream-timeout)|string|"600s"|
-|[proxy-stream-next-upstream-tries](#proxy-stream-next-upstream-tries)|int|3|
 |[proxy-stream-responses](#proxy-stream-responses)|int|1|
 |[bind-address](#bind-address)|[]string|""|
 |[use-forwarded-headers](#use-forwarded-headers)|bool|"false"|
@@ -180,7 +177,6 @@ The following table shows a configuration option's name, type, and the default v
 |[global-auth-url](#global-auth-url)|string|""|
 |[global-auth-method](#global-auth-method)|string|""|
 |[global-auth-signin](#global-auth-signin)|string|""|
-|[global-auth-signin-redirect-param](#global-auth-signin-redirect-param)|string|"rd"|
 |[global-auth-response-headers](#global-auth-response-headers)|string|""|
 |[global-auth-request-redirect](#global-auth-request-redirect)|string|""|
 |[global-auth-snippet](#global-auth-snippet)|string|""|
@@ -514,8 +510,6 @@ The default cipher list is:
 
 The ordering of a ciphersuite is very important because it decides which algorithms are going to be selected in priority. The recommendation above prioritizes algorithms that provide perfect [forward secrecy](https://wiki.mozilla.org/Security/Server_Side_TLS#Forward_Secrecy).
 
-DHE-based cyphers will not be available until DH parameter is configured [Custom DH parameters for perfect forward secrecy](https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/customization/ssl-dh-param)
-
 Please check the [Mozilla SSL Configuration Generator](https://mozilla.github.io/server-side-tls/ssl-config-generator/).
 
 __Note:__ ssl_prefer_server_ciphers directive will be enabled by default for http context.
@@ -738,27 +732,6 @@ Sets the timeout between two successive read or write operations on client or pr
 _References:_
 [http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_timeout](http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_timeout)
 
-## proxy-stream-next-upstream
-
-When a connection to the proxied server cannot be established, determines whether a client connection will be passed to the next server.
-
-_References:_
-[http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_next_upstream](http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_next_upstream)
-
-## proxy-stream-next-upstream-timeout
-
-Limits the time allowed to pass a connection to the next server. The 0 value turns off this limitation.
-
-_References:_
-[http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_next_upstream_timeout](http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_next_upstream_timeout)
-
-## proxy-stream-next-upstream-tries
-
-Limits the number of possible tries a request should be passed to the next server. The 0 value turns off this limitation.
-
-_References:_
-[http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_next_upstream_tries](http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_next_upstream_timeout)
-
 ## proxy-stream-responses
 
 Sets the number of datagrams expected from the proxied server in response to the client request if the UDP protocol is used.
@@ -1080,12 +1053,6 @@ Sets the location of the error page for an existing service that provides authen
 Similar to the Ingress rule annotation `nginx.ingress.kubernetes.io/auth-signin`.
 _**default:**_ ""
 
-## global-auth-signin-redirect-param
-
-Sets the query parameter in the error page signin URL which contains the original URL of the request that failed authentication.
-Similar to the Ingress rule annotation `nginx.ingress.kubernetes.io/auth-signin-redirect-param`.
-_**default:**_ "rd"
-
 ## global-auth-response-headers
 
 Sets the headers to pass to backend once authentication request completes. Applied to all the locations.
diff --git a/images/nginx/rootfs/build.sh b/images/nginx/rootfs/build.sh
index ba43705ba..076f4bd00 100755
--- a/images/nginx/rootfs/build.sh
+++ b/images/nginx/rootfs/build.sh
@@ -18,7 +18,7 @@ set -o errexit
 set -o nounset
 set -o pipefail
 
-export NGINX_VERSION=1.19.5
+export NGINX_VERSION=1.19.4
 export NDK_VERSION=0.3.1
 export SETMISC_VERSION=0.32
 export MORE_HEADERS_VERSION=0.33
@@ -33,9 +33,10 @@ export DATADOG_CPP_VERSION=1.2.0
 export MODSECURITY_VERSION=22e53aba4e3ae8c7d59a3672d6727e49246afe96
 export MODSECURITY_LIB_VERSION=v3.0.4
 export OWASP_MODSECURITY_CRS_VERSION=v3.3.0
-export LUA_NGX_VERSION=0.10.19
-export LUA_STREAM_NGX_VERSION=0.0.9
+export LUA_NGX_VERSION=0.10.18rc4
+export LUA_STREAM_NGX_VERSION=0.0.9rc3
 export LUA_UPSTREAM_VERSION=0.07
+export LUA_BRIDGE_TRACER_VERSION=0.1.1
 export LUA_CJSON_VERSION=2.1.0.8
 export NGINX_INFLUXDB_VERSION=5b09391cb7b9a889687c0aa67964c06a2d933e8b
 export GEOIP2_VERSION=3.3
@@ -43,9 +44,9 @@ export NGINX_AJP_VERSION=bf6cd93f2098b59260de8d494f0f4b1f11a84627
 
 export LUAJIT_VERSION=2.1-20201027
 
-export LUA_RESTY_BALANCER=af4508f7aa5560c7d810922c2515b557f9e5d51a
+export LUA_RESTY_BALANCER=0.03
 export LUA_RESTY_CACHE=0.10
-export LUA_RESTY_CORE=0.1.21
+export LUA_RESTY_CORE=0.1.20rc3
 export LUA_RESTY_COOKIE_VERSION=766ad8c15e498850ac77f5e0265f1d3f30dc4027
 export LUA_RESTY_DNS=0.21
 export LUA_RESTY_HTTP=0.15
@@ -118,7 +119,7 @@ mkdir --verbose -p "$BUILD_PATH"
 cd "$BUILD_PATH"
 
 # download, verify and extract the source files
-get_src 5c0a46afd6c452d4443f6ec0767f4d5c3e7c499e55a60cd6542b35a61eda799c \
+get_src 61df546927905a0d624f9396bb7a8bc7ca7fd26522ce9714d56a78b73284000e \
         "https://nginx.org/download/nginx-$NGINX_VERSION.tar.gz"
 
 get_src 0e971105e210d272a497567fa2e2c256f4e39b845a5ba80d373e26ba1abfbd85 \
@@ -154,10 +155,10 @@ get_src 21257af93a64fee42c04ca6262d292b2e4e0b7b0660c511db357b32fd42ef5d3 \
 get_src 464f46744a6be778626d11452c4db3c2d09461080c6db42e358e21af19d542f6 \
         "https://github.com/msgpack/msgpack-c/archive/cpp-$MSGPACK_VERSION.tar.gz"
 
-get_src 242d60b97eb7459cd0c0d58083cf7f3195d46181829da45ab8b09a857bb0ed01 \
+get_src 0407cd1a71c60dc192dc2bfe87f89aea9351c69e815758b375770a958e8e1823 \
         "https://github.com/openresty/lua-nginx-module/archive/v$LUA_NGX_VERSION.tar.gz"
 
-get_src 6fcf7054f412a19c23c1ac3c0663f42f40bccc907d98c5d1657ae5cab9973ee9 \
+get_src 3a92710da33a177dee5db1cc4c76a37661c064543bfb309e66400df7a0641058 \
         "https://github.com/openresty/stream-lua-nginx-module/archive/v$LUA_STREAM_NGX_VERSION.tar.gz"
 
 get_src 2a69815e4ae01aa8b170941a8e1a10b6f6a9aab699dee485d58f021dd933829a \
@@ -169,6 +170,9 @@ get_src f74a0821b079ea1fd63dd8659064356fc3f421ff4b35c17877140d2b2841cc3b \
 get_src 3e6fe45f467d653870985cc52a1c2cf81a8a2c7a7bcf7ffcfedfd305a47a1eca \
         "https://github.com/DataDog/dd-opentracing-cpp/archive/v$DATADOG_CPP_VERSION.tar.gz"
 
+get_src 6faab57557bd9cc9fc38208f6bc304c1c13cf048640779f98812cf1f9567e202 \
+        "https://github.com/opentracing/lua-bridge-tracer/archive/v$LUA_BRIDGE_TRACER_VERSION.tar.gz"
+
 get_src 1af5a5632dc8b00ae103d51b7bf225de3a7f0df82f5c6a401996c080106e600e \
         "https://github.com/influxdata/nginx-influxdb-module/archive/$NGINX_INFLUXDB_VERSION.tar.gz"
 
@@ -184,10 +188,10 @@ get_src 5d16e623d17d4f42cc64ea9cfb69ca960d313e12f5d828f785dd227cc483fcbd \
 get_src bfd8c4b6c90aa9dcbe047ac798593a41a3f21edcb71904d50d8ac0e8c77d1132 \
         "https://github.com/openresty/lua-resty-string/archive/v$LUA_RESTY_STRING_VERSION.tar.gz"
 
-get_src a21ec0d78a5dc5856df2374890a8a58e51de866b3d5978aceb0109a094367630 \
-        "https://github.com/openresty/lua-resty-balancer/archive/$LUA_RESTY_BALANCER.tar.gz"
+get_src 82209d5a5d9545c6dde3db7857f84345db22162fdea9743d5e2b2094d8d407f8 \
+        "https://github.com/openresty/lua-resty-balancer/archive/v$LUA_RESTY_BALANCER.tar.gz"
 
-get_src a377fbce78ba10f3ed3a8b5173ea318f8cf8da9d2ab127bb1e1f263078bf7da0 \
+get_src 467e6e0cade66d74a9f8e789d1045bc033a646cee904ba758be8191b61fa6ecc \
         "https://github.com/openresty/lua-resty-core/archive/v$LUA_RESTY_CORE.tar.gz"
 
 get_src bd6bee4ccc6cf3307ab6ca0eea693a921fab9b067ba40ae12a652636da588ff7 \
@@ -210,7 +214,7 @@ get_src 987d5754a366d3ccbf745d2765f82595dcff5b94ba6c755eeb6d310447996f32 \
 
 
 # improve compilation times
-CORES=$(($(grep -c ^processor /proc/cpuinfo) - 1))
+CORES=$(($(grep -c ^processor /proc/cpuinfo) - 0))
 
 export MAKEFLAGS=-j${CORES}
 export CTEST_BUILD_FLAGS=${MAKEFLAGS}
@@ -227,7 +231,6 @@ make CCDEBUG=-g
 make install
 
 ln -s /usr/local/bin/luajit /usr/local/bin/lua
-ln -s "$LUAJIT_INC" /usr/local/include/lua
 
 cd "$BUILD_PATH"
 
@@ -365,10 +368,6 @@ git submodule update
 
 sh build.sh
 
-# https://github.com/SpiderLabs/ModSecurity/issues/1909#issuecomment-465926762
-sed -i '115i LUA_CFLAGS="${LUA_CFLAGS} -DWITH_LUA_JIT_2_1"' build/lua.m4
-sed -i '117i AC_SUBST(LUA_CFLAGS)' build/lua.m4
-
 ./configure \
   --disable-doxygen-doc \
   --disable-doxygen-html \
diff --git a/internal/ingress/annotations/authreq/main.go b/internal/ingress/annotations/authreq/main.go
index afcd84a65..3cd0b438c 100644
--- a/internal/ingress/annotations/authreq/main.go
+++ b/internal/ingress/annotations/authreq/main.go
@@ -35,16 +35,15 @@ import (
 type Config struct {
 	URL string `json:"url"`
 	// Host contains the hostname defined in the URL
-	Host                   string            `json:"host"`
-	SigninURL              string            `json:"signinUrl"`
-	SigninURLRedirectParam string            `json:"signinUrlRedirectParam,omitempty"`
-	Method                 string            `json:"method"`
-	ResponseHeaders        []string          `json:"responseHeaders,omitempty"`
-	RequestRedirect        string            `json:"requestRedirect"`
-	AuthSnippet            string            `json:"authSnippet"`
-	AuthCacheKey           string            `json:"authCacheKey"`
-	AuthCacheDuration      []string          `json:"authCacheDuration"`
-	ProxySetHeaders        map[string]string `json:"proxySetHeaders,omitempty"`
+	Host              string            `json:"host"`
+	SigninURL         string            `json:"signinUrl"`
+	Method            string            `json:"method"`
+	ResponseHeaders   []string          `json:"responseHeaders,omitempty"`
+	RequestRedirect   string            `json:"requestRedirect"`
+	AuthSnippet       string            `json:"authSnippet"`
+	AuthCacheKey      string            `json:"authCacheKey"`
+	AuthCacheDuration []string          `json:"authCacheDuration"`
+	ProxySetHeaders   map[string]string `json:"proxySetHeaders,omitempty"`
 }
 
 // DefaultCacheDuration is the fallback value if no cache duration is provided
@@ -67,9 +66,6 @@ func (e1 *Config) Equal(e2 *Config) bool {
 	if e1.SigninURL != e2.SigninURL {
 		return false
 	}
-	if e1.SigninURLRedirectParam != e2.SigninURLRedirectParam {
-		return false
-	}
 	if e1.Method != e2.Method {
 		return false
 	}
@@ -178,11 +174,6 @@ func (a authReq) Parse(ing *networking.Ingress) (interface{}, error) {
 		klog.V(3).InfoS("auth-signin annotation is undefined and will not be set")
 	}
 
-	signInRedirectParam, err := parser.GetStringAnnotation("auth-signin-redirect-param", ing)
-	if err != nil {
-		klog.V(3).Infof("auth-signin-redirect-param annotation is undefined and will not be set")
-	}
-
 	authSnippet, err := parser.GetStringAnnotation("auth-snippet", ing)
 	if err != nil {
 		klog.V(3).InfoS("auth-snippet annotation is undefined and will not be set")
@@ -239,17 +230,16 @@ func (a authReq) Parse(ing *networking.Ingress) (interface{}, error) {
 	requestRedirect, _ := parser.GetStringAnnotation("auth-request-redirect", ing)
 
 	return &Config{
-		URL:                    urlString,
-		Host:                   authURL.Hostname(),
-		SigninURL:              signIn,
-		SigninURLRedirectParam: signInRedirectParam,
-		Method:                 authMethod,
-		ResponseHeaders:        responseHeaders,
-		RequestRedirect:        requestRedirect,
-		AuthSnippet:            authSnippet,
-		AuthCacheKey:           authCacheKey,
-		AuthCacheDuration:      authCacheDuration,
-		ProxySetHeaders:        proxySetHeaders,
+		URL:               urlString,
+		Host:              authURL.Hostname(),
+		SigninURL:         signIn,
+		Method:            authMethod,
+		ResponseHeaders:   responseHeaders,
+		RequestRedirect:   requestRedirect,
+		AuthSnippet:       authSnippet,
+		AuthCacheKey:      authCacheKey,
+		AuthCacheDuration: authCacheDuration,
+		ProxySetHeaders:   proxySetHeaders,
 	}, nil
 }
 
diff --git a/internal/ingress/controller/config/config.go b/internal/ingress/controller/config/config.go
index b8c51bdb7..a62ae2b8c 100644
--- a/internal/ingress/controller/config/config.go
+++ b/internal/ingress/controller/config/config.go
@@ -469,21 +469,6 @@ type Configuration struct {
 	// http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_timeout
 	ProxyStreamTimeout string `json:"proxy-stream-timeout,omitempty"`
 
-	// When a connection to the proxied server cannot be established, determines whether
-	// a client connection will be passed to the next server.
-	// http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_next_upstream
-	ProxyStreamNextUpstream bool `json:"proxy-stream-next-upstream,omitempty"`
-
-	// Limits the time allowed to pass a connection to the next server.
-	// The 0 value turns off this limitation.
-	// http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_next_upstream_timeout
-	ProxyStreamNextUpstreamTimeout string `json:"proxy-stream-next-upstream-timeout,omitempty"`
-
-	// Limits the number of possible tries a request should be passed to the next server.
-	// The 0 value turns off this limitation.
-	// http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_next_upstream_tries
-	ProxyStreamNextUpstreamTries int `json:"proxy-stream-next-upstream-tries,omitempty"`
-
 	// Sets the number of datagrams expected from the proxied server in response
 	// to the client request if the UDP protocol is used.
 	// http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_responses
@@ -723,7 +708,7 @@ func NewDefault() Configuration {
 	defNginxStatusIpv4Whitelist = append(defNginxStatusIpv4Whitelist, "127.0.0.1")
 	defNginxStatusIpv6Whitelist = append(defNginxStatusIpv6Whitelist, "::1")
 	defProxyDeadlineDuration := time.Duration(5) * time.Second
-	defGlobalExternalAuth := GlobalExternalAuth{"", "", "", "", "", append(defResponseHeaders, ""), "", "", "", []string{}, map[string]string{}}
+	defGlobalExternalAuth := GlobalExternalAuth{"", "", "", "", append(defResponseHeaders, ""), "", "", "", []string{}, map[string]string{}}
 
 	cfg := Configuration{
 		AllowBackendServerHeader:         false,
@@ -801,9 +786,6 @@ func NewDefault() Configuration {
 		VariablesHashMaxSize:             2048,
 		UseHTTP2:                         true,
 		ProxyStreamTimeout:               "600s",
-		ProxyStreamNextUpstream:          true,
-		ProxyStreamNextUpstreamTimeout:   "600s",
-		ProxyStreamNextUpstreamTries:     3,
 		Backend: defaults.Backend{
 			ProxyBodySize:            bodySize,
 			ProxyConnectTimeout:      5,
@@ -911,14 +893,13 @@ type ListenPorts struct {
 type GlobalExternalAuth struct {
 	URL string `json:"url"`
 	// Host contains the hostname defined in the URL
-	Host                   string            `json:"host"`
-	SigninURL              string            `json:"signinUrl"`
-	SigninURLRedirectParam string            `json:"signinUrlRedirectParam"`
-	Method                 string            `json:"method"`
-	ResponseHeaders        []string          `json:"responseHeaders,omitempty"`
-	RequestRedirect        string            `json:"requestRedirect"`
-	AuthSnippet            string            `json:"authSnippet"`
-	AuthCacheKey           string            `json:"authCacheKey"`
-	AuthCacheDuration      []string          `json:"authCacheDuration"`
-	ProxySetHeaders        map[string]string `json:"proxySetHeaders,omitempty"`
+	Host              string            `json:"host"`
+	SigninURL         string            `json:"signinUrl"`
+	Method            string            `json:"method"`
+	ResponseHeaders   []string          `json:"responseHeaders,omitempty"`
+	RequestRedirect   string            `json:"requestRedirect"`
+	AuthSnippet       string            `json:"authSnippet"`
+	AuthCacheKey      string            `json:"authCacheKey"`
+	AuthCacheDuration []string          `json:"authCacheDuration"`
+	ProxySetHeaders   map[string]string `json:"proxySetHeaders,omitempty"`
 }
diff --git a/internal/ingress/controller/controller.go b/internal/ingress/controller/controller.go
index 71dc0df52..03ff9d04a 100644
--- a/internal/ingress/controller/controller.go
+++ b/internal/ingress/controller/controller.go
@@ -154,7 +154,7 @@ func (n *NGINXController) syncIngress(interface{}) error {
 			n.metricCollector.IncReloadErrorCount()
 			n.metricCollector.ConfigSuccess(hash, false)
 			klog.Errorf("Unexpected failure reloading the backend:\n%v", err)
-			n.recorder.Eventf(k8s.IngressPodDetails, apiv1.EventTypeWarning, "RELOAD", fmt.Sprintf("Error reloading NGINX: %v", err))
+			n.recorder.Eventf(k8s.IngressNGINXPod, apiv1.EventTypeWarning, "RELOAD", fmt.Sprintf("Error reloading NGINX: %v", err))
 			return err
 		}
 
@@ -162,7 +162,7 @@ func (n *NGINXController) syncIngress(interface{}) error {
 		n.metricCollector.ConfigSuccess(hash, true)
 		n.metricCollector.IncReloadCount()
 
-		n.recorder.Eventf(k8s.IngressPodDetails, apiv1.EventTypeNormal, "RELOAD", "NGINX reload triggered due to a change in configuration")
+		n.recorder.Eventf(k8s.IngressNGINXPod, apiv1.EventTypeNormal, "RELOAD", "NGINX reload triggered due to a change in configuration")
 	}
 
 	isFirstSync := n.runningConfig.Equal(&ingress.Configuration{})
diff --git a/internal/ingress/controller/status.go b/internal/ingress/controller/status.go
index 7b90594a9..cd22af6ee 100644
--- a/internal/ingress/controller/status.go
+++ b/internal/ingress/controller/status.go
@@ -93,18 +93,23 @@ func setupLeaderElection(config *leaderElectionConfig) {
 		Host:      hostname,
 	})
 
+	ingressPod, err := k8s.GetPodDetails()
+	if err != nil {
+		klog.Fatalf("unexpected error starting leader election: %v", err)
+	}
+
 	lock := resourcelock.ConfigMapLock{
-		ConfigMapMeta: metav1.ObjectMeta{Namespace: k8s.IngressPodDetails.Namespace, Name: config.ElectionID},
+		ConfigMapMeta: metav1.ObjectMeta{Namespace: ingressPod.Namespace, Name: config.ElectionID},
 		Client:        config.Client.CoreV1(),
 		LockConfig: resourcelock.ResourceLockConfig{
-			Identity:      k8s.IngressPodDetails.Name,
+			Identity:      ingressPod.Name,
 			EventRecorder: recorder,
 		},
 	}
 
 	ttl := 30 * time.Second
 
-	elector, err := leaderelection.NewLeaderElector(leaderelection.LeaderElectionConfig{
+	elector, err = leaderelection.NewLeaderElector(leaderelection.LeaderElectionConfig{
 		Lock:          &lock,
 		LeaseDuration: ttl,
 		RenewDeadline: ttl / 2,
diff --git a/internal/ingress/controller/template/configmap.go b/internal/ingress/controller/template/configmap.go
index a6a6712aa..ab659fa4f 100644
--- a/internal/ingress/controller/template/configmap.go
+++ b/internal/ingress/controller/template/configmap.go
@@ -37,32 +37,31 @@ import (
 )
 
 const (
-	customHTTPErrors              = "custom-http-errors"
-	skipAccessLogUrls             = "skip-access-log-urls"
-	whitelistSourceRange          = "whitelist-source-range"
-	proxyRealIPCIDR               = "proxy-real-ip-cidr"
-	bindAddress                   = "bind-address"
-	httpRedirectCode              = "http-redirect-code"
-	blockCIDRs                    = "block-cidrs"
-	blockUserAgents               = "block-user-agents"
-	blockReferers                 = "block-referers"
-	proxyStreamResponses          = "proxy-stream-responses"
-	hideHeaders                   = "hide-headers"
-	nginxStatusIpv4Whitelist      = "nginx-status-ipv4-whitelist"
-	nginxStatusIpv6Whitelist      = "nginx-status-ipv6-whitelist"
-	proxyHeaderTimeout            = "proxy-protocol-header-timeout"
-	workerProcesses               = "worker-processes"
-	globalAuthURL                 = "global-auth-url"
-	globalAuthMethod              = "global-auth-method"
-	globalAuthSignin              = "global-auth-signin"
-	globalAuthSigninRedirectParam = "global-auth-signin-redirect-param"
-	globalAuthResponseHeaders     = "global-auth-response-headers"
-	globalAuthRequestRedirect     = "global-auth-request-redirect"
-	globalAuthSnippet             = "global-auth-snippet"
-	globalAuthCacheKey            = "global-auth-cache-key"
-	globalAuthCacheDuration       = "global-auth-cache-duration"
-	luaSharedDictsKey             = "lua-shared-dicts"
-	plugins                       = "plugins"
+	customHTTPErrors          = "custom-http-errors"
+	skipAccessLogUrls         = "skip-access-log-urls"
+	whitelistSourceRange      = "whitelist-source-range"
+	proxyRealIPCIDR           = "proxy-real-ip-cidr"
+	bindAddress               = "bind-address"
+	httpRedirectCode          = "http-redirect-code"
+	blockCIDRs                = "block-cidrs"
+	blockUserAgents           = "block-user-agents"
+	blockReferers             = "block-referers"
+	proxyStreamResponses      = "proxy-stream-responses"
+	hideHeaders               = "hide-headers"
+	nginxStatusIpv4Whitelist  = "nginx-status-ipv4-whitelist"
+	nginxStatusIpv6Whitelist  = "nginx-status-ipv6-whitelist"
+	proxyHeaderTimeout        = "proxy-protocol-header-timeout"
+	workerProcesses           = "worker-processes"
+	globalAuthURL             = "global-auth-url"
+	globalAuthMethod          = "global-auth-method"
+	globalAuthSignin          = "global-auth-signin"
+	globalAuthResponseHeaders = "global-auth-response-headers"
+	globalAuthRequestRedirect = "global-auth-request-redirect"
+	globalAuthSnippet         = "global-auth-snippet"
+	globalAuthCacheKey        = "global-auth-cache-key"
+	globalAuthCacheDuration   = "global-auth-cache-duration"
+	luaSharedDictsKey         = "lua-shared-dicts"
+	plugins                   = "plugins"
 )
 
 var (
@@ -76,7 +75,6 @@ var (
 		"certificate_servers":           5,
 		"ocsp_response_cache":           5, // keep this same as certificate_servers
 	}
-	defaultGlobalAuthRedirectParam = "rd"
 )
 
 const (
@@ -256,19 +254,6 @@ func ReadConfig(src map[string]string) config.Configuration {
 		}
 	}
 
-	// Verify that the configured global external authorization error page redirection URL parameter is set and valid. if not, set the default value
-	if val, ok := conf[globalAuthSigninRedirectParam]; ok {
-		delete(conf, globalAuthSigninRedirectParam)
-
-		redirectParam := strings.TrimSpace(val)
-		dummySigninURL, _ := parser.StringToURL(fmt.Sprintf("%s?%s=dummy", to.GlobalExternalAuth.SigninURL, redirectParam))
-		if dummySigninURL == nil {
-			klog.Warningf("Global auth redirect parameter denied - %v.", "global-auth-signin-redirect-param setting is invalid and will not be set")
-		} else {
-			to.GlobalExternalAuth.SigninURLRedirectParam = redirectParam
-		}
-	}
-
 	// Verify that the configured global external authorization response headers are valid. if not, set the default value
 	if val, ok := conf[globalAuthResponseHeaders]; ok {
 		delete(conf, globalAuthResponseHeaders)
diff --git a/internal/ingress/controller/template/template.go b/internal/ingress/controller/template/template.go
index 21744c0f9..639055363 100644
--- a/internal/ingress/controller/template/template.go
+++ b/internal/ingress/controller/template/template.go
@@ -50,10 +50,9 @@ import (
 )
 
 const (
-	slash                      = "/"
-	nonIdempotent              = "non_idempotent"
-	defBufferSize              = 65535
-	defAuthSigninRedirectParam = "rd"
+	slash         = "/"
+	nonIdempotent = "non_idempotent"
+	defBufferSize = 65535
 )
 
 // TemplateWriter is the interface to render a template
@@ -911,21 +910,18 @@ func buildForwardedFor(input interface{}) string {
 	return fmt.Sprintf("$http_%v", ffh)
 }
 
-func buildAuthSignURL(authSignURL, authRedirectParam string) string {
+func buildAuthSignURL(authSignURL string) string {
 	u, _ := url.Parse(authSignURL)
 	q := u.Query()
-	if authRedirectParam == "" {
-		authRedirectParam = defaultGlobalAuthRedirectParam
-	}
 	if len(q) == 0 {
-		return fmt.Sprintf("%v?%v=$pass_access_scheme://$http_host$escaped_request_uri", authSignURL, authRedirectParam)
+		return fmt.Sprintf("%v?rd=$pass_access_scheme://$http_host$escaped_request_uri", authSignURL)
 	}
 
-	if q.Get(authRedirectParam) != "" {
+	if q.Get("rd") != "" {
 		return authSignURL
 	}
 
-	return fmt.Sprintf("%v&%v=$pass_access_scheme://$http_host$escaped_request_uri", authSignURL, authRedirectParam)
+	return fmt.Sprintf("%v&rd=$pass_access_scheme://$http_host$escaped_request_uri", authSignURL)
 }
 
 func buildAuthSignURLLocation(location, authSignURL string) string {
diff --git a/internal/ingress/status/status.go b/internal/ingress/status/status.go
index 3a98c5627..32085f171 100644
--- a/internal/ingress/status/status.go
+++ b/internal/ingress/status/status.go
@@ -172,9 +172,14 @@ func (s *statusSync) runningAddresses() ([]string, error) {
 		return statusAddressFromService(s.PublishService, s.Client)
 	}
 
+	ingressPod, err := k8s.GetPodDetails()
+	if err != nil {
+		return []string{}, err
+	}
+
 	// get information about all the pods running the ingress controller
-	pods, err := s.Client.CoreV1().Pods(k8s.IngressPodDetails.Namespace).List(context.TODO(), metav1.ListOptions{
-		LabelSelector: labels.SelectorFromSet(k8s.IngressPodDetails.Labels).String(),
+	pods, err := s.Client.CoreV1().Pods(ingressPod.Namespace).List(context.TODO(), metav1.ListOptions{
+		LabelSelector: labels.SelectorFromSet(ingressPod.Labels).String(),
 	})
 	if err != nil {
 		return nil, err
@@ -211,8 +216,13 @@ func (s *statusSync) runningAddresses() ([]string, error) {
 }
 
 func (s *statusSync) isRunningMultiplePods() bool {
-	pods, err := s.Client.CoreV1().Pods(k8s.IngressPodDetails.Namespace).List(context.TODO(), metav1.ListOptions{
-		LabelSelector: labels.SelectorFromSet(k8s.IngressPodDetails.Labels).String(),
+	ingressPod, err := k8s.GetPodDetails()
+	if err != nil {
+		return false
+	}
+
+	pods, err := s.Client.CoreV1().Pods(ingressPod.Namespace).List(context.TODO(), metav1.ListOptions{
+		LabelSelector: labels.SelectorFromSet(ingressPod.Labels).String(),
 	})
 	if err != nil {
 		return false
diff --git a/internal/k8s/main.go b/internal/k8s/main.go
index 6012c39e8..c3b9cb350 100644
--- a/internal/k8s/main.go
+++ b/internal/k8s/main.go
@@ -75,22 +75,16 @@ func GetNodeIPOrName(kubeClient clientset.Interface, name string, useInternalIP
 	return defaultOrInternalIP
 }
 
-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",
-	}
-)
+// IngressNGINXPod hold information about the ingress-nginx pod
+var IngressNGINXPod *apiv1.Pod
 
 // PodInfo contains runtime information about the pod running the Ingres controller
-// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 type PodInfo struct {
-	metav1.TypeMeta
-	metav1.ObjectMeta
+	Name      string
+	Namespace string
+	// Labels selectors of the running pod
+	// This is used to search for other Ingress controller pods
+	Labels map[string]string
 }
 
 // GetIngressPod load the ingress-nginx pod
@@ -102,29 +96,26 @@ func GetIngressPod(kubeClient clientset.Interface) error {
 		return fmt.Errorf("unable to get POD information (missing POD_NAME or POD_NAMESPACE environment variable")
 	}
 
-	pod, err := kubeClient.CoreV1().Pods(podNs).Get(context.TODO(), podName, metav1.GetOptions{})
-	if err != nil {
-		return fmt.Errorf("unable to get POD information: %v", err)
+	IngressNGINXPod, _ = kubeClient.CoreV1().Pods(podNs).Get(context.TODO(), podName, metav1.GetOptions{})
+	if IngressNGINXPod == nil {
+		return fmt.Errorf("unable to get POD information")
 	}
 
-	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
-	}
+	return nil
+}
 
-	IngressPodDetails = &PodInfo{
-		TypeMeta: metav1.TypeMeta{APIVersion: "v1", Kind: "Pod"},
+// GetPodDetails returns runtime information about the pod:
+// name, namespace and IP of the node where it is running
+func GetPodDetails() (*PodInfo, error) {
+	if IngressNGINXPod == nil {
+		return nil, fmt.Errorf("no ingress-nginx pod details available")
 	}
 
-	pod.ObjectMeta.DeepCopyInto(&IngressPodDetails.ObjectMeta)
-	IngressPodDetails.SetLabels(labels)
-
-	return nil
+	return &PodInfo{
+		Name:      IngressNGINXPod.Name,
+		Namespace: IngressNGINXPod.Namespace,
+		Labels:    IngressNGINXPod.GetLabels(),
+	}, nil
 }
 
 // MetaNamespaceKey knows how to make keys for API objects which implement meta.Interface.
diff --git a/internal/k8s/zz_generated.deepcopy.go b/internal/k8s/zz_generated.deepcopy.go
deleted file mode 100644
index 0261457fe..000000000
--- a/internal/k8s/zz_generated.deepcopy.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// +build !ignore_autogenerated
-
-/*
-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.
-*/
-
-// Code generated by deepcopy-gen. DO NOT EDIT.
-
-package k8s
-
-import "k8s.io/apimachinery/pkg/runtime"
-
-func (in *PodInfo) DeepCopyInto(out *PodInfo) {
-	out.TypeMeta = in.TypeMeta
-	out.ObjectMeta = in.ObjectMeta
-}
-
-// DeepCopyObject returns a generically typed copy of an object
-func (in *PodInfo) DeepCopyObject() runtime.Object {
-	out := PodInfo{}
-	in.DeepCopyInto(&out)
-
-	return &out
-}
diff --git a/rootfs/etc/nginx/lua/plugins/README.md b/rootfs/etc/nginx/lua/plugins/README.md
index 5960faf37..4fb53cb7a 100644
--- a/rootfs/etc/nginx/lua/plugins/README.md
+++ b/rootfs/etc/nginx/lua/plugins/README.md
@@ -15,7 +15,7 @@ By defining functions with the following names, you can run your custom Lua code
  - `init_worker`: useful for initializing some data per Nginx worker process
  - `rewrite`: useful for modifying request, changing headers, redirection, dropping request, doing authentication etc
  - `header_filter`: this is called when backend response header is received, it is useful for modifying response headers
- - `log`: this is called when request processing is commpleted and response is delivered to the client
+ - `log`: this is called when request processing is completed and a response is delivered to the client
 
 Check this [`hello_world`](https://github.com/kubernetes/ingress-nginx/tree/master/rootfs/etc/nginx/lua/plugins/hello_world) plugin as a simple example or refer to [OpenID Connect integration](https://github.com/ElvinEfendi/ingress-nginx-openidc/tree/master/rootfs/etc/nginx/lua/plugins/openidc) for more advanced usage.
 
diff --git a/rootfs/etc/nginx/template/nginx.tmpl b/rootfs/etc/nginx/template/nginx.tmpl
index c283ef4a4..4c30f5a52 100755
--- a/rootfs/etc/nginx/template/nginx.tmpl
+++ b/rootfs/etc/nginx/template/nginx.tmpl
@@ -717,7 +717,7 @@ stream {
     access_log {{ or $cfg.StreamAccessLogPath $cfg.AccessLogPath }} log_stream {{ $cfg.AccessLogParams }};
     {{ end }}
 
-    error_log  {{ $cfg.ErrorLogPath }} {{ $cfg.ErrorLogLevel }};
+    error_log  {{ $cfg.ErrorLogPath }};
 
     {{ if $cfg.EnableRealIp }}
     {{ range $trusted_ip := $cfg.ProxyRealIPCIDR }}
@@ -763,10 +763,6 @@ stream {
         {{ end }}
         {{ end }}
         proxy_timeout           {{ $cfg.ProxyStreamTimeout }};
-        proxy_next_upstream     {{ if $cfg.ProxyStreamNextUpstream }}on{{ else }}off{{ end }};
-        proxy_next_upstream_timeout {{ $cfg.ProxyStreamNextUpstreamTimeout }};
-        proxy_next_upstream_tries   {{ $cfg.ProxyStreamNextUpstreamTries }};
-
         proxy_pass              upstream_balancer;
         {{ if $tcpServer.Backend.ProxyProtocol.Encode }}
         proxy_protocol          on;
@@ -795,9 +791,6 @@ stream {
         {{ end }}
         proxy_responses         {{ $cfg.ProxyStreamResponses }};
         proxy_timeout           {{ $cfg.ProxyStreamTimeout }};
-        proxy_next_upstream     {{ if $cfg.ProxyStreamNextUpstream }}on{{ else }}off{{ end }};
-        proxy_next_upstream_timeout {{ $cfg.ProxyStreamNextUpstreamTimeout }};
-        proxy_next_upstream_tries   {{ $cfg.ProxyStreamNextUpstreamTries }};
         proxy_pass              upstream_balancer;
     }
     {{ end }}
@@ -953,7 +946,7 @@ stream {
         location = {{ $authPath }} {
             internal;
 
-            {{ if (or $all.Cfg.EnableOpentracing $location.Opentracing.Enabled) }}
+            {{ if $all.Cfg.EnableOpentracing }}
             opentracing on;
             opentracing_propagate_context;
             {{ end }}
@@ -1057,7 +1050,7 @@ stream {
 
             add_header Set-Cookie $auth_cookie;
 
-            return 302 {{ buildAuthSignURL $externalAuth.SigninURL $externalAuth.SigninURLRedirectParam }};
+            return 302 {{ buildAuthSignURL $externalAuth.SigninURL }};
         }
         {{ end }}
         {{ end }}


Test patch:
diff --git a/cmd/nginx/main_test.go b/cmd/nginx/main_test.go
index e6d24b301..6652c3f06 100644
--- a/cmd/nginx/main_test.go
+++ b/cmd/nginx/main_test.go
@@ -26,6 +26,7 @@ import (
 	"time"
 
 	corev1 "k8s.io/api/core/v1"
+	v1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/client-go/kubernetes"
 	"k8s.io/client-go/kubernetes/fake"
@@ -57,7 +58,7 @@ func TestHandleSigterm(t *testing.T) {
 		namespace = "test"
 	)
 
-	k8s.IngressPodDetails = &k8s.PodInfo{
+	k8s.IngressNGINXPod = &v1.Pod{
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      podName,
 			Namespace: namespace,
diff --git a/internal/ingress/annotations/authreq/main_test.go b/internal/ingress/annotations/authreq/main_test.go
index 276779c1c..914b6882a 100644
--- a/internal/ingress/annotations/authreq/main_test.go
+++ b/internal/ingress/annotations/authreq/main_test.go
@@ -72,33 +72,30 @@ func TestAnnotations(t *testing.T) {
 	ing.SetAnnotations(data)
 
 	tests := []struct {
-		title                  string
-		url                    string
-		signinURL              string
-		signinURLRedirectParam string
-		method                 string
-		requestRedirect        string
-		authSnippet            string
-		authCacheKey           string
-		expErr                 bool
+		title           string
+		url             string
+		signinURL       string
+		method          string
+		requestRedirect string
+		authSnippet     string
+		authCacheKey    string
+		expErr          bool
 	}{
-		{"empty", "", "", "", "", "", "", "", true},
-		{"no scheme", "bar", "bar", "", "", "", "", "", true},
-		{"invalid host", "http://", "http://", "", "", "", "", "", true},
-		{"invalid host (multiple dots)", "http://foo..bar.com", "http://foo..bar.com", "", "", "", "", "", true},
-		{"valid URL", "http://bar.foo.com/external-auth", "http://bar.foo.com/external-auth", "", "", "", "", "", false},
-		{"valid URL - send body", "http://foo.com/external-auth", "http://foo.com/external-auth", "", "POST", "", "", "", false},
-		{"valid URL - send body", "http://foo.com/external-auth", "http://foo.com/external-auth", "", "GET", "", "", "", false},
-		{"valid URL - request redirect", "http://foo.com/external-auth", "http://foo.com/external-auth", "", "GET", "http://foo.com/redirect-me", "", "", false},
-		{"auth snippet", "http://foo.com/external-auth", "http://foo.com/external-auth", "", "", "", "proxy_set_header My-Custom-Header 42;", "", false},
-		{"auth cache ", "http://foo.com/external-auth", "http://foo.com/external-auth", "", "", "", "", "$foo$bar", false},
-		{"redirect param", "http://bar.foo.com/external-auth", "http://bar.foo.com/external-auth", "origUrl", "", "", "", "", false},
+		{"empty", "", "", "", "", "", "", true},
+		{"no scheme", "bar", "bar", "", "", "", "", true},
+		{"invalid host", "http://", "http://", "", "", "", "", true},
+		{"invalid host (multiple dots)", "http://foo..bar.com", "http://foo..bar.com", "", "", "", "", true},
+		{"valid URL", "http://bar.foo.com/external-auth", "http://bar.foo.com/external-auth", "", "", "", "", false},
+		{"valid URL - send body", "http://foo.com/external-auth", "http://foo.com/external-auth", "POST", "", "", "", false},
+		{"valid URL - send body", "http://foo.com/external-auth", "http://foo.com/external-auth", "GET", "", "", "", false},
+		{"valid URL - request redirect", "http://foo.com/external-auth", "http://foo.com/external-auth", "GET", "http://foo.com/redirect-me", "", "", false},
+		{"auth snippet", "http://foo.com/external-auth", "http://foo.com/external-auth", "", "", "proxy_set_header My-Custom-Header 42;", "", false},
+		{"auth cache ", "http://foo.com/external-auth", "http://foo.com/external-auth", "", "", "", "$foo$bar", false},
 	}
 
 	for _, test := range tests {
 		data[parser.GetAnnotationWithPrefix("auth-url")] = test.url
 		data[parser.GetAnnotationWithPrefix("auth-signin")] = test.signinURL
-		data[parser.GetAnnotationWithPrefix("auth-signin-redirect-param")] = test.signinURLRedirectParam
 		data[parser.GetAnnotationWithPrefix("auth-method")] = fmt.Sprintf("%v", test.method)
 		data[parser.GetAnnotationWithPrefix("auth-request-redirect")] = test.requestRedirect
 		data[parser.GetAnnotationWithPrefix("auth-snippet")] = test.authSnippet
@@ -125,9 +122,6 @@ func TestAnnotations(t *testing.T) {
 		if u.SigninURL != test.signinURL {
 			t.Errorf("%v: expected \"%v\" but \"%v\" was returned", test.title, test.signinURL, u.SigninURL)
 		}
-		if u.SigninURLRedirectParam != test.signinURLRedirectParam {
-			t.Errorf("%v: expected \"%v\" but \"%v\" was returned", test.title, test.signinURLRedirectParam, u.SigninURLRedirectParam)
-		}
 		if u.Method != test.method {
 			t.Errorf("%v: expected \"%v\" but \"%v\" was returned", test.title, test.method, u.Method)
 		}
diff --git a/internal/ingress/controller/controller_test.go b/internal/ingress/controller/controller_test.go
index 2a30f2a69..d1f600345 100644
--- a/internal/ingress/controller/controller_test.go
+++ b/internal/ingress/controller/controller_test.go
@@ -1671,7 +1671,7 @@ func newNGINXController(t *testing.T) *NGINXController {
 		t.Fatalf("error creating the configuration map: %v", err)
 	}
 
-	k8s.IngressPodDetails = &k8s.PodInfo{
+	k8s.IngressNGINXPod = &v1.Pod{
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      "testpod",
 			Namespace: ns,
@@ -1729,7 +1729,7 @@ func newDynamicNginxController(t *testing.T, setConfigMap func(string) *v1.Confi
 		t.Fatalf("error creating the configuration map: %v", err)
 	}
 
-	k8s.IngressPodDetails = &k8s.PodInfo{
+	k8s.IngressNGINXPod = &v1.Pod{
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      "testpod",
 			Namespace: ns,
diff --git a/internal/ingress/controller/template/configmap_test.go b/internal/ingress/controller/template/configmap_test.go
index 65bb485ea..4c2adb739 100644
--- a/internal/ingress/controller/template/configmap_test.go
+++ b/internal/ingress/controller/template/configmap_test.go
@@ -229,28 +229,6 @@ func TestGlobalExternalAuthSigninParsing(t *testing.T) {
 	}
 }
 
-func TestGlobalExternalAuthSigninRedirectParamParsing(t *testing.T) {
-	testCases := map[string]struct {
-		param  string
-		signin string
-		expect string
-	}{
-		"no param":      {"", "http://bar.foo.com/auth-error-page", ""},
-		"valid param":   {"orig", "http://bar.foo.com/auth-error-page", "orig"},
-		"no signin url": {"orig", "", ""},
-	}
-
-	for n, tc := range testCases {
-		cfg := ReadConfig(map[string]string{
-			"global-auth-signin":                tc.signin,
-			"global-auth-signin-redirect-param": tc.param,
-		})
-		if cfg.GlobalExternalAuth.SigninURLRedirectParam != tc.expect {
-			t.Errorf("Testing %v. Expected \"%v\" but \"%v\" was returned", n, tc.expect, cfg.GlobalExternalAuth.SigninURLRedirectParam)
-		}
-	}
-}
-
 func TestGlobalExternalAuthResponseHeadersParsing(t *testing.T) {
 	testCases := map[string]struct {
 		headers string
diff --git a/internal/ingress/controller/template/template_test.go b/internal/ingress/controller/template/template_test.go
index a37f6cc87..86c691b7c 100644
--- a/internal/ingress/controller/template/template_test.go
+++ b/internal/ingress/controller/template/template_test.go
@@ -766,19 +766,16 @@ func TestFilterRateLimits(t *testing.T) {
 
 func TestBuildAuthSignURL(t *testing.T) {
 	cases := map[string]struct {
-		Input, RedirectParam, Output string
+		Input, Output string
 	}{
-		"default url and redirect":              {"http://google.com", "rd", "http://google.com?rd=$pass_access_scheme://$http_host$escaped_request_uri"},
-		"default url and custom redirect":       {"http://google.com", "orig", "http://google.com?orig=$pass_access_scheme://$http_host$escaped_request_uri"},
-		"with random field":                     {"http://google.com?cat=0", "rd", "http://google.com?cat=0&rd=$pass_access_scheme://$http_host$escaped_request_uri"},
-		"with random field and custom redirect": {"http://google.com?cat=0", "orig", "http://google.com?cat=0&orig=$pass_access_scheme://$http_host$escaped_request_uri"},
-		"with rd field":                         {"http://google.com?cat&rd=$request", "rd", "http://google.com?cat&rd=$request"},
-		"with orig field":                       {"http://google.com?cat&orig=$request", "orig", "http://google.com?cat&orig=$request"},
+		"default url":       {"http://google.com", "http://google.com?rd=$pass_access_scheme://$http_host$escaped_request_uri"},
+		"with random field": {"http://google.com?cat=0", "http://google.com?cat=0&rd=$pass_access_scheme://$http_host$escaped_request_uri"},
+		"with rd field":     {"http://google.com?cat&rd=$request", "http://google.com?cat&rd=$request"},
 	}
 	for k, tc := range cases {
-		res := buildAuthSignURL(tc.Input, tc.RedirectParam)
+		res := buildAuthSignURL(tc.Input)
 		if res != tc.Output {
-			t.Errorf("%s: called buildAuthSignURL('%s','%s'); expected '%v' but returned '%v'", k, tc.Input, tc.RedirectParam, tc.Output, res)
+			t.Errorf("%s: called buildAuthSignURL('%s'); expected '%v' but returned '%v'", k, tc.Input, tc.Output, res)
 		}
 	}
 }
diff --git a/internal/ingress/status/status_test.go b/internal/ingress/status/status_test.go
index 5b9242dc4..ce6c1c9ff 100644
--- a/internal/ingress/status/status_test.go
+++ b/internal/ingress/status/status_test.go
@@ -24,6 +24,7 @@ import (
 	"time"
 
 	apiv1 "k8s.io/api/core/v1"
+	v1 "k8s.io/api/core/v1"
 	networking "k8s.io/api/networking/v1beta1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	testclient "k8s.io/client-go/kubernetes/fake"
@@ -296,7 +297,7 @@ func TestStatusActions(t *testing.T) {
 		UpdateStatusOnShutdown: true,
 	}
 
-	k8s.IngressPodDetails = &k8s.PodInfo{
+	k8s.IngressNGINXPod = &v1.Pod{
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      "foo_base_pod",
 			Namespace: apiv1.NamespaceDefault,
diff --git a/internal/k8s/main_test.go b/internal/k8s/main_test.go
index f3f8b652e..d06826164 100644
--- a/internal/k8s/main_test.go
+++ b/internal/k8s/main_test.go
@@ -214,36 +214,36 @@ func TestGetNodeIP(t *testing.T) {
 	}
 }
 
-func TestGetIngressPod(t *testing.T) {
+func TestGetPodDetails(t *testing.T) {
 	// POD_NAME & POD_NAMESPACE not exist
 	os.Setenv("POD_NAME", "")
 	os.Setenv("POD_NAMESPACE", "")
-	err := GetIngressPod(testclient.NewSimpleClientset())
-	if err == nil {
+	err1 := GetIngressPod(testclient.NewSimpleClientset())
+	if err1 == nil {
 		t.Errorf("expected an error but returned nil")
 	}
 
 	// POD_NAME not exist
 	os.Setenv("POD_NAME", "")
 	os.Setenv("POD_NAMESPACE", apiv1.NamespaceDefault)
-	err = GetIngressPod(testclient.NewSimpleClientset())
-	if err == nil {
+	err2 := GetIngressPod(testclient.NewSimpleClientset())
+	if err2 == nil {
 		t.Errorf("expected an error but returned nil")
 	}
 
 	// POD_NAMESPACE not exist
 	os.Setenv("POD_NAME", "testpod")
 	os.Setenv("POD_NAMESPACE", "")
-	err = GetIngressPod(testclient.NewSimpleClientset())
-	if err == nil {
+	err3 := GetIngressPod(testclient.NewSimpleClientset())
+	if err3 == nil {
 		t.Errorf("expected an error but returned nil")
 	}
 
 	// POD not exist
 	os.Setenv("POD_NAME", "testpod")
 	os.Setenv("POD_NAMESPACE", apiv1.NamespaceDefault)
-	err = GetIngressPod(testclient.NewSimpleClientset())
-	if err == nil {
+	err4 := GetIngressPod(testclient.NewSimpleClientset())
+	if err4 == nil {
 		t.Errorf("expected an error but returned nil")
 	}
 
@@ -254,11 +254,8 @@ func TestGetIngressPod(t *testing.T) {
 				Name:      "testpod",
 				Namespace: apiv1.NamespaceDefault,
 				Labels: map[string]string{
-					"first":                       "first_label",
-					"second":                      "second_label",
-					"app.kubernetes.io/component": "controller",
-					"app.kubernetes.io/instance":  "ingress-nginx",
-					"app.kubernetes.io/name":      "ingress-nginx",
+					"first":  "first_label",
+					"second": "second_label",
 				},
 			},
 		}}},
@@ -276,9 +273,9 @@ func TestGetIngressPod(t *testing.T) {
 			},
 		}}})
 
-	err = GetIngressPod(fkClient)
-	if err != nil {
-		t.Errorf("expected a PodInfo but returned error: %v", err)
+	err5 := GetIngressPod(fkClient)
+	if err5 != nil {
+		t.Errorf("expected a PodInfo but returned error")
 		return
 	}
 }
diff --git a/test/e2e/annotations/auth.go b/test/e2e/annotations/auth.go
index 781a32b1b..f68c7bc07 100644
--- a/test/e2e/annotations/auth.go
+++ b/test/e2e/annotations/auth.go
@@ -455,83 +455,6 @@ http {
 		})
 	})
 
-	ginkgo.Context("when external authentication is configured with a custom redirect param", func() {
-		host := "auth"
-		var annotations map[string]string
-		var ing *networking.Ingress
-
-		ginkgo.BeforeEach(func() {
-			f.NewHttpbinDeployment()
-
-			var httpbinIP string
-
-			err := framework.WaitForEndpoints(f.KubeClientSet, framework.DefaultTimeout, framework.HTTPBinService, f.Namespace, 1)
-			assert.Nil(ginkgo.GinkgoT(), err)
-
-			e, err := f.KubeClientSet.CoreV1().Endpoints(f.Namespace).Get(context.TODO(), framework.HTTPBinService, metav1.GetOptions{})
-			assert.Nil(ginkgo.GinkgoT(), err)
-
-			httpbinIP = e.Subsets[0].Addresses[0].IP
-
-			annotations = map[string]string{
-				"nginx.ingress.kubernetes.io/auth-url":                   fmt.Sprintf("http://%s/basic-auth/user/password", httpbinIP),
-				"nginx.ingress.kubernetes.io/auth-signin":                "http://$host/auth/start",
-				"nginx.ingress.kubernetes.io/auth-signin-redirect-param": "orig",
-			}
-
-			ing = framework.NewSingleIngress(host, "/", host, f.Namespace, framework.EchoService, 80, annotations)
-			f.EnsureIngress(ing)
-
-			f.WaitForNginxServer(host, func(server string) bool {
-				return strings.Contains(server, "server_name auth")
-			})
-		})
-
-		ginkgo.It("should return status code 200 when signed in", func() {
-			f.HTTPTestClient().
-				GET("/").
-				WithHeader("Host", host).
-				WithBasicAuth("user", "password").
-				Expect().
-				Status(http.StatusOK)
-		})
-
-		ginkgo.It("should redirect to signin url when not signed in", func() {
-			f.HTTPTestClient().
-				GET("/").
-				WithHeader("Host", host).
-				WithQuery("a", "b").
-				WithQuery("c", "d").
-				Expect().
-				Status(http.StatusFound).
-				Header("Location").Equal(fmt.Sprintf("http://%s/auth/start?orig=http://%s%s", host, host, url.QueryEscape("/?a=b&c=d")))
-		})
-
-		ginkgo.It("keeps processing new ingresses even if one of the existing ingresses is misconfigured", func() {
-			annotations["nginx.ingress.kubernetes.io/auth-type"] = "basic"
-			annotations["nginx.ingress.kubernetes.io/auth-secret"] = "something"
-			annotations["nginx.ingress.kubernetes.io/auth-realm"] = "test auth"
-			f.UpdateIngress(ing)
-
-			anotherHost := "different"
-			anotherAnnotations := map[string]string{}
-
-			anotherIng := framework.NewSingleIngress(anotherHost, "/", anotherHost, f.Namespace, framework.EchoService, 80, anotherAnnotations)
-			f.EnsureIngress(anotherIng)
-
-			f.WaitForNginxServer(anotherHost,
-				func(server string) bool {
-					return strings.Contains(server, "server_name "+anotherHost)
-				})
-
-			f.HTTPTestClient().
-				GET("/").
-				WithHeader("Host", anotherHost).
-				Expect().
-				Status(http.StatusOK)
-		})
-	})
-
 	ginkgo.Context("when external authentication with caching is configured", func() {
 		thisHost := "auth"
 		thatHost := "different"
diff --git a/test/e2e/run-chart-test.sh b/test/e2e/run-chart-test.sh
index 88ae163e8..267c2ac7b 100755
--- a/test/e2e/run-chart-test.sh
+++ b/test/e2e/run-chart-test.sh
@@ -56,7 +56,7 @@ fi
 if [ "${SKIP_CLUSTER_CREATION:-false}" = "false" ]; then
   echo "[dev-env] creating Kubernetes cluster with kind"
 
-  export K8S_VERSION=${K8S_VERSION:-v1.19.4@sha256:796d09e217d93bed01ecf8502633e48fd806fe42f9d02fdd468b81cd4e3bd40b}
+  export K8S_VERSION=${K8S_VERSION:-v1.19.1@sha256:98cf5288864662e37115e362b23e4369c8c4a408f99cbc06e58ac30ddc721600}
 
   kind create cluster \
     --verbosity=${KIND_LOG_LEVEL} \
diff --git a/test/e2e/run.sh b/test/e2e/run.sh
index 956df3f1a..dee4d28fc 100755
--- a/test/e2e/run.sh
+++ b/test/e2e/run.sh
@@ -64,7 +64,7 @@ export KUBECONFIG="${KUBECONFIG:-$HOME/.kube/kind-config-$KIND_CLUSTER_NAME}"
 if [ "${SKIP_CLUSTER_CREATION:-false}" = "false" ]; then
   echo "[dev-env] creating Kubernetes cluster with kind"
 
-  export K8S_VERSION=${K8S_VERSION:-v1.19.4@sha256:796d09e217d93bed01ecf8502633e48fd806fe42f9d02fdd468b81cd4e3bd40b}
+  export K8S_VERSION=${K8S_VERSION:-v1.19.1@sha256:98cf5288864662e37115e362b23e4369c8c4a408f99cbc06e58ac30ddc721600}
 
   kind create cluster \
     --verbosity=${KIND_LOG_LEVEL} \
@@ -87,6 +87,9 @@ if [ "${SKIP_IMAGE_CREATION:-false}" = "false" ]; then
   make -C ${DIR}/../e2e-image image
 fi
 
+#make -C ${DIR}/../../images/fastcgi-helloserver/ build image
+#make -C ${DIR}/../../images/echo/ image
+
 # Preload images used in e2e tests
 KIND_WORKERS=$(kind get nodes --name="${KIND_CLUSTER_NAME}" | grep worker | awk '{printf (NR>1?",":"") $1}')
 
@@ -94,6 +97,8 @@ echo "[dev-env] copying docker images to cluster..."
 
 kind load docker-image --name="${KIND_CLUSTER_NAME}" --nodes=${KIND_WORKERS} nginx-ingress-controller:e2e
 kind load docker-image --name="${KIND_CLUSTER_NAME}" --nodes=${KIND_WORKERS} ${REGISTRY}/controller:${TAG}
+#kind load docker-image --name="${KIND_CLUSTER_NAME}" --nodes=${KIND_WORKERS} ${REGISTRY}/fastcgi-helloserver:${TAG}
+#kind load docker-image --name="${KIND_CLUSTER_NAME}" --nodes=${KIND_WORKERS} ${REGISTRY}/echo:${TAG}
 
 echo "[dev-env] running e2e tests..."
 make -C ${DIR}/../../ e2e-test