Skip to content

Commit 84ff6f7

Browse files
authored
Merge pull request #907 from vorozhko/nginx-ingress-cleanup
Adjusted Nginx ingress canary headers on init and promotion
2 parents 3ad55c9 + d7999e6 commit 84ff6f7

File tree

4 files changed

+38
-4
lines changed

4 files changed

+38
-4
lines changed

pkg/router/ingress.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -213,12 +213,18 @@ func (i *IngressRouter) makeAnnotations(annotations map[string]string) map[strin
213213
res := make(map[string]string)
214214
for k, v := range annotations {
215215
if !strings.Contains(k, i.GetAnnotationWithPrefix("canary")) &&
216-
!strings.Contains(k, "kubectl.kubernetes.io/last-applied-configuration") {
216+
!strings.Contains(k, "kubectl.kubernetes.io/last-applied-configuration") &&
217+
!strings.Contains(k, i.GetAnnotationWithPrefix("canary-weight")) &&
218+
!strings.Contains(k, i.GetAnnotationWithPrefix("canary-by-cookie")) &&
219+
!strings.Contains(k, i.GetAnnotationWithPrefix("canary-by-header")) &&
220+
!strings.Contains(k, i.GetAnnotationWithPrefix("canary-by-header-value")) &&
221+
!strings.Contains(k, i.GetAnnotationWithPrefix("canary-by-header-pattern")) {
217222
res[k] = v
218223
}
219224
}
220225

221-
res[i.GetAnnotationWithPrefix("canary")] = "false"
226+
res[i.GetAnnotationWithPrefix("canary")] = "true"
227+
res[i.GetAnnotationWithPrefix("canary-weight")] = "0"
222228

223229
return res
224230
}

pkg/router/ingress_test.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,15 @@ func TestIngressRouter_Reconcile(t *testing.T) {
4242
require.NoError(t, err)
4343

4444
canaryAn := "custom.ingress.kubernetes.io/canary"
45+
canaryWeightAn := "custom.ingress.kubernetes.io/canary-weight"
4546

4647
canaryName := fmt.Sprintf("%s-canary", mocks.ingressCanary.Spec.IngressRef.Name)
4748
inCanary, err := router.kubeClient.NetworkingV1beta1().Ingresses("default").Get(context.TODO(), canaryName, metav1.GetOptions{})
4849
require.NoError(t, err)
4950

5051
// test initialisation
51-
assert.Equal(t, "false", inCanary.Annotations[canaryAn])
52+
assert.Equal(t, "true", inCanary.Annotations[canaryAn])
53+
assert.Equal(t, "0", inCanary.Annotations[canaryWeightAn])
5254
}
5355

5456
func TestIngressRouter_GetSetRoutes(t *testing.T) {
@@ -94,7 +96,8 @@ func TestIngressRouter_GetSetRoutes(t *testing.T) {
9496
require.NoError(t, err)
9597

9698
// test promotion
97-
assert.Equal(t, "false", inCanary.Annotations[canaryAn])
99+
assert.Equal(t, "true", inCanary.Annotations[canaryAn])
100+
assert.Equal(t, "0", inCanary.Annotations[canaryWeightAn])
98101
}
99102

100103
func TestIngressRouter_ABTest(t *testing.T) {

test/nginx/install.sh

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ helm upgrade -i ingress-nginx ingress-nginx/ingress-nginx --version=${NGINX_HELM
1414
--wait \
1515
--namespace ingress-nginx \
1616
--set controller.metrics.enabled=true \
17+
--set controller.admissionWebhooks.enabled=true \
1718
--set controller.podAnnotations."prometheus\.io/scrape"=true \
1819
--set controller.podAnnotations."prometheus\.io/port"=10254 \
1920
--set controller.service.type=NodePort

test/nginx/test-canary.sh

+24
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,30 @@ done
195195

196196
echo '✔ Canary promotion test passed'
197197

198+
echo 'Testing original ingress update after canary promotion to pass validation webhook'
199+
200+
cat <<EOF | kubectl apply -f -
201+
apiVersion: networking.k8s.io/v1beta1
202+
kind: Ingress
203+
metadata:
204+
name: podinfo
205+
namespace: test
206+
labels:
207+
app: podinfo
208+
annotations:
209+
kubernetes.io/ingress.class: "nginx"
210+
spec:
211+
rules:
212+
- host: app.example.com
213+
http:
214+
paths:
215+
- backend:
216+
serviceName: podinfo
217+
servicePort: 80
218+
EOF
219+
220+
echo '✔ Original ingress update with validation webhook passed'
221+
198222
cat <<EOF | kubectl apply -f -
199223
apiVersion: flagger.app/v1beta1
200224
kind: Canary

0 commit comments

Comments
 (0)