# 2020 archive




## 1.9.1

23 November 2020

### [icon: arrow-up] Dependencies

- Update the base ubi images to 8.3.

### [icon: rocket] Features

- Fix deployment of ingressclass resource via helm on some versions of Kubernetes.
- Renew CA cert for egress-mtls example.
- Add imagePullSecretName support to helm chart.

### [icon: download] Upgrade

- For NGINX, use the 1.9.1 image from our DockerHub: `nginx/nginx-ingress:1.9.1`, `nginx/nginx-ingress:1.9.1-alpine` or `nginx/nginx-ingress:1.9.1-ubi`
- For NGINX Plus, please build your own image using the 1.9.1 source code.
- For Helm, use version 0.7.1 of the chart.

## 1.9.0

20 October 2020

### [icon: search] Overview

Release 1.9.0 includes:

- Support for new Prometheus metrics and enhancements of the existing ones, including configuration reload reason, NGINX worker processes count, upstream latency, and more.
- Support for rate limiting, JWT authentication, ingress(client) and egress(upstream) mutual TLS via the Policy resource.
- Support for the latest Ingress resource features and the IngressClass resource.
- Support for NGINX Service Mesh.

You will find the complete changelog for release 1.9.0, including bug fixes, improvements, and changes below.

### [icon: rocket] Features

- [1180](https://github.com/nginx/kubernetes-ingress/pull/1180) Add support for EgressMTLS.
- [1166](https://github.com/nginx/kubernetes-ingress/pull/1166) Add IngressMTLS policy support.
- [1154](https://github.com/nginx/kubernetes-ingress/pull/1154) Add JWT policy support.
- [1120](https://github.com/nginx/kubernetes-ingress/pull/1120) Add RateLimit policy support.
- [1058](https://github.com/nginx/kubernetes-ingress/pull/1058) Support policies in VS routes and VSR subroutes.
- [1147](https://github.com/nginx/kubernetes-ingress/pull/1147) Add option to specify other log destinations in AppProtect.
- [1131](https://github.com/nginx/kubernetes-ingress/pull/1131) Update packages and CRDs to AppProtect 2.0. This update includes features such as [JSON Schema Validation](/waf/policies/xml-json-content.md) and [User-defined URLs and parameters](/waf/policies/user-urls-parameters.md). See the [release notes](/waf/changelog.md) for a complete feature list.
- [1100](https://github.com/nginx/kubernetes-ingress/pull/1100) Add external references to AppProtect.
- [1085](https://github.com/nginx/kubernetes-ingress/pull/1085) Add installation of threat campaigns package.
- [1133](https://github.com/nginx/kubernetes-ingress/pull/1133) Add support for IngressClass resources.
- [1130](https://github.com/nginx/kubernetes-ingress/pull/1130) Add prometheus latency collector.
- [1076](https://github.com/nginx/kubernetes-ingress/pull/1076) Add prometheus worker process metrics.
- [1075](https://github.com/nginx/kubernetes-ingress/pull/1075) Add support for NGINX Service Mesh internal routes.
- [1178](https://github.com/nginx/kubernetes-ingress/pull/1178) Resolve host collisions in VirtualServer and Ingresses.
- [1158](https://github.com/nginx/kubernetes-ingress/pull/1158) Support variables in action proxy headers.
- [1137](https://github.com/nginx/kubernetes-ingress/pull/1137) Add pod_owner label to metrics when -spire-agent-address is set.
- [1107](https://github.com/nginx/kubernetes-ingress/pull/1107) Extend Upstream Servers with pod_name label.
- [1099](https://github.com/nginx/kubernetes-ingress/pull/1099) Add reason label to total_reload metrics.
- [1088](https://github.com/nginx/kubernetes-ingress/pull/1088) Extend Upstream Servers and Server Zones metrics, thanks to [Raúl](https://github.com/Rulox).
- [1080](https://github.com/nginx/kubernetes-ingress/pull/1080) Support pathType field in the Ingress resource.
- [1078](https://github.com/nginx/kubernetes-ingress/pull/1078) Remove trailing blank lines in vs/vsr snippets.
- Documentation improvements: [1083](https://github.com/nginx/kubernetes-ingress/pull/1083), [1092](https://github.com/nginx/kubernetes-ingress/pull/1092), [1089](https://github.com/nginx/kubernetes-ingress/pull/1089), [1174](https://github.com/nginx/kubernetes-ingress/pull/1174), [1175](https://github.com/nginx/kubernetes-ingress/pull/1175), [1171](https://github.com/nginx/kubernetes-ingress/pull/1171).

### [icon: bug] Fixes

- [1179](https://github.com/nginx/kubernetes-ingress/pull/1179) Fix TransportServers in debian AppProtect image.
- [1129](https://github.com/nginx/kubernetes-ingress/pull/1129) Support real-ip in default server.
- [1110](https://github.com/nginx/kubernetes-ingress/pull/1110) Add missing threat campaigns key to AppProtect CRD.

### [icon: box] Helm Chart

- [1105](https://github.com/nginx/kubernetes-ingress/pull/1105) Fix GlobalConfiguration support in helm chart.
- Add new parameters to the Chart: `controller.setAsDefaultIngress`, `controller.enableLatencyMetrics`. Added in [1133](https://github.com/nginx/kubernetes-ingress/pull/1133) and [1148](https://github.com/nginx/kubernetes-ingress/pull/1148).

### [icon: arrow-up] Dependencies

- [1182](https://github.com/nginx/kubernetes-ingress/pull/1182) Update NGINX version to 1.19.3.

### [icon: download] Upgrade

- For NGINX, use the 1.9.0 image from our DockerHub: `nginx/nginx-ingress:1.9.0`, `nginx/nginx-ingress:1.9.0-alpine` or `nginx-ingress:1.9.0-ubi`
- For NGINX Plus, please build your own image using the 1.9.0 source code.
- For Helm, use version 0.7.0 of the chart.

For Kubernetes >= 1.18, when upgrading using [Manifests](/nic/install/manifests.md), make sure to update the [ClusterRole](https://github.com/nginx/kubernetes-ingress/blob/v1.9.0/deployments/rbac/rbac.yaml) and create the [IngressClass resource](https://github.com/nginx/kubernetes-ingress/blob/v1.9.0/deployments/common/ingress-class.yaml), which is required for Kubernetes >= 1.18. Otherwise, the Ingress Controller will fail to start. If you run multiple NGINX Ingress Controllers in the cluster, each Ingress Controller must have its own IngressClass resource. As the `-use-ingress-class-only` argument is now ignored (see NOTES), make sure your Ingress resources have the `ingressClassName` field or the `kubernetes.io/ingress.class` annotation set to the name of the IngressClass resource. Otherwise, the Ingress Controller will ignore them.

#### Helm Upgrade

- If you're using custom resources like VirtualServer and TransportServer (`controller.enableCustomResources` is set to `true`), after you run the `helm upgrade` command, the CRDs will not be upgraded. After running the `helm upgrade` command, run `kubectl apply -f deployments/helm-chart/crds` to upgrade the CRDs.
- For Kubernetes >= 1.18, a dedicated IngressClass resource, which is configured by `controller.ingressClass`, is required per helm release. Ensure `controller.ingressClass` is not set to the name of the IngressClass of other releases or Ingress Controllers. As the `controller.useIngressClassOnly` parameter is now ignored (see NOTES), make sure your Ingress resources have the `ingressClassName` field or the `kubernetes.io/ingress.class` annotation set to the value of `controller.ingressClass`. Otherwise, the Ingress Controller will ignore them.

### Notes

- When using Kubernetes >= 1.18, the `-use-ingress-class-only` command-line argument is now ignored, and the Ingress Controller will only process resources that belong to its class. See [IngressClass doc](/nic/install/multiple-controllers.md#ingress-class) for more details.
- For Kubernetes >= 1.18, a dedicated IngressClass resource, which is configured by `controller.ingressClass`, is required per helm release. When upgrading or installing releases, ensure `controller.ingressClass` is not set to the name of the IngressClass of other releases or Ingress Controllers.

## 1.8.1

14 August 2020

### [icon: arrow-up] Dependencies

- Update NGINX version to 1.19.2.

### [icon: download] Upgrade

- For NGINX, use the 1.8.1 image from our DockerHub: `nginx/nginx-ingress:1.8.1`, `nginx/nginx-ingress:1.8.1-alpine` or `nginx/nginx-ingress:1.8.1-ubi`
- For NGINX Plus, please build your own image using the 1.8.1 source code.
- For Helm, use version 0.6.1 of the chart.

## 1.8.0

22 July 2020

### [icon: search] Overview

Release 1.8.0 includes:

- Support for NGINX App Protect Web Application Firewall.
- Support for configuration snippets and custom template for VirtualServer and VirtualServerRoute resources.
- Support for request/response header manipulation and request URI rewriting for VirtualServer/VirtualServerRoute.
- Introducing a new configuration resource - Policy - with the first policy for IP-based access control.

You will find the complete changelog for release 1.8.0, including bug fixes, improvements, and changes below.

FEATURES FOR VIRTUALSERVER AND VIRTUALSERVERROUTE RESOURCES:

- [1036](https://github.com/nginx/kubernetes-ingress/pull/1036): Add VirtualServer custom template support.
- [1028](https://github.com/nginx/kubernetes-ingress/pull/1028): Add access control policy.
- [1019](https://github.com/nginx/kubernetes-ingress/pull/1019): Add VirtualServer/VirtualServerRoute snippets support.
- [1006](https://github.com/nginx/kubernetes-ingress/pull/1006): Add request/response modifiers to VS and VSR.
- [994](https://github.com/nginx/kubernetes-ingress/pull/994): Support Class Field in VS/VSR.
- [973](https://github.com/nginx/kubernetes-ingress/pull/973): Add status to VirtualServer and VirtualServerRoute.

### [icon: rocket] Features

- [1035](https://github.com/nginx/kubernetes-ingress/pull/1035): Support for App Protect module.
- [1029](https://github.com/nginx/kubernetes-ingress/pull/1029): Add readiness endpoint.
- [995](https://github.com/nginx/kubernetes-ingress/pull/995): Emit event for orphaned VirtualServerRoutes.
- [1029](https://github.com/nginx/kubernetes-ingress/pull/1029): Add readiness endpoint. The Ingress Controller now exposes a readiness endpoint on port `8081` and the path `/nginx-ready`. The endpoint returns a `200` response after the Ingress Controller finishes the initial configuration of NGINX at the start. The pod template was updated to use that endpoint in a readiness probe.
- [980](https://github.com/nginx/kubernetes-ingress/pull/980): Enable leader election by default.
- Documentation improvements: [946](https://github.com/nginx/kubernetes-ingress/pull/946) thanks to [谭九鼎](https://github.com/imba-tjd), [948](https://github.com/nginx/kubernetes-ingress/pull/948), [972](https://github.com/nginx/kubernetes-ingress/pull/972), [965](https://github.com/nginx/kubernetes-ingress/pull/965).

### [icon: bug] Fixes

- [1030](https://github.com/nginx/kubernetes-ingress/pull/1030): Fix port range validation in cli arguments.
- [953](https://github.com/nginx/kubernetes-ingress/pull/953): Fix error logging of master/minion ingresses.

### [icon: box] Helm Chart

- Add new parameters to the Chart: `controller.appprotect.enable`, `controller.globalConfiguration.create`, `controller.globalConfiguration.spec`, `controller.readyStatus.enable`, `controller.readyStatus.port`, `controller.config.annotations`, `controller.reportIngressStatus.annotations`. Added in  [1035](https://github.com/nginx/kubernetes-ingress/pull/1035), [1034](https://github.com/nginx/kubernetes-ingress/pull/1034), [1029](https://github.com/nginx/kubernetes-ingress/pull/1029), [1003](https://github.com/nginx/kubernetes-ingress/pull/1003) thanks to [RubyLangdon](https://github.com/RubyLangdon).
- [1047](https://github.com/nginx/kubernetes-ingress/pull/1047) and [1009](https://github.com/nginx/kubernetes-ingress/pull/1009): Change how Helm manages the custom resource definitions (CRDs) to support installing multiple Ingress Controller releases. **Note**: If you're using the custom resources (`controller.enableCustomResources` is set to `true`), this is a breaking change. See the HELM UPGRADE section below for the upgrade instructions.

### [icon: arrow-up] Dependencies

- Update NGINX version to 1.19.1.
- Update NGINX Plus to R22.

### [icon: download] Upgrade

- For NGINX, use the 1.8.0 image from our DockerHub: `nginx/nginx-ingress:1.8.0`, `nginx/nginx-ingress:1.8.0-alpine` or `nginx-ingress:1.8.0-ubi`
- For NGINX Plus, please build your own image using the 1.8.0 source code.
- For Helm, use version 0.6.0 of the chart.

#### Helm Upgrade

If you're using custom resources like VirtualServer and TransportServer (`controller.enableCustomResources` is set to `true`), after you run the `helm upgrade` command, the CRDs and the corresponding custom resources will be removed from the cluster. Before upgrading, make sure to back up the custom resources. After running the `helm upgrade` command, run `kubectl apply -f deployments/helm-chart/crds` to re-install the CRDs and then restore the custom resources.

### Notes

- As part of installing a release, Helm will install the CRDs unless that step is disabled (see the [corresponding doc](/nic/install/helm.md). The installed CRDs include the CRDs for all Ingress Controller features, including the ones disabled by default (like App Protect with `aplogconfs.appprotect.f5.com` and `appolicies.appprotect.f5.com` CRDs).

## 1.7.2

23 June 2020

### [icon: arrow-up] Dependencies

- Update NGINX Plus version to R22.

### [icon: download] Upgrade

- For NGINX, use the 1.7.2 image from our DockerHub: `nginx/nginx-ingress:1.7.2`, `nginx/nginx-ingress:1.7.2-alpine` or `nginx/nginx-ingress:1.7.2-ubi`
- For NGINX Plus, please build your own image using the 1.7.2 source code.
- For Helm, use version 0.5.2 of the chart.

## 1.7.1

4 June 2020

### [icon: arrow-up] Dependencies

- Update NGINX version to 1.19.0.

### [icon: download] Upgrade

- For NGINX, use the 1.7.1 image from our DockerHub: `nginx/nginx-ingress:1.7.1`, `nginx/nginx-ingress:1.7.1-alpine` or `nginx/nginx-ingress:1.7.1-ubi`
- For NGINX Plus, please build your own image using the 1.7.1 source code.
- For Helm, use version 0.5.1 of the chart.

## 1.7.0

30 April 2020

### [icon: search] Overview

Release 1.7.0 includes:

- Support for TCP, UDP, and TLS Passthrough load balancing with the new configuration resources: TransportServer and GlobalConfiguration. The resources allow users to deliver complex, non-HTTP-based applications from Kubernetes using NGINX Ingress Controller.
- Support for error pages in VirtualServer and VirtualServerRoute resources. A user can now specify custom error responses for errors returned by backend applications or generated by NGINX, such as a 502 response.
- Improved validation of VirtualServer and VirtualServerRoute resources. kubectl and the Kubernetes API server can now detect violations of the structure of VirtualServer/VirtualServerRoute resources and return an error.
- Support for an operator which manages the lifecycle of the Ingress Controller on Kubernetes or OpenShift. See the [NGINX Ingress Operator GitHub repo](https://github.com/nginxinc/nginx-ingress-operator).

See the [1.7.0 release announcement blog post](https://www.nginx.com/blog/announcing-nginx-ingress-controller-for-kubernetes-release-1-7-0/), which includes an overview of each feature.

You will find the complete changelog for release 1.7.0, including bug fixes, improvements, and changes below.

FEATURES FOR VIRTUALSERVER AND VIRTUALSERVERROUTE RESOURCES:

- [868](https://github.com/nginx/kubernetes-ingress/pull/868): Add OpenAPI CRD schema validation.
- [847](https://github.com/nginx/kubernetes-ingress/pull/847): Add support for error pages for VS/VSR.

### [icon: rocket] Features

- [902](https://github.com/nginx/kubernetes-ingress/pull/902): Add TransportServer and GlobalConfiguration Resources.
- [894](https://github.com/nginx/kubernetes-ingress/pull/894): Add Dockerfile for NGINX Open Source for Openshift.
- [857](https://github.com/nginx/kubernetes-ingress/pull/857): Add Openshift Dockerfile for NGINX Plus.
- [852](https://github.com/nginx/kubernetes-ingress/pull/852): Add default-server-access-log-off to configmap.
- [845](https://github.com/nginx/kubernetes-ingress/pull/845): Add log-format-escaping and stream-log-format-escaping configmap keys. Thanks to [Alexey Maslov](https://github.com/alxmsl).
- [827](https://github.com/nginx/kubernetes-ingress/pull/827): Add ingress class label to all Prometheus metrics.
- [850](https://github.com/nginx/kubernetes-ingress/pull/850): Extend redirect URI validation with protocol check in VS/VSR.
- [832](https://github.com/nginx/kubernetes-ingress/pull/832): Update the examples to run the `nginxdemos/nginx-hello:plain-text` image, that doesn't require root user.
- [825](https://github.com/nginx/kubernetes-ingress/pull/825): Add multi-stage docker builds.
- [852](https://github.com/nginx/kubernetes-ingress/pull/852): Add default-server-access-log-off to configmap. The access logs for the default server are now enabled by default.
- [847](https://github.com/nginx/kubernetes-ingress/pull/847): Add support for error pages for VS/VSR. The PR affects how the Ingress Controller generates configuration for VirtualServer and VirtualServerRoutes. See [this comment](https://github.com/nginx/kubernetes-ingress/pull/847) for more details.
- [827](https://github.com/nginx/kubernetes-ingress/pull/827): Add ingress class label to all Prometheus metrics. Every Prometheus metric exposed by the Ingress Controller now includes the label `class` with the value of the Ingress Controller class (by default `nginx`),
- [825](https://github.com/nginx/kubernetes-ingress/pull/825): Add multi-stage docker builds. When building the Ingress Controller image in Docker, we now use a multi-stage docker build.

### [icon: bug] Fixes

- [828](https://github.com/nginx/kubernetes-ingress/pull/828): Fix error messages for actions of the type return.

### [icon: box] Helm Chart

- Add new parameters to the Chart: `controller.enableTLSPassthrough`, `controller.volumes`, `controller.volumeMounts`, `controller.priorityClassName`. Added in [921](https://github.com/nginx/kubernetes-ingress/pull/921), [878](https://github.com/nginx/kubernetes-ingress/pull/878), [807](https://github.com/nginx/kubernetes-ingress/pull/807) thanks to [Greg Snow](https://github.com/gsnegovskiy).

### [icon: arrow-up] Dependencies

- Update NGINX version to 1.17.10.
- Update NGINX Plus to R21.
- [854](https://github.com/nginx/kubernetes-ingress/pull/854): Update the Debian base images for NGINX Plus to `debian:buster-slim`.

### [icon: download] Upgrade

- For NGINX, use the 1.7.0 image from our DockerHub: `nginx/nginx-ingress:1.7.0`, `nginx/nginx-ingress:1.7.0-alpine` or `nginx-ingress:1.7.0-ubi`
- For NGINX Plus, please build your own image using the 1.7.0 source code.
- For Helm, use version 0.5.0 of the chart.

When upgrading using the [manifests](/nic/install/manifests.md), make sure to deploy the new TransportServer CRD (`common/ts-definition.yaml`), as it is required by the Ingress Controller. Otherwise, you will get error messages in the Ingress Controller logs.

## 1.6.3

6 March 2020

### [icon: arrow-up] Dependencies

- Update NGINX version to 1.17.9.

### [icon: download] Upgrade

- For NGINX, use the 1.6.3 image from our DockerHub: `nginx/nginx-ingress:1.6.3` or `nginx/nginx-ingress:1.6.3-alpine`
- For NGINX Plus, please build your own image using the 1.6.3 source code.
- For Helm, use version 0.4.3 of the chart.

## 1.6.2

6 February 2020

### [icon: arrow-up] Dependencies

- Update NGINX version to 1.17.8.

### [icon: download] Upgrade

- For NGINX, use the 1.6.2 image from our DockerHub: `nginx/nginx-ingress:1.6.2` or `nginx/nginx-ingress:1.6.2-alpine`
- For NGINX Plus, please build your own image using the 1.6.2 source code.
- For Helm, use version 0.4.2 of the chart.

## 1.6.1

14 January 2020

### [icon: arrow-up] Dependencies

- Update NGINX version to 1.17.7.

### [icon: download] Upgrade

- For NGINX, use the 1.6.1 image from our DockerHub: `nginx/nginx-ingress:1.6.1` or `nginx/nginx-ingress:1.6.1-alpine`
- For NGINX Plus, please build your own image using the 1.6.1 source code.
- For Helm, use version 0.4.1 of the chart.

