diff --git a/config/manifests/bases/nginx-ingress-operator.clusterserviceversion.yaml b/config/manifests/bases/nginx-ingress-operator.clusterserviceversion.yaml index 383cc984..6047acca 100644 --- a/config/manifests/bases/nginx-ingress-operator.clusterserviceversion.yaml +++ b/config/manifests/bases/nginx-ingress-operator.clusterserviceversion.yaml @@ -36,6 +36,7 @@ metadata: "enableExternalDNS": false, "enableLatencyMetrics": false, "enableOIDC": false, + "includeYear": false, "enablePreviewPolicies": false, "enableSnippets": false, "enableTLSPassthrough": false, @@ -49,8 +50,10 @@ metadata: "image": { "pullPolicy": "IfNotPresent", "repository": "nginx/nginx-ingress", - "tag": "2.3.0-ubi" + "tag": "2.4.0-ubi" }, + "lifecycle": {}, + "customConfigMap": "", "ingressClass": "nginx", "initContainers": [], "kind": "deployment", @@ -123,6 +126,7 @@ metadata: "scheme": "http", "secret": "" }, + "disableIPV6": false, "rbac": { "create": true } @@ -302,7 +306,7 @@ spec: - --metrics-bind-address=127.0.0.1:8080 - --leader-elect - --leader-election-id=nginx-ingress-operator - image: nginx/nginx-ingress-operator:1.0.0 + image: nginx/nginx-ingress-operator:1.1.0 livenessProbe: httpGet: path: /healthz diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 271051bc..7a78fd12 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -168,6 +168,14 @@ rules: - watch - update - create +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch # Comment out this scc block before running the bundle command if running in a non-OpenShift environment - apiGroups: - security.openshift.io @@ -192,6 +200,16 @@ rules: - create - patch - list +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - update + - create - apiGroups: - networking.k8s.io resources: diff --git a/config/samples/charts_v1alpha1_nginxingress.yaml b/config/samples/charts_v1alpha1_nginxingress.yaml index 2961fcac..6b1ce7bc 100644 --- a/config/samples/charts_v1alpha1_nginxingress.yaml +++ b/config/samples/charts_v1alpha1_nginxingress.yaml @@ -24,6 +24,7 @@ spec: enableCustomResources: true enableLatencyMetrics: false enableOIDC: false + includeYear: false enablePreviewPolicies: false enableSnippets: false enableTLSPassthrough: false @@ -37,7 +38,9 @@ spec: image: pullPolicy: IfNotPresent repository: nginx/nginx-ingress - tag: 2.3.0-ubi + tag: 2.4.0-ubi + lifecycle: {} + customConfigMap: "" ingressClass: nginx initContainers: [] kind: deployment @@ -105,5 +108,6 @@ spec: port: 9113 scheme: http secret: "" + disableIPV6: false rbac: create: true diff --git a/helm-charts/nginx-ingress/Chart.yaml b/helm-charts/nginx-ingress/Chart.yaml index b6fd2502..d236cfae 100644 --- a/helm-charts/nginx-ingress/Chart.yaml +++ b/helm-charts/nginx-ingress/Chart.yaml @@ -1,16 +1,17 @@ -apiVersion: v1 -appVersion: 2.3.0 +apiVersion: v2 +name: nginx-ingress +version: 0.15.0 +appVersion: 2.4.0 +kubeVersion: ">= 1.19.0-0" +type: application description: NGINX Ingress Controller +icon: https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v2.4.0/deployments/helm-chart/chart-icon.png home: https://github.com/nginxinc/kubernetes-ingress -icon: https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/v2.2.0/deployments/helm-chart/chart-icon.png +sources: + - https://github.com/nginxinc/kubernetes-ingress/tree/v2.4.0/deployments/helm-chart keywords: -- ingress -- nginx -kubeVersion: '>= 1.19.0-0' + - ingress + - nginx maintainers: -- email: kubernetes@nginx.com - name: nginxinc -name: nginx-ingress -sources: -- https://github.com/nginxinc/kubernetes-ingress/tree/v2.2.0/deployments/helm-chart -version: 0.14.0 + - name: nginxinc + email: kubernetes@nginx.com diff --git a/helm-charts/nginx-ingress/README.md b/helm-charts/nginx-ingress/README.md index 38bb5f57..de4a0191 100644 --- a/helm-charts/nginx-ingress/README.md +++ b/helm-charts/nginx-ingress/README.md @@ -23,7 +23,7 @@ This step is required if you're installing the chart using its sources. Addition 1. Clone the Ingress Controller repo: ```console - $ git clone https://github.com/nginxinc/kubernetes-ingress --branch v2.3.0 + $ git clone https://github.com/nginxinc/kubernetes-ingress --branch v2.4.0 ``` **Note**: If you want to use the experimental repository (`edge`), remove the `--branch` flag and value. @@ -155,16 +155,19 @@ Parameter | Description | Default `controller.hostNetwork` | Enables the Ingress Controller pods to use the host's network namespace. | false `controller.nginxDebug` | Enables debugging for NGINX. Uses the `nginx-debug` binary. Requires `error-log-level: debug` in the ConfigMap via `controller.config.entries`. | false `controller.logLevel` | The log level of the Ingress Controller. | 1 +`controller.image.digest ` | The image digest of the Ingress Controller. | None `controller.image.repository` | The image repository of the Ingress Controller. | nginx/nginx-ingress -`controller.image.tag` | The tag of the Ingress Controller image. | 2.3.0 +`controller.image.tag` | The tag of the Ingress Controller image. | 2.4.0 `controller.image.pullPolicy` | The pull policy for the Ingress Controller image. | IfNotPresent +`controller.lifecycle` | The lifecycle of the Ingress Controller pods. | {} +`controller.customConfigMap` | The name of the custom ConfigMap used by the Ingress Controller. If set, then the default config is ignored. | "" `controller.config.name` | The name of the ConfigMap used by the Ingress Controller. | Autogenerated `controller.config.annotations` | The annotations of the Ingress Controller configmap. | {} `controller.config.entries` | The entries of the ConfigMap for customizing NGINX configuration. See [ConfigMap resource docs](https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/configmap-resource/) for the list of supported ConfigMap keys. | {} `controller.customPorts` | A list of custom ports to expose on the NGINX ingress controller pod. Follows the conventional Kubernetes yaml syntax for container ports. | [] -`controller.defaultTLS.cert` | The base64-encoded TLS certificate for the default HTTPS server. If not specified, a pre-generated self-signed certificate is used. **Note:** It is recommended that you specify your own certificate. | A pre-generated self-signed certificate. -`controller.defaultTLS.key` | The base64-encoded TLS key for the default HTTPS server. **Note:** If not specified, a pre-generated key is used. It is recommended that you specify your own key. | A pre-generated key. -`controller.defaultTLS.secret` | The secret with a TLS certificate and key for the default HTTPS server. The value must follow the following format: `/`. Used as an alternative to specifying a certificate and key using `controller.defaultTLS.cert` and `controller.defaultTLS.key` parameters. | None +`controller.defaultTLS.cert` | The base64-encoded TLS certificate for the default HTTPS server. **Note:** By default, a pre-generated self-signed certificate is used. It is recommended that you specify your own certificate. Alternatively, omitting the default server secret completely will configure NGINX to reject TLS connections to the default server. | A pre-generated self-signed certificate. +`controller.defaultTLS.key` | The base64-encoded TLS key for the default HTTPS server. **Note:** By default, a pre-generated key is used. It is recommended that you specify your own key. Alternatively, omitting the default server secret completely will configure NGINX to reject TLS connections to the default server. | A pre-generated key. +`controller.defaultTLS.secret` | The secret with a TLS certificate and key for the default HTTPS server. The value must follow the following format: `/`. Used as an alternative to specifying a certificate and key using `controller.defaultTLS.cert` and `controller.defaultTLS.key` parameters. **Note:** Alternatively, omitting the default server secret completely will configure NGINX to reject TLS connections to the default server. | None `controller.wildcardTLS.cert` | The base64-encoded TLS certificate for every Ingress/VirtualServer host that has TLS enabled but no secret specified. If the parameter is not set, for such Ingress/VirtualServer hosts NGINX will break any attempt to establish a TLS connection. | None `controller.wildcardTLS.key` | The base64-encoded TLS key for every Ingress/VirtualServer host that has TLS enabled but no secret specified. If the parameter is not set, for such Ingress/VirtualServer hosts NGINX will break any attempt to establish a TLS connection. | None `controller.wildcardTLS.secret` | The secret with a TLS certificate and key for every Ingress/VirtualServer host that has TLS enabled but no secret specified. The value must follow the following format: `/`. Used as an alternative to specifying a certificate and key using `controller.wildcardTLS.cert` and `controller.wildcardTLS.key` parameters. | None @@ -181,7 +184,7 @@ Parameter | Description | Default `controller.replicaCount` | The number of replicas of the Ingress Controller deployment. | 1 `controller.ingressClass` | A class of the Ingress Controller. An IngressClass resource with the name equal to the class must be deployed. Otherwise, the Ingress Controller will fail to start. The Ingress Controller only processes resources that belong to its class - i.e. have the "ingressClassName" field resource equal to the class. The Ingress Controller processes all the VirtualServer/VirtualServerRoute/TransportServer resources that do not have the "ingressClassName" field for all versions of kubernetes. | nginx `controller.setAsDefaultIngress` | New Ingresses without an `"ingressClassName"` field specified will be assigned the class specified in `controller.ingressClass`. | false -`controller.watchNamespace` | Namespace to watch for Ingress resources. By default the Ingress Controller watches all namespaces. | "" +`controller.watchNamespace` | Comma separated list of namespaces the Ingress Controller should watch for resources. By default the Ingress Controller watches all namespaces. | "" `controller.enableCustomResources` | Enable the custom resources. | true `controller.enablePreviewPolicies` | Enable preview policies. This parameter is deprecated. To enable OIDC Policies please use `controller.enableOIDC` instead. | false `controller.enableOIDC` | Enable OIDC policies. | false @@ -217,6 +220,11 @@ Parameter | Description | Default `controller.service.httpsPort.targetPort` | The target port of the HTTPS port of the Ingress Controller service. | 443 `controller.serviceAccount.name` | The name of the service account of the Ingress Controller pods. Used for RBAC. | Autogenerated `controller.serviceAccount.imagePullSecretName` | The name of the secret containing docker registry credentials. Secret must exist in the same namespace as the helm release. | "" +`controller.serviceMonitor.name` | The name of the serviceMonitor. | Autogenerated +`controller.serviceMonitor.create` | Create a ServiceMonitor custom resource. | false +`controller.serviceMonitor.labels` | Kubernetes object labels to attach to the serviceMonitor object. | "" +`controller.serviceMonitor.selectorMatchLabels` | A set of labels to allow the selection of endpoints for the ServiceMonitor. | "" +`controller.serviceMonitor.endpoints` | A list of endpoints allowed as part of this ServiceMonitor. | "" `controller.reportIngressStatus.enable` | Updates the address field in the status of Ingress resources with an external address of the Ingress Controller. You must also specify the source of the external address either through an external service via `controller.reportIngressStatus.externalService`, `controller.reportIngressStatus.ingressLink` or the `external-status-address` entry in the ConfigMap via `controller.config.entries`. **Note:** `controller.config.entries.external-status-address` takes precedence over the others. | true `controller.reportIngressStatus.externalService` | Specifies the name of the service with the type LoadBalancer through which the Ingress Controller is exposed externally. The external address of the service is used when reporting the status of Ingress, VirtualServer and VirtualServerRoute resources. `controller.reportIngressStatus.enable` must be set to `true`. The default is autogenerated and enabled when `controller.service.create` is set to `true` and `controller.service.type` is set to `LoadBalancer`. | Autogenerated `controller.reportIngressStatus.ingressLink` | Specifies the name of the IngressLink resource, which exposes the Ingress Controller pods via a BIG-IP system. The IP of the BIG-IP system is used when reporting the status of Ingress, VirtualServer and VirtualServerRoute resources. `controller.reportIngressStatus.enable` must be set to `true`. | "" @@ -225,7 +233,7 @@ Parameter | Description | Default `controller.reportIngressStatus.annotations` | The annotations of the leader election configmap. | {} `controller.pod.annotations` | The annotations of the Ingress Controller pod. | {} `controller.pod.extraLabels` | The additional extra labels of the Ingress Controller pod. | {} -`controller.appprotect.enable` | Enables the App Protect module in the Ingress Controller. | false +`controller.appprotect.enable` | Enables the App Protect WAF module in the Ingress Controller. | false `controller.appprotectdos.enable` | Enables the App Protect DoS module in the Ingress Controller. | false `controller.appprotectdos.debug` | Enable debugging for App Protect DoS. | false `controller.appprotectdos.maxDaemons` | Max number of ADMD instances. | 1 @@ -233,9 +241,11 @@ Parameter | Description | Default `controller.appprotectdos.memory` | RAM memory size to consume in MB. | 50% of free RAM in the container or 80MB, the smaller `controller.readyStatus.enable` | Enables the readiness endpoint `"/nginx-ready"`. The endpoint returns a success code when NGINX has loaded all the config after the startup. This also configures a readiness probe for the Ingress Controller pods that uses the readiness endpoint. | true `controller.readyStatus.port` | The HTTP port for the readiness endpoint. | 8081 +`controller.readyStatus.initialDelaySeconds` | The number of seconds after the Ingress Controller pod has started before readiness probes are initiated. | 0 `controller.enableLatencyMetrics` | Enable collection of latency metrics for upstreams. Requires `prometheus.create`. | false `controller.minReadySeconds` | Specifies the minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing, for it to be considered available. [docs](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#min-ready-seconds) | 0 `controller.strategy` | Specifies the strategy used to replace old Pods by new ones. [docs](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy) | {} +`controller.disableIPV6` | Disable IPV6 listeners explicitly for nodes that do not support the IPV6 stack. | false `rbac.create` | Configures RBAC. | true `prometheus.create` | Expose NGINX or NGINX Plus metrics in the Prometheus format. | false `prometheus.port` | Configures the port to scrape the metrics. | 9113 diff --git a/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_apdoslogconfs.yaml b/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_apdoslogconfs.yaml index d41efc53..e23e8718 100644 --- a/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_apdoslogconfs.yaml +++ b/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_apdoslogconfs.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.4.0 + controller-gen.kubebuilder.io/version: v0.9.2 creationTimestamp: null name: apdoslogconfs.appprotectdos.f5.com spec: @@ -38,13 +38,11 @@ spec: - splunk - arcsight - user-defined - default: splunk type: string format_string: type: string max_message_size: pattern: ^([1-9]|[1-5][0-9]|6[0-4])k$ - default: 5k type: string type: object filter: diff --git a/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_apdospolicy.yaml b/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_apdospolicy.yaml index cc5b9bd1..a16399a1 100644 --- a/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_apdospolicy.yaml +++ b/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_apdospolicy.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.4.0 + controller-gen.kubebuilder.io/version: v0.9.2 creationTimestamp: null name: apdospolicies.appprotectdos.f5.com spec: diff --git a/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_dosprotectedresources.yaml b/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_dosprotectedresources.yaml index 275438cc..c18e1173 100644 --- a/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_dosprotectedresources.yaml +++ b/helm-charts/nginx-ingress/crds/appprotectdos.f5.com_dosprotectedresources.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.7.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: dosprotectedresources.appprotectdos.f5.com spec: @@ -79,9 +79,3 @@ spec: type: string served: true storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/helm-charts/nginx-ingress/crds/externaldns.nginx.org_dnsendpoints.yaml b/helm-charts/nginx-ingress/crds/externaldns.nginx.org_dnsendpoints.yaml index 409e36a7..206626bb 100644 --- a/helm-charts/nginx-ingress/crds/externaldns.nginx.org_dnsendpoints.yaml +++ b/helm-charts/nginx-ingress/crds/externaldns.nginx.org_dnsendpoints.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: dnsendpoints.externaldns.nginx.org spec: @@ -29,11 +29,13 @@ spec: metadata: type: object spec: + description: DNSEndpointSpec holds information about endpoints. type: object properties: endpoints: type: array items: + description: Endpoint describes DNS Endpoint. type: object properties: dnsName: @@ -48,6 +50,7 @@ spec: description: ProviderSpecific stores provider specific config type: array items: + description: ProviderSpecificProperty represents provider specific config property. type: object properties: name: @@ -69,6 +72,7 @@ spec: items: type: string status: + description: DNSEndpointStatus represents generation observed by the external dns controller. type: object properties: observedGeneration: @@ -79,9 +83,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/helm-charts/nginx-ingress/crds/k8s.nginx.org_globalconfigurations.yaml b/helm-charts/nginx-ingress/crds/k8s.nginx.org_globalconfigurations.yaml index a91be58f..5c9ef1f1 100644 --- a/helm-charts/nginx-ingress/crds/k8s.nginx.org_globalconfigurations.yaml +++ b/helm-charts/nginx-ingress/crds/k8s.nginx.org_globalconfigurations.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: globalconfigurations.k8s.nginx.org spec: @@ -48,9 +48,3 @@ spec: type: string served: true storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/helm-charts/nginx-ingress/crds/k8s.nginx.org_policies.yaml b/helm-charts/nginx-ingress/crds/k8s.nginx.org_policies.yaml index 5a31f54b..802f3514 100644 --- a/helm-charts/nginx-ingress/crds/k8s.nginx.org_policies.yaml +++ b/helm-charts/nginx-ingress/crds/k8s.nginx.org_policies.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: policies.k8s.nginx.org spec: @@ -288,9 +288,3 @@ spec: type: string served: true storage: false -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/helm-charts/nginx-ingress/crds/k8s.nginx.org_transportservers.yaml b/helm-charts/nginx-ingress/crds/k8s.nginx.org_transportservers.yaml index 66d43d20..67069a61 100644 --- a/helm-charts/nginx-ingress/crds/k8s.nginx.org_transportservers.yaml +++ b/helm-charts/nginx-ingress/crds/k8s.nginx.org_transportservers.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: transportservers.k8s.nginx.org spec: @@ -149,9 +149,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/helm-charts/nginx-ingress/crds/k8s.nginx.org_virtualserverroutes.yaml b/helm-charts/nginx-ingress/crds/k8s.nginx.org_virtualserverroutes.yaml index 476e401c..91c75853 100644 --- a/helm-charts/nginx-ingress/crds/k8s.nginx.org_virtualserverroutes.yaml +++ b/helm-charts/nginx-ingress/crds/k8s.nginx.org_virtualserverroutes.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: virtualserverroutes.k8s.nginx.org spec: @@ -633,9 +633,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/helm-charts/nginx-ingress/crds/k8s.nginx.org_virtualservers.yaml b/helm-charts/nginx-ingress/crds/k8s.nginx.org_virtualservers.yaml index dba839c3..b247a562 100644 --- a/helm-charts/nginx-ingress/crds/k8s.nginx.org_virtualservers.yaml +++ b/helm-charts/nginx-ingress/crds/k8s.nginx.org_virtualservers.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.8.0 + controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: virtualservers.k8s.nginx.org spec: @@ -713,9 +713,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/helm-charts/nginx-ingress/templates/_helpers.tpl b/helm-charts/nginx-ingress/templates/_helpers.tpl index 9a73a565..e04d1a35 100644 --- a/helm-charts/nginx-ingress/templates/_helpers.tpl +++ b/helm-charts/nginx-ingress/templates/_helpers.tpl @@ -21,8 +21,12 @@ app.kubernetes.io/instance: {{ .Release.Name }} Expand the name of the configmap. */}} {{- define "nginx-ingress.configName" -}} +{{- if .Values.controller.customConfigMap -}} +{{ .Values.controller.customConfigMap }} +{{- else -}} {{- default (include "nginx-ingress.name" .) .Values.controller.config.name -}} {{- end -}} +{{- end -}} {{/* Expand leader election lock name. @@ -49,6 +53,13 @@ Expand service name. {{- default (include "nginx-ingress.name" .) .Values.controller.service.name }} {{- end -}} +{{/* +Expand serviceMonitor name. +*/}} +{{- define "nginx-ingress.serviceMonitorName" -}} +{{- default (include "nginx-ingress.name" .) .Values.controller.serviceMonitor.name }} +{{- end -}} + {{/* Expand default TLS name. */}} @@ -68,4 +79,15 @@ Expand app name. */}} {{- define "nginx-ingress.appName" -}} {{- default (include "nginx-ingress.name" .) .Values.controller.name -}} -{{- end -}} \ No newline at end of file +{{- end -}} + +{{/* +Expand image name. +*/}} +{{- define "nginx-ingress.image" -}} +{{- if .Values.controller.image.digest -}} +{{- printf "%s@%s" .Values.controller.image.repository .Values.controller.image.digest -}} +{{- else -}} +{{- printf "%s:%s" .Values.controller.image.repository .Values.controller.image.tag -}} +{{- end -}} +{{- end -}} diff --git a/helm-charts/nginx-ingress/templates/controller-configmap.yaml b/helm-charts/nginx-ingress/templates/controller-configmap.yaml index 971faa84..fd119918 100644 --- a/helm-charts/nginx-ingress/templates/controller-configmap.yaml +++ b/helm-charts/nginx-ingress/templates/controller-configmap.yaml @@ -1,3 +1,4 @@ +{{- if not .Values.controller.customConfigMap -}} apiVersion: v1 kind: ConfigMap metadata: @@ -13,3 +14,4 @@ data: {{- if .Values.controller.config.entries }} {{ toYaml .Values.controller.config.entries | indent 2 }} {{- end }} +{{- end }} diff --git a/helm-charts/nginx-ingress/templates/controller-daemonset.yaml b/helm-charts/nginx-ingress/templates/controller-daemonset.yaml index 259567b2..a318bfc0 100644 --- a/helm-charts/nginx-ingress/templates/controller-daemonset.yaml +++ b/helm-charts/nginx-ingress/templates/controller-daemonset.yaml @@ -38,6 +38,7 @@ spec: {{- end }} spec: serviceAccountName: {{ include "nginx-ingress.serviceAccountName" . }} + automountServiceAccountToken: true terminationGracePeriodSeconds: {{ .Values.controller.terminationGracePeriodSeconds }} {{- if .Values.controller.nodeSelector }} nodeSelector: @@ -69,8 +70,12 @@ spec: hostNetwork: {{ .Values.controller.hostNetwork }} containers: - name: {{ include "nginx-ingress.name" . }} - image: "{{ .Values.controller.image.repository }}:{{ .Values.controller.image.tag }}" + image: {{ include "nginx-ingress.image" . }} imagePullPolicy: "{{ .Values.controller.image.pullPolicy }}" +{{- if .Values.controller.lifecycle }} + lifecycle: +{{ toYaml .Values.controller.lifecycle | indent 10 }} +{{- end }} ports: - name: http containerPort: 80 @@ -87,12 +92,13 @@ spec: {{- end }} {{- if .Values.controller.readyStatus.enable }} - name: readiness-port - containerPort: {{ .Values.controller.readyStatus.port}} + containerPort: {{ .Values.controller.readyStatus.port }} readinessProbe: httpGet: path: /nginx-ready port: readiness-port periodSeconds: 1 + initialDelaySeconds: {{ .Values.controller.readyStatus.initialDelaySeconds }} {{- end }} securityContext: allowPrivilegeEscalation: true @@ -147,7 +153,7 @@ spec: - -nginx-configmaps=$(POD_NAMESPACE)/{{ include "nginx-ingress.configName" . }} {{- if .Values.controller.defaultTLS.secret }} - -default-server-tls-secret={{ .Values.controller.defaultTLS.secret }} -{{ else }} +{{ else if and (.Values.controller.defaultTLS.cert) (.Values.controller.defaultTLS.key) }} - -default-server-tls-secret=$(POD_NAMESPACE)/{{ include "nginx-ingress.defaultTLSName" . }} {{- end }} - -ingress-class={{ .Values.controller.ingressClass }} @@ -185,6 +191,8 @@ spec: - -prometheus-tls-secret={{ .Values.prometheus.secret }} - -enable-custom-resources={{ .Values.controller.enableCustomResources }} - -enable-snippets={{ .Values.controller.enableSnippets }} + - -include-year={{ .Values.controller.includeYear }} + - -disable-ipv6={{ .Values.controller.disableIPV6 }} {{- if .Values.controller.enableCustomResources }} - -enable-tls-passthrough={{ .Values.controller.enableTLSPassthrough }} - -enable-preview-policies={{ .Values.controller.enablePreviewPolicies }} @@ -208,7 +216,6 @@ spec: {{- if .Values.controller.initContainers }} initContainers: {{ toYaml .Values.controller.initContainers | nindent 8 }} {{- end }} -{{- end }} {{- if .Values.controller.strategy }} updateStrategy: {{ toYaml .Values.controller.strategy | indent 4 }} @@ -216,3 +223,4 @@ spec: {{- if .Values.controller.minReadySeconds }} minReadySeconds: {{ .Values.controller.minReadySeconds }} {{- end }} +{{- end }} diff --git a/helm-charts/nginx-ingress/templates/controller-deployment.yaml b/helm-charts/nginx-ingress/templates/controller-deployment.yaml index e0770143..55b6f27f 100644 --- a/helm-charts/nginx-ingress/templates/controller-deployment.yaml +++ b/helm-charts/nginx-ingress/templates/controller-deployment.yaml @@ -70,12 +70,17 @@ spec: priorityClassName: {{ .Values.controller.priorityClassName }} {{- end }} serviceAccountName: {{ include "nginx-ingress.serviceAccountName" . }} + automountServiceAccountToken: true terminationGracePeriodSeconds: {{ .Values.controller.terminationGracePeriodSeconds }} hostNetwork: {{ .Values.controller.hostNetwork }} containers: - - image: "{{ .Values.controller.image.repository }}:{{ .Values.controller.image.tag }}" + - image: {{ include "nginx-ingress.image" . }} name: {{ include "nginx-ingress.name" . }} imagePullPolicy: "{{ .Values.controller.image.pullPolicy }}" +{{- if .Values.controller.lifecycle }} + lifecycle: +{{ toYaml .Values.controller.lifecycle | indent 10 }} +{{- end }} ports: - name: http containerPort: 80 @@ -90,12 +95,13 @@ spec: {{- end }} {{- if .Values.controller.readyStatus.enable }} - name: readiness-port - containerPort: {{ .Values.controller.readyStatus.port}} + containerPort: {{ .Values.controller.readyStatus.port }} readinessProbe: httpGet: path: /nginx-ready port: readiness-port periodSeconds: 1 + initialDelaySeconds: {{ .Values.controller.readyStatus.initialDelaySeconds }} {{- end }} resources: {{ toYaml .Values.controller.resources | indent 10 }} @@ -150,7 +156,7 @@ spec: - -nginx-configmaps=$(POD_NAMESPACE)/{{ include "nginx-ingress.configName" . }} {{- if .Values.controller.defaultTLS.secret }} - -default-server-tls-secret={{ .Values.controller.defaultTLS.secret }} -{{ else }} +{{ else if and (.Values.controller.defaultTLS.cert) (.Values.controller.defaultTLS.key) }} - -default-server-tls-secret=$(POD_NAMESPACE)/{{ include "nginx-ingress.defaultTLSName" . }} {{- end }} - -ingress-class={{ .Values.controller.ingressClass }} @@ -188,6 +194,8 @@ spec: - -prometheus-tls-secret={{ .Values.prometheus.secret }} - -enable-custom-resources={{ .Values.controller.enableCustomResources }} - -enable-snippets={{ .Values.controller.enableSnippets }} + - -include-year={{ .Values.controller.includeYear }} + - -disable-ipv6={{ .Values.controller.disableIPV6 }} {{- if .Values.controller.enableCustomResources }} - -enable-tls-passthrough={{ .Values.controller.enableTLSPassthrough }} - -enable-preview-policies={{ .Values.controller.enablePreviewPolicies }} @@ -205,13 +213,12 @@ spec: - -spire-agent-address=/run/spire/sockets/agent.sock - -enable-internal-routes={{ .Values.nginxServiceMesh.enableEgress }} {{- end }} - {{- if .Values.controller.extraContainers }} +{{- if .Values.controller.extraContainers }} {{ toYaml .Values.controller.extraContainers | nindent 6 }} {{- end }} {{- if .Values.controller.initContainers }} initContainers: {{ toYaml .Values.controller.initContainers | nindent 8 }} {{- end }} -{{- end }} {{- if .Values.controller.strategy }} strategy: {{ toYaml .Values.controller.strategy | indent 4 }} @@ -219,3 +226,4 @@ spec: {{- if .Values.controller.minReadySeconds }} minReadySeconds: {{ .Values.controller.minReadySeconds }} {{- end }} +{{- end }} diff --git a/helm-charts/nginx-ingress/templates/controller-secret.yaml b/helm-charts/nginx-ingress/templates/controller-secret.yaml index 4c9e693b..f9941e88 100644 --- a/helm-charts/nginx-ingress/templates/controller-secret.yaml +++ b/helm-charts/nginx-ingress/templates/controller-secret.yaml @@ -1,4 +1,4 @@ -{{ if not .Values.controller.defaultTLS.secret }} +{{ if and (not .Values.controller.defaultTLS.secret) (.Values.controller.defaultTLS.cert) (.Values.controller.defaultTLS.key) }} apiVersion: v1 kind: Secret metadata: diff --git a/helm-charts/nginx-ingress/templates/controller-servicemonitor.yaml b/helm-charts/nginx-ingress/templates/controller-servicemonitor.yaml new file mode 100644 index 00000000..3638d56e --- /dev/null +++ b/helm-charts/nginx-ingress/templates/controller-servicemonitor.yaml @@ -0,0 +1,15 @@ +{{- if .Values.controller.serviceMonitor.create }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ include "nginx-ingress.serviceMonitorName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- toYaml .Values.controller.serviceMonitor.labels | nindent 4 }} +spec: + selector: + matchLabels: + {{- toYaml .Values.controller.serviceMonitor.selectorMatchLabels | nindent 6 }} + endpoints: + {{- toYaml .Values.controller.serviceMonitor.endpoints | nindent 4 }} +{{- end }} diff --git a/helm-charts/nginx-ingress/values-icp.yaml b/helm-charts/nginx-ingress/values-icp.yaml index e9669239..963f9e42 100644 --- a/helm-charts/nginx-ingress/values-icp.yaml +++ b/helm-charts/nginx-ingress/values-icp.yaml @@ -3,7 +3,7 @@ controller: nginxplus: true image: repository: mycluster.icp:8500/kube-system/nginx-plus-ingress - tag: "2.3.0" + tag: "2.4.0" nodeSelector: beta.kubernetes.io/arch: "amd64" proxy: true diff --git a/helm-charts/nginx-ingress/values-nsm.yaml b/helm-charts/nginx-ingress/values-nsm.yaml index 82f184a8..f9cb9fc6 100644 --- a/helm-charts/nginx-ingress/values-nsm.yaml +++ b/helm-charts/nginx-ingress/values-nsm.yaml @@ -2,7 +2,7 @@ controller: nginxplus: true image: repository: nginx-plus-ingress - tag: "2.3.0" + tag: "2.4.0" enableLatencyMetrics: true nginxServiceMesh: enable: true diff --git a/helm-charts/nginx-ingress/values-plus.yaml b/helm-charts/nginx-ingress/values-plus.yaml index d2846101..92a0f45b 100644 --- a/helm-charts/nginx-ingress/values-plus.yaml +++ b/helm-charts/nginx-ingress/values-plus.yaml @@ -2,4 +2,4 @@ controller: nginxplus: true image: repository: nginx-plus-ingress - tag: "2.3.0" + tag: "2.4.0" diff --git a/helm-charts/nginx-ingress/values.yaml b/helm-charts/nginx-ingress/values.yaml index 926eac1c..36c0e668 100644 --- a/helm-charts/nginx-ingress/values.yaml +++ b/helm-charts/nginx-ingress/values.yaml @@ -12,11 +12,11 @@ controller: # Timeout in milliseconds which the Ingress Controller will wait for a successful NGINX reload after a change or at the initial start. nginxReloadTimeout: 60000 - ## Support for App Protect + ## Support for App Protect WAF appprotect: - ## Enable the App Protect module in the Ingress Controller. + ## Enable the App Protect WAF module in the Ingress Controller. enable: false - ## Sets log level for App Protect. Allowed values: fatal, error, warn, info, debug, trace + ## Sets log level for App Protect WAF. Allowed values: fatal, error, warn, info, debug, trace # logLevel: fatal ## Support for App Protect Dos @@ -49,11 +49,21 @@ controller: repository: nginx/nginx-ingress ## The tag of the Ingress Controller image. - tag: "2.3.0" + tag: "2.4.0" + + ## The digest of the Ingress Controller image. + ## If digest is specified it has precedence over tag and will be used instead + # digest: "sha256:CHANGEME" ## The pull policy for the Ingress Controller image. pullPolicy: IfNotPresent + ## The lifecycle of the Ingress Controller pods. + lifecycle: {} + + ## The custom ConfigMap to use instead of the one provided by default + customConfigMap: "" + config: ## The name of the ConfigMap used by the Ingress Controller. ## Autogenerated if not set or set to "". @@ -67,17 +77,18 @@ controller: ## It is recommended to use your own TLS certificates and keys defaultTLS: - ## The base64-encoded TLS certificate for the default HTTPS server. If not specified, a pre-generated self-signed certificate is used. - ## Note: It is recommended that you specify your own certificate. + ## The base64-encoded TLS certificate for the default HTTPS server. By default, a pre-generated self-signed certificate is used. + ## Note: It is recommended that you specify your own certificate. Alternatively, omitting the default server secret completely will configure NGINX to reject TLS connections to the default server. cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN2akNDQWFZQ0NRREFPRjl0THNhWFhEQU5CZ2txaGtpRzl3MEJBUXNGQURBaE1SOHdIUVlEVlFRRERCWk8KUjBsT1dFbHVaM0psYzNORGIyNTBjbTlzYkdWeU1CNFhEVEU0TURreE1qRTRNRE16TlZvWERUSXpNRGt4TVRFNApNRE16TlZvd0lURWZNQjBHQTFVRUF3d1dUa2RKVGxoSmJtZHlaWE56UTI5dWRISnZiR3hsY2pDQ0FTSXdEUVlKCktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUwvN2hIUEtFWGRMdjNyaUM3QlBrMTNpWkt5eTlyQ08KR2xZUXYyK2EzUDF0azIrS3YwVGF5aGRCbDRrcnNUcTZzZm8vWUk1Y2Vhbkw4WGM3U1pyQkVRYm9EN2REbWs1Qgo4eDZLS2xHWU5IWlg0Rm5UZ0VPaStlM2ptTFFxRlBSY1kzVnNPazFFeUZBL0JnWlJVbkNHZUtGeERSN0tQdGhyCmtqSXVuektURXUyaDU4Tlp0S21ScUJHdDEwcTNRYzhZT3ExM2FnbmovUWRjc0ZYYTJnMjB1K1lYZDdoZ3krZksKWk4vVUkxQUQ0YzZyM1lma1ZWUmVHd1lxQVp1WXN2V0RKbW1GNWRwdEMzN011cDBPRUxVTExSakZJOTZXNXIwSAo1TmdPc25NWFJNV1hYVlpiNWRxT3R0SmRtS3FhZ25TZ1JQQVpQN2MwQjFQU2FqYzZjNGZRVXpNQ0F3RUFBVEFOCkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWpLb2tRdGRPcEsrTzhibWVPc3lySmdJSXJycVFVY2ZOUitjb0hZVUoKdGhrYnhITFMzR3VBTWI5dm15VExPY2xxeC9aYzJPblEwMEJCLzlTb0swcitFZ1U2UlVrRWtWcitTTFA3NTdUWgozZWI4dmdPdEduMS9ienM3bzNBaS9kclkrcUI5Q2k1S3lPc3FHTG1US2xFaUtOYkcyR1ZyTWxjS0ZYQU80YTY3Cklnc1hzYktNbTQwV1U3cG9mcGltU1ZmaXFSdkV5YmN3N0NYODF6cFErUyt1eHRYK2VBZ3V0NHh3VlI5d2IyVXYKelhuZk9HbWhWNThDd1dIQnNKa0kxNXhaa2VUWXdSN0diaEFMSkZUUkk3dkhvQXprTWIzbjAxQjQyWjNrN3RXNQpJUDFmTlpIOFUvOWxiUHNoT21FRFZkdjF5ZytVRVJxbStGSis2R0oxeFJGcGZnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= - ## The base64-encoded TLS key for the default HTTPS server. Note: If not specified, a pre-generated key is used. - ## Note: It is recommended that you specify your own key. + ## The base64-encoded TLS key for the default HTTPS server. By default, a pre-generated key is used. + ## Note: It is recommended that you specify your own key. Alternatively, omitting the default server secret completely will configure NGINX to reject TLS connections to the default server. key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdi91RWM4b1JkMHUvZXVJTHNFK1RYZUprckxMMnNJNGFWaEMvYjVyYy9XMlRiNHEvClJOcktGMEdYaVN1eE9ycXgrajlnamx4NXFjdnhkenRKbXNFUkJ1Z1B0ME9hVGtIekhvb3FVWmcwZGxmZ1dkT0EKUTZMNTdlT1l0Q29VOUZ4amRXdzZUVVRJVUQ4R0JsRlNjSVo0b1hFTkhzbysyR3VTTWk2Zk1wTVM3YUhudzFtMApxWkdvRWEzWFNyZEJ6eGc2clhkcUNlUDlCMXl3VmRyYURiUzc1aGQzdUdETDU4cGszOVFqVUFQaHpxdmRoK1JWClZGNGJCaW9CbTVpeTlZTW1hWVhsMm0wTGZzeTZuUTRRdFFzdEdNVWozcGJtdlFmazJBNnljeGRFeFpkZFZsdmwKMm82MjBsMllxcHFDZEtCRThCay90elFIVTlKcU56cHpoOUJUTXdJREFRQUJBb0lCQVFDZklHbXowOHhRVmorNwpLZnZJUXQwQ0YzR2MxNld6eDhVNml4MHg4Mm15d1kxUUNlL3BzWE9LZlRxT1h1SENyUlp5TnUvZ2IvUUQ4bUFOCmxOMjRZTWl0TWRJODg5TEZoTkp3QU5OODJDeTczckM5bzVvUDlkazAvYzRIbjAzSkVYNzZ5QjgzQm9rR1FvYksKMjhMNk0rdHUzUmFqNjd6Vmc2d2szaEhrU0pXSzBwV1YrSjdrUkRWYmhDYUZhNk5nMUZNRWxhTlozVDhhUUtyQgpDUDNDeEFTdjYxWTk5TEI4KzNXWVFIK3NYaTVGM01pYVNBZ1BkQUk3WEh1dXFET1lvMU5PL0JoSGt1aVg2QnRtCnorNTZud2pZMy8yUytSRmNBc3JMTnIwMDJZZi9oY0IraVlDNzVWYmcydVd6WTY3TWdOTGQ5VW9RU3BDRkYrVm4KM0cyUnhybnhBb0dCQU40U3M0ZVlPU2huMVpQQjdhTUZsY0k2RHR2S2ErTGZTTXFyY2pOZjJlSEpZNnhubmxKdgpGenpGL2RiVWVTbWxSekR0WkdlcXZXaHFISy9iTjIyeWJhOU1WMDlRQ0JFTk5jNmtWajJTVHpUWkJVbEx4QzYrCk93Z0wyZHhKendWelU0VC84ajdHalRUN05BZVpFS2FvRHFyRG5BYWkyaW5oZU1JVWZHRXFGKzJyQW9HQkFOMVAKK0tZL0lsS3RWRzRKSklQNzBjUis3RmpyeXJpY05iWCtQVzUvOXFHaWxnY2grZ3l4b25BWlBpd2NpeDN3QVpGdwpaZC96ZFB2aTBkWEppc1BSZjRMazg5b2pCUmpiRmRmc2l5UmJYbyt3TFU4NUhRU2NGMnN5aUFPaTVBRHdVU0FkCm45YWFweUNweEFkREtERHdObit3ZFhtaTZ0OHRpSFRkK3RoVDhkaVpBb0dCQUt6Wis1bG9OOTBtYlF4VVh5YUwKMjFSUm9tMGJjcndsTmVCaWNFSmlzaEhYa2xpSVVxZ3hSZklNM2hhUVRUcklKZENFaHFsV01aV0xPb2I2NTNyZgo3aFlMSXM1ZUtka3o0aFRVdnpldm9TMHVXcm9CV2xOVHlGanIrSWhKZnZUc0hpOGdsU3FkbXgySkJhZUFVWUNXCndNdlQ4NmNLclNyNkQrZG8wS05FZzFsL0FvR0FlMkFVdHVFbFNqLzBmRzgrV3hHc1RFV1JqclRNUzRSUjhRWXQKeXdjdFA4aDZxTGxKUTRCWGxQU05rMXZLTmtOUkxIb2pZT2pCQTViYjhibXNVU1BlV09NNENoaFJ4QnlHbmR2eAphYkJDRkFwY0IvbEg4d1R0alVZYlN5T294ZGt5OEp0ek90ajJhS0FiZHd6NlArWDZDODhjZmxYVFo5MWpYL3RMCjF3TmRKS2tDZ1lCbyt0UzB5TzJ2SWFmK2UwSkN5TGhzVDQ5cTN3Zis2QWVqWGx2WDJ1VnRYejN5QTZnbXo5aCsKcDNlK2JMRUxwb3B0WFhNdUFRR0xhUkcrYlNNcjR5dERYbE5ZSndUeThXczNKY3dlSTdqZVp2b0ZpbmNvVlVIMwphdmxoTUVCRGYxSjltSDB5cDBwWUNaS2ROdHNvZEZtQktzVEtQMjJhTmtsVVhCS3gyZzR6cFE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= ## The secret with a TLS certificate and key for the default HTTPS server. ## The value must follow the following format: `/`. ## Used as an alternative to specifying a certificate and key using `controller.defaultTLS.cert` and `controller.defaultTLS.key` parameters. + ## Note: Alternatively, omitting the default server secret completely will configure NGINX to reject TLS connections to the default server. ## Format: / secret: @@ -166,7 +177,7 @@ controller: ## New Ingresses without an ingressClassName field specified will be assigned the class specified in `controller.ingressClass`. setAsDefaultIngress: false - ## Namespace to watch for Ingress resources. By default the Ingress Controller watches all namespaces. + ## Comma separated list of namespaces to watch for Ingress resources. By default the Ingress Controller watches all namespaces. watchNamespace: "" ## Enable the custom resources. @@ -178,6 +189,9 @@ controller: ## Enable OIDC policies. enableOIDC: false + ## Include year in log header. This parameter will be removed in release 2.7 and the year will be included by default. + includeYear: false + ## Enable TLS Passthrough on port 443. Requires controller.enableCustomResources. enableTLSPassthrough: false @@ -300,6 +314,24 @@ controller: ## Secret must exist in the same namespace as the helm release. imagePullSecretName: "" + serviceMonitor: + ## Creates a serviceMonitor to expose statistics on the kubernetes pods. + create: false + + ## The name of the serviceMonitor + ## Autogenerated if not set or set to "". + # name: nginx-ingress + + + ## Kubernetes object labels to attach to the serviceMonitor object. + labels: {} + + ## A set of labels to allow the selection of endpoints for the ServiceMonitor. + selectorMatchLabels: {} + + ## A list of endpoints allowed as part of this ServiceMonitor. + endpoints: {} + reportIngressStatus: ## Updates the address field in the status of Ingress resources with an external address of the Ingress Controller. ## You must also specify the source of the external address either through an external service via controller.reportIngressStatus.externalService, @@ -345,9 +377,15 @@ controller: ## Set the port where the readiness endpoint is exposed. port: 8081 + ## The number of seconds after the Ingress Controller pod has started before readiness probes are initiated. + initialDelaySeconds: 0 + ## Enable collection of latency metrics for upstreams. Requires prometheus.create. enableLatencyMetrics: false + ## Disable IPV6 listeners explicitly for nodes that do not support the IPV6 stack. + disableIPV6: false + rbac: ## Configures RBAC. create: true