diff --git a/charts/ingress-nginx/README.md b/charts/ingress-nginx/README.md index 375ca30c8..f196f2067 100644 --- a/charts/ingress-nginx/README.md +++ b/charts/ingress-nginx/README.md @@ -326,12 +326,13 @@ As of version `1.26.0` of this chart, by simply not providing any clusterIP valu | controller.image.runAsUser | int | `101` | | | controller.image.seccompProfile.type | string | `"RuntimeDefault"` | | | controller.image.tag | string | `"v1.9.4"` | | -| controller.ingressClass | string | `"nginx"` | For backwards compatibility with ingress.class annotation, use ingressClass. (comma-seperated list NOT supported) Algorithm is as follows, first ingressClassName is considered, if not present, controller looks for ingress.class annotation | +| controller.ingressClass | string | `"nginx"` | For backwards compatibility with ingress.class annotation, use ingressClass. Algorithm is as follows, first ingressClassName is considered, if not present, controller looks for ingress.class annotation | | controller.ingressClassByName | bool | `false` | Process IngressClass per name (additionally as per spec.controller). | | controller.ingressClassResource.controllerValue | string | `"k8s.io/ingress-nginx"` | Controller-value of the controller that is processing this ingressClass | -| controller.ingressClassResource.default | bool | `false` | If multiple ingressClassResources are set, the default will always be the first in the list | +| controller.ingressClassResource.default | bool | `false` | Is this the default ingressClass for the cluster | | controller.ingressClassResource.enabled | bool | `true` | Is this ingressClass enabled or not | -| controller.ingressClassResource.name | string | `"nginx"` | Name of the ingressClass (comma-seperated list supported) | +| controller.ingressClassResource.extraNames | list | `[]` | Additional ingressClass names | +| controller.ingressClassResource.name | string | `"nginx"` | Name of the ingressClass | | controller.ingressClassResource.parameters | object | `{}` | Parameters is a link to a custom resource containing additional configuration for the controller. This is optional if the controller does not require extra parameters. | | controller.keda.apiVersion | string | `"keda.sh/v1alpha1"` | | | controller.keda.behavior | object | `{}` | | diff --git a/charts/ingress-nginx/templates/_helpers.tpl b/charts/ingress-nginx/templates/_helpers.tpl index f3bd2082f..c936dab79 100644 --- a/charts/ingress-nginx/templates/_helpers.tpl +++ b/charts/ingress-nginx/templates/_helpers.tpl @@ -124,14 +124,6 @@ Users can provide an override for an explicit service they want bound via `.Valu {{- print $servicePath | trimSuffix "-" -}} {{- end -}} -{{/* -Create a default fully qualified default backend name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -*/}} -{{- define "ingress-nginx.defaultBackend.fullname" -}} -{{- printf "%s-%s" (include "ingress-nginx.fullname" .) .Values.defaultBackend.name | trunc 63 | trimSuffix "-" -}} -{{- end -}} - {{/* Common labels */}} diff --git a/charts/ingress-nginx/templates/_params.tpl b/charts/ingress-nginx/templates/_params.tpl index fb2399a17..47d024e85 100644 --- a/charts/ingress-nginx/templates/_params.tpl +++ b/charts/ingress-nginx/templates/_params.tpl @@ -16,9 +16,7 @@ - --election-id={{ include "ingress-nginx.controller.electionID" . }} - --controller-class={{ .Values.controller.ingressClassResource.controllerValue }} {{- if .Values.controller.ingressClass }} -{{- range $index, $name := ( split "," .Values.controller.ingressClassResource.name ) }} -- --ingress-class={{ $name | trim }} -{{- end }} +- --ingress-class={{ .Values.controller.ingressClass }} {{- end }} - --configmap={{ default "$(POD_NAMESPACE)" .Values.controller.configMapNamespace }}/{{ include "ingress-nginx.controller.fullname" . }} {{- if .Values.tcp }} diff --git a/charts/ingress-nginx/templates/controller-extraingressclass.yaml b/charts/ingress-nginx/templates/controller-extraingressclass.yaml new file mode 100644 index 000000000..8a4d850f6 --- /dev/null +++ b/charts/ingress-nginx/templates/controller-extraingressclass.yaml @@ -0,0 +1,18 @@ +{{- if and (.Values.controller.ingressClassResource.enabled) (.Values.controller.ingressClassResource.extraNames) -}} +{{- range $v := .Values.controller.ingressClassResource.extraNames }} +--- +apiVersion: networking.k8s.io/v1 +kind: IngressClass +metadata: + labels: + {{- include "ingress-nginx.labels" $ | nindent 4 }} + app.kubernetes.io/component: controller + {{- with $.Values.controller.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + name: {{ $v | trim }} +spec: + controller: {{ $.Values.controller.ingressClassResource.controllerValue }} + {{ template "ingressClass.parameters" $ }} +{{- end }} +{{- end }} diff --git a/charts/ingress-nginx/templates/controller-ingressclass.yaml b/charts/ingress-nginx/templates/controller-ingressclass.yaml index 9cbe1b58c..9492784a2 100644 --- a/charts/ingress-nginx/templates/controller-ingressclass.yaml +++ b/charts/ingress-nginx/templates/controller-ingressclass.yaml @@ -1,24 +1,21 @@ {{- if .Values.controller.ingressClassResource.enabled -}} -{{- range $index, $name := ( split "," .Values.controller.ingressClassResource.name ) }} ---- # We don't support namespaced ingressClass yet # So a ClusterRole and a ClusterRoleBinding is required apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: labels: - {{- include "ingress-nginx.labels" $ | nindent 4 }} + {{- include "ingress-nginx.labels" . | nindent 4 }} app.kubernetes.io/component: controller - {{- with $.Values.controller.labels }} + {{- with .Values.controller.labels }} {{- toYaml . | nindent 4 }} {{- end }} - name: {{ $name | trim }} -{{- if and ($.Values.controller.ingressClassResource.default) (eq $index "_0") }} + name: {{ .Values.controller.ingressClassResource.name }} +{{- if .Values.controller.ingressClassResource.default }} annotations: ingressclass.kubernetes.io/is-default-class: "true" {{- end }} spec: - controller: {{ $.Values.controller.ingressClassResource.controllerValue }} - {{ template "ingressClass.parameters" $ }} + controller: {{ .Values.controller.ingressClassResource.controllerValue }} + {{ template "ingressClass.parameters" . }} {{- end }} -{{- end }} \ No newline at end of file diff --git a/charts/ingress-nginx/values.yaml b/charts/ingress-nginx/values.yaml index ae23091c9..5d9a392e3 100644 --- a/charts/ingress-nginx/values.yaml +++ b/charts/ingress-nginx/values.yaml @@ -112,12 +112,11 @@ controller: ## This section refers to the creation of the IngressClass resource ## IngressClass resources are supported since k8s >= 1.18 and required since k8s >= 1.19 ingressClassResource: - # -- Name of the ingressClass (comma-seperated list supported) + # -- Name of the ingressClass name: nginx # -- Is this ingressClass enabled or not enabled: true # -- Is this the default ingressClass for the cluster - # -- If multiple ingressClassResources are set, the default will always be the first in the list default: false # -- Controller-value of the controller that is processing this ingressClass controllerValue: "k8s.io/ingress-nginx" @@ -125,7 +124,10 @@ controller: # configuration for the controller. This is optional if the controller # does not require extra parameters. parameters: {} - # -- For backwards compatibility with ingress.class annotation, use ingressClass. (comma-seperated list NOT supported) + # -- Additional ingressClass names + extraNames: [] + # - nginx-external + # -- For backwards compatibility with ingress.class annotation, use ingressClass. # Algorithm is as follows, first ingressClassName is considered, if not present, controller looks for ingress.class annotation ingressClass: nginx # -- Labels to add to the pod container metadata