Skip to content

Commit 3b25080

Browse files
M00nF1shzac-nixon
authored andcommitted
add toggle to adjust failurePolicy of pod webhook and documentations (kubernetes-sigs#4063)
the vulcheck failed due to other reasons.
1 parent 3f2ba46 commit 3b25080

File tree

5 files changed

+145
-121
lines changed

5 files changed

+145
-121
lines changed

config/webhook/manifests.yaml

Lines changed: 120 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -4,128 +4,128 @@ kind: MutatingWebhookConfiguration
44
metadata:
55
name: webhook
66
webhooks:
7-
- admissionReviewVersions:
8-
- v1beta1
9-
clientConfig:
10-
service:
11-
name: webhook-service
12-
namespace: system
13-
path: /mutate-v1-pod
14-
failurePolicy: Fail
15-
name: mpod.elbv2.k8s.aws
16-
rules:
17-
- apiGroups:
18-
- ""
19-
apiVersions:
20-
- v1
21-
operations:
22-
- CREATE
23-
resources:
24-
- pods
25-
sideEffects: None
26-
- admissionReviewVersions:
27-
- v1beta1
28-
clientConfig:
29-
service:
30-
name: webhook-service
31-
namespace: system
32-
path: /mutate-v1-service
33-
failurePolicy: Fail
34-
name: mservice.elbv2.k8s.aws
35-
rules:
36-
- apiGroups:
37-
- ""
38-
apiVersions:
39-
- v1
40-
operations:
41-
- CREATE
42-
resources:
43-
- services
44-
sideEffects: None
45-
- admissionReviewVersions:
46-
- v1beta1
47-
clientConfig:
48-
service:
49-
name: webhook-service
50-
namespace: system
51-
path: /mutate-elbv2-k8s-aws-v1beta1-targetgroupbinding
52-
failurePolicy: Fail
53-
name: mtargetgroupbinding.elbv2.k8s.aws
54-
rules:
55-
- apiGroups:
56-
- elbv2.k8s.aws
57-
apiVersions:
58-
- v1beta1
59-
operations:
60-
- CREATE
61-
- UPDATE
62-
resources:
63-
- targetgroupbindings
64-
sideEffects: None
7+
- admissionReviewVersions:
8+
- v1beta1
9+
clientConfig:
10+
service:
11+
name: webhook-service
12+
namespace: system
13+
path: /mutate-v1-pod
14+
failurePolicy: Ignore
15+
name: mpod.elbv2.k8s.aws
16+
rules:
17+
- apiGroups:
18+
- ""
19+
apiVersions:
20+
- v1
21+
operations:
22+
- CREATE
23+
resources:
24+
- pods
25+
sideEffects: None
26+
- admissionReviewVersions:
27+
- v1beta1
28+
clientConfig:
29+
service:
30+
name: webhook-service
31+
namespace: system
32+
path: /mutate-v1-service
33+
failurePolicy: Fail
34+
name: mservice.elbv2.k8s.aws
35+
rules:
36+
- apiGroups:
37+
- ""
38+
apiVersions:
39+
- v1
40+
operations:
41+
- CREATE
42+
resources:
43+
- services
44+
sideEffects: None
45+
- admissionReviewVersions:
46+
- v1beta1
47+
clientConfig:
48+
service:
49+
name: webhook-service
50+
namespace: system
51+
path: /mutate-elbv2-k8s-aws-v1beta1-targetgroupbinding
52+
failurePolicy: Fail
53+
name: mtargetgroupbinding.elbv2.k8s.aws
54+
rules:
55+
- apiGroups:
56+
- elbv2.k8s.aws
57+
apiVersions:
58+
- v1beta1
59+
operations:
60+
- CREATE
61+
- UPDATE
62+
resources:
63+
- targetgroupbindings
64+
sideEffects: None
6565
---
6666
apiVersion: admissionregistration.k8s.io/v1
6767
kind: ValidatingWebhookConfiguration
6868
metadata:
69-
name: validating-webhook-configuration
69+
name: webhook
7070
webhooks:
71-
- admissionReviewVersions:
72-
- v1beta1
73-
clientConfig:
74-
service:
75-
name: webhook-service
76-
namespace: system
77-
path: /validate-elbv2-k8s-aws-v1beta1-ingressclassparams
78-
failurePolicy: Fail
79-
name: vingressclassparams.elbv2.k8s.aws
80-
rules:
81-
- apiGroups:
82-
- elbv2.k8s.aws
83-
apiVersions:
84-
- v1beta1
85-
operations:
86-
- CREATE
87-
- UPDATE
88-
resources:
89-
- ingressclassparams
90-
sideEffects: None
91-
- admissionReviewVersions:
92-
- v1beta1
93-
clientConfig:
94-
service:
95-
name: webhook-service
96-
namespace: system
97-
path: /validate-elbv2-k8s-aws-v1beta1-targetgroupbinding
98-
failurePolicy: Fail
99-
name: vtargetgroupbinding.elbv2.k8s.aws
100-
rules:
101-
- apiGroups:
102-
- elbv2.k8s.aws
103-
apiVersions:
104-
- v1beta1
105-
operations:
106-
- CREATE
107-
- UPDATE
108-
resources:
109-
- targetgroupbindings
110-
sideEffects: None
111-
- admissionReviewVersions:
112-
- v1beta1
113-
clientConfig:
114-
service:
115-
name: webhook-service
116-
namespace: system
117-
path: /validate-networking-v1-ingress
118-
failurePolicy: Fail
119-
matchPolicy: Equivalent
120-
name: vingress.elbv2.k8s.aws
121-
rules:
122-
- apiGroups:
123-
- networking.k8s.io
124-
apiVersions:
125-
- v1
126-
operations:
127-
- CREATE
128-
- UPDATE
129-
resources:
130-
- ingresses
131-
sideEffects: None
71+
- admissionReviewVersions:
72+
- v1beta1
73+
clientConfig:
74+
service:
75+
name: webhook-service
76+
namespace: system
77+
path: /validate-elbv2-k8s-aws-v1beta1-ingressclassparams
78+
failurePolicy: Fail
79+
name: vingressclassparams.elbv2.k8s.aws
80+
rules:
81+
- apiGroups:
82+
- elbv2.k8s.aws
83+
apiVersions:
84+
- v1beta1
85+
operations:
86+
- CREATE
87+
- UPDATE
88+
resources:
89+
- ingressclassparams
90+
sideEffects: None
91+
- admissionReviewVersions:
92+
- v1beta1
93+
clientConfig:
94+
service:
95+
name: webhook-service
96+
namespace: system
97+
path: /validate-elbv2-k8s-aws-v1beta1-targetgroupbinding
98+
failurePolicy: Fail
99+
name: vtargetgroupbinding.elbv2.k8s.aws
100+
rules:
101+
- apiGroups:
102+
- elbv2.k8s.aws
103+
apiVersions:
104+
- v1beta1
105+
operations:
106+
- CREATE
107+
- UPDATE
108+
resources:
109+
- targetgroupbindings
110+
sideEffects: None
111+
- admissionReviewVersions:
112+
- v1beta1
113+
clientConfig:
114+
service:
115+
name: webhook-service
116+
namespace: system
117+
path: /validate-networking-v1-ingress
118+
failurePolicy: Fail
119+
matchPolicy: Equivalent
120+
name: vingress.elbv2.k8s.aws
121+
rules:
122+
- apiGroups:
123+
- networking.k8s.io
124+
apiVersions:
125+
- v1
126+
operations:
127+
- CREATE
128+
- UPDATE
129+
resources:
130+
- ingresses
131+
sideEffects: None

docs/deploy/pod_readiness_gate.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,21 @@ The readiness gates have the prefix `target-health.elbv2.k8s.aws` and the contro
4747
!!!tip "create ingress or service before pod"
4848
To ensure all of your pods in a namespace get the readiness gate config, you need create your Ingress or Service and label the namespace before creating the pods
4949

50+
## FailurePolicy
51+
The `failurePolicy` of a webhook determines how errors, such as unrecognized or timeout errors, are handled by the admission webhook.
52+
53+
* `failurePolicy: Fail`: When applied to a pod mutation webhook, this setting will prevent the launch of any pods in labeled namespaces if the AWSLoadBalancerController pods are unavailable. While this can help avoid incomplete or faulty deployments, it could also delay the cluster's recovery in extreme scenarios, such as an API Server outage.
54+
* `failurePolicy: Ignore`: Setting this policy allows Kubernetes to proceed with pod deployments even if the AWSLoadBalancerController pods are unavailable. This can lead to availability risks for applications since Kubernetes may terminate application pods before the new pods have become healthy in the TargetGroups
55+
56+
To strike a balance between reliability and availability, the default failurePolicy for pod mutation webhooks that inject readiness gates is configured as follows:
57+
58+
* `failurePolicy: Ignore` (for versions > v2.11.0)
59+
* `failurePolicy: Fail` (for versions <= v2.11.0)
60+
You can customize the behavior using Helm chart settings, e.g. `--set podMutatorWebhookConfig.failurePolicy=Fail`
61+
62+
!!!note "Recommended settings"
63+
For optimal reliability & availability, it is recommended to use `failurePolicy: Fail` combined with an explicit [Object Selector](#object-selector)
64+
5065
## Object Selector
5166
The default webhook configuration matches all pods in the namespaces containing the label `elbv2.k8s.aws/pod-readiness-gate-inject=enabled`. You can modify the webhook configuration further
5267
to select specific pods from the labeled namespace by specifying the `objectSelector`. For example, in order to select resources with `elbv2.k8s.aws/pod-readiness-gate-inject: enabled` label,

helm/aws-load-balancer-controller/templates/webhook.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ webhooks:
1919
name: {{ template "aws-load-balancer-controller.webhookService" . }}
2020
namespace: {{ $.Release.Namespace }}
2121
path: /mutate-v1-pod
22-
failurePolicy: Ignore
22+
failurePolicy: {{ .Values.podMutatorWebhookConfig.failurePolicy }}
2323
name: mpod.elbv2.k8s.aws
2424
admissionReviewVersions:
2525
- v1beta1

helm/aws-load-balancer-controller/test.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,3 +353,7 @@ serviceMutatorWebhookConfig:
353353
operations:
354354
- CREATE
355355
# - UPDATE
356+
357+
podMutatorWebhookConfig:
358+
# whether or not to fail the pod creation if the webhook fails
359+
failurePolicy: Ignore

helm/aws-load-balancer-controller/values.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,11 @@ serviceMutatorWebhookConfig:
430430
- CREATE
431431
# - UPDATE
432432

433+
# podMutatorWebhookConfig contains configurations specific to the service mutator webhook
434+
podMutatorWebhookConfig:
435+
# whether or not to fail the pod creation if the webhook fails
436+
failurePolicy: Ignore
437+
433438
# serviceTargetENISGTags specifies AWS tags, in addition to the cluster tags, for finding the target ENI SG to which to add inbound rules from NLBs.
434439
serviceTargetENISGTags:
435440

0 commit comments

Comments
 (0)