# 2020 archive Type of document: Reference Product: NGINX Ingress Controller --- ## 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.