Skip to content

Commit 84381f1

Browse files
Gackodkostyrev
authored andcommitted
Chart: Add IngressClass aliases. (kubernetes#11109)
1 parent e9c77f5 commit 84381f1

File tree

4 files changed

+121
-1
lines changed

4 files changed

+121
-1
lines changed

charts/ingress-nginx/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,8 @@ As of version `1.26.0` of this chart, by simply not providing any clusterIP valu
330330
| controller.image.tag | string | `"v1.10.0"` | |
331331
| 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 |
332332
| controller.ingressClassByName | bool | `false` | Process IngressClass per name (additionally as per spec.controller). |
333-
| controller.ingressClassResource | object | `{"controllerValue":"k8s.io/ingress-nginx","default":false,"enabled":true,"name":"nginx","parameters":{}}` | This section refers to the creation of the IngressClass resource. IngressClasses are immutable and cannot be changed after creation. We do not support namespaced IngressClasses, yet, so a ClusterRole and a ClusterRoleBinding is required. |
333+
| controller.ingressClassResource | object | `{"aliases":[],"controllerValue":"k8s.io/ingress-nginx","default":false,"enabled":true,"name":"nginx","parameters":{}}` | This section refers to the creation of the IngressClass resource. IngressClasses are immutable and cannot be changed after creation. We do not support namespaced IngressClasses, yet, so a ClusterRole and a ClusterRoleBinding is required. |
334+
| controller.ingressClassResource.aliases | list | `[]` | Aliases of this IngressClass. Creates copies with identical settings but the respective alias as name. Useful for development environments with only one Ingress Controller but production-like Ingress resources. `default` gets enabled on the original IngressClass only. |
334335
| controller.ingressClassResource.controllerValue | string | `"k8s.io/ingress-nginx"` | Controller of the IngressClass. An Ingress Controller looks for IngressClasses it should reconcile by this value. This value is also being set as the `--controller-class` argument of this Ingress Controller. Ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class |
335336
| controller.ingressClassResource.default | bool | `false` | If true, Ingresses without `ingressClassName` get assigned to this IngressClass on creation. Ingress creation gets rejected if there are multiple default IngressClasses. Ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#default-ingress-class |
336337
| controller.ingressClassResource.enabled | bool | `true` | Create the IngressClass or not |
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{{- if .Values.controller.ingressClassResource.enabled -}}
2+
{{- range .Values.controller.ingressClassResource.aliases }}
3+
---
4+
apiVersion: networking.k8s.io/v1
5+
kind: IngressClass
6+
metadata:
7+
labels:
8+
{{- include "ingress-nginx.labels" $ | nindent 4 }}
9+
app.kubernetes.io/component: controller
10+
{{- with $.Values.controller.labels }}
11+
{{- toYaml . | nindent 4 }}
12+
{{- end }}
13+
name: {{ . }}
14+
spec:
15+
controller: {{ $.Values.controller.ingressClassResource.controllerValue }}
16+
{{- with $.Values.controller.ingressClassResource.parameters }}
17+
parameters: {{ toYaml . | nindent 4 }}
18+
{{- end }}
19+
{{- end }}
20+
{{- end }}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
suite: Controller > IngressClass > Aliases
2+
templates:
3+
- controller-ingressclass-aliases.yaml
4+
5+
tests:
6+
- it: should not create IngressClass aliases
7+
asserts:
8+
- hasDocuments:
9+
count: 0
10+
11+
- it: should create an IngressClass alias with name "nginx-alias" if `controller.ingressClassResource.aliases` is set
12+
set:
13+
controller.ingressClassResource.aliases:
14+
- nginx-alias
15+
asserts:
16+
- hasDocuments:
17+
count: 1
18+
- isKind:
19+
of: IngressClass
20+
- equal:
21+
path: metadata.name
22+
value: nginx-alias
23+
24+
- it: should create an IngressClass alias without annotation `ingressclass.kubernetes.io/is-default-class` if `controller.ingressClassResource.default` is true
25+
set:
26+
controller.ingressClassResource.aliases:
27+
- nginx-alias
28+
controller.ingressClassResource.default: true
29+
asserts:
30+
- hasDocuments:
31+
count: 1
32+
- isKind:
33+
of: IngressClass
34+
- equal:
35+
path: metadata.name
36+
value: nginx-alias
37+
- notExists:
38+
path: metadata.annotations["ingressclass.kubernetes.io/is-default-class"]
39+
40+
- it: should create an IngressClass alias with controller "k8s.io/ingress-nginx-internal" if `controller.ingressClassResource.controllerValue` is "k8s.io/ingress-nginx-internal"
41+
set:
42+
controller.ingressClassResource.aliases:
43+
- nginx-alias
44+
controller.ingressClassResource.controllerValue: k8s.io/ingress-nginx-internal
45+
asserts:
46+
- hasDocuments:
47+
count: 1
48+
- isKind:
49+
of: IngressClass
50+
- equal:
51+
path: metadata.name
52+
value: nginx-alias
53+
- equal:
54+
path: spec.controller
55+
value: k8s.io/ingress-nginx-internal
56+
57+
- it: should create an IngressClass alias with parameters if `controller.ingressClassResource.parameters` is set
58+
set:
59+
controller.ingressClassResource.aliases:
60+
- nginx-alias
61+
controller.ingressClassResource.parameters:
62+
apiGroup: k8s.example.com
63+
kind: IngressParameters
64+
name: external-lb
65+
asserts:
66+
- hasDocuments:
67+
count: 1
68+
- isKind:
69+
of: IngressClass
70+
- equal:
71+
path: metadata.name
72+
value: nginx-alias
73+
- equal:
74+
path: spec.parameters
75+
value:
76+
apiGroup: k8s.example.com
77+
kind: IngressParameters
78+
name: external-lb
79+
80+
- it: should create two IngressClass aliases if `controller.ingressClassResource.aliases` has two elements
81+
set:
82+
controller.ingressClassResource.aliases:
83+
- nginx-alias-1
84+
- nginx-alias-2
85+
asserts:
86+
- hasDocuments:
87+
count: 2
88+
- isKind:
89+
of: IngressClass
90+
- matchRegex:
91+
path: metadata.name
92+
pattern: nginx-alias-(1|2)

charts/ingress-nginx/values.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ controller:
126126
# This value is also being set as the `--controller-class` argument of this Ingress Controller.
127127
# Ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class
128128
controllerValue: k8s.io/ingress-nginx
129+
# -- Aliases of this IngressClass. Creates copies with identical settings but the respective alias as name.
130+
# Useful for development environments with only one Ingress Controller but production-like Ingress resources.
131+
# `default` gets enabled on the original IngressClass only.
132+
aliases: []
133+
# aliases:
134+
# - nginx-alias-1
135+
# - nginx-alias-2
129136
# -- A link to a custom resource containing additional configuration for the controller.
130137
# This is optional if the controller consuming this IngressClass does not require additional parameters.
131138
# Ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class

0 commit comments

Comments
 (0)