Skip to content

Commit c751b76

Browse files
wip: first dummy version working
1 parent 71fa08c commit c751b76

File tree

6 files changed

+105
-8
lines changed

6 files changed

+105
-8
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
APP_NAME = k8s-custom-controller
22
DOCKER_USER = manzilrahul
3-
VERSION ?= 1.0.15
3+
VERSION ?= 1.0.9
44
IMAGE_NAME = $(DOCKER_USER)/$(APP_NAME)
55

66
# 🖼️ Logo banner

certs/tls.crt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFCTCCAvGgAwIBAgIUGomjuVM28sMswNs8Qn4cHw+YstAwDQYJKoZIhvcNAQEL
3+
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MDcyNjE4NDQwMloXDTI2MDcy
4+
NjE4NDQwMlowFDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjANBgkqhkiG9w0BAQEF
5+
AAOCAg8AMIICCgKCAgEAz7+73H2qcRw3VddOGqg3B6DwU1IPZNSdjOJBF66e5YZL
6+
zi/4h/crs33IG9M/UW7W8Zhjb3F1CkGKMuqNO8zsRagB0LjXu0IupRF9WvzS3DP1
7+
/uwjUjpaFkued6sor6DNnZhtk5QBq0gr2/pXjQ1nzlazaB2LSI4g1+Qy1AnLg5PZ
8+
orGmLsrg6g2qcxcVB3RzYpZhuUKkpT9Myt8h2zrohCsgwrbeMwBUG50pgKRYiP4u
9+
77I0IMe/AxyAUszs5rtrs1z4YmjHZPwDwzf75Z/nq2TtArVbOjcCxEwUT1zQkHK2
10+
i2eZCFlX9MN/lIn+70/jUsTn2P/9txF7rRchMnsvO6SwxkJhdb5RUB5JiZlgwh5d
11+
uYtpMKntFaQVno0sqO1M4VbJw8+EZsANYkcG98INa4tw6kH2JQpoUYBjrlH5r0aY
12+
sfvCr8RVK3/LQZ2e8DenzxIjhRVhc6vTFPh/lk8rvCTqiaJGPrufN8CwipxxM/Ac
13+
ALnkVWE7yeMlxWzjW43pwwJAo0BERRk/q7/vo2lCb9mhmlX/iqtitrecCZNOmVjG
14+
y8R5U7devB49kVu2CglUSN9hL0KP8aj8EVS2P85/uYEAJiye5mEnoci51d4C0J6z
15+
K0WAgR3pUbYm31oi/kr2VAZajNCR/FfVHxkm11oz+RP78YEMPavRtoAsX+8IKE8C
16+
AwEAAaNTMFEwHQYDVR0OBBYEFELVR7MDj+saK/6jWR3TXO2TaKDKMB8GA1UdIwQY
17+
MBaAFELVR7MDj+saK/6jWR3TXO2TaKDKMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
18+
hvcNAQELBQADggIBAH5yF9cEUVw8QzLLEn4DOwDvK6vLLWMaxBqLbcx/TU7k31Dk
19+
6p9VDnNRdydd2HWzbK3G+NEr4s7uD8eZwrT5van+SVglnR8glYiKmltEtr6deF6f
20+
+Ri8m4ENWBaUM2eRUUUVm+UHxabHtCGfyQOBheqy8+Hxr4KWalMmGaNtUQ9sd/h3
21+
YZu+Q2jd0GksDLaZhYmPQk/pEnvUxrY2TkECmeV8nJqWqUjUX2MbM8joe6zrhnR0
22+
BEcvA4E/Weg9SDX0hnkkqJw9nbY8uyzOt/YwAaAUkgrVZwaTpJQHjtn6GNOpE+R5
23+
Gr6hdsHxR2+Tfz+lanb2+vX8jXYka/G29a1mkIy6EGegTm9tS0Z56n9on6Bl0pjH
24+
ga90N9wAwLf+kM522VS+hN79ozjS7N/Ny4nDo7JsosMzHjqpNeK7ELf2VNKArcX/
25+
tUewoh58f2IjWL9uBanBfnn3D+USay8JhzDsNk+gBD78YwxDndSFE63t7cCFDEXw
26+
cOwu9WMANLEfZYQFu4uK23HCzSfwFrbbGRzYCA/u5L+MpTIwzYDUKiCB1+wn0Jj0
27+
aztGazwqglyBzASimfj6cWQBHaQoJ+WwPo/qujvp0eC1AgNuiKJLSBEJD0SKgScX
28+
LDwvvXUHkdOC05vfLo24utubJtqfAXelweRhAbPbdfehNNGRBnayxmtTAWms
29+
-----END CERTIFICATE-----

certs/tls.key

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
-----BEGIN PRIVATE KEY-----
2+
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
51+
K7RDvaEAs2FJrD7Rhg8OdHS9DP1sn0Q=
52+
-----END PRIVATE KEY-----

main.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,15 @@ func main() {
132132
fmt.Errorf("%s", err.Error())
133133
}
134134

135-
http.HandleFunc("/validate", ValidateDeployment)
135+
// Start the webhook server in a goroutine
136+
go func() {
137+
http.HandleFunc("/validate", ValidateDeployment)
138+
log.Println("Starting webhook server on :8000...")
139+
err := http.ListenAndServeTLS(":8000", "/certs/tls.crt", "/certs/tls.key", nil)
140+
if err != nil {
141+
log.Fatalf("Failed to start webhook server: %v", err)
142+
}
143+
}()
136144

137145
ch := make(chan struct{})
138146
// factory
@@ -142,6 +150,9 @@ func main() {
142150
c.Run(ch)
143151
fmt.Println(factory)
144152
factory.Apps().V1().Deployments().Informer()
153+
154+
// Block forever
155+
select {}
145156
}
146157

147158
func parseRequest(r *http.Request) (*admissionv1.AdmissionReview, error) {
@@ -171,8 +182,10 @@ type Admitter struct {
171182
}
172183

173184
func ValidateDeployment(w http.ResponseWriter, r *http.Request) {
185+
log.Println("Received /validate request")
174186
in, err := parseRequest(r)
175187
if err != nil {
188+
log.Printf("Error parsing admission request: %v", err)
176189
http.Error(w, err.Error(), http.StatusBadRequest)
177190
return
178191
}
@@ -182,13 +195,15 @@ func ValidateDeployment(w http.ResponseWriter, r *http.Request) {
182195
//}
183196
var dep appsv1.Deployment
184197
if err := json.Unmarshal(in.Request.Object.Raw, &dep); err != nil {
198+
log.Printf("Failed to unmarshal deployment: %v", err)
185199
http.Error(w, fmt.Sprintf("could not unmarshal deployment: %v", err), http.StatusBadRequest)
186200
return
187201
}
188202
images := []string{}
189203
for _, c := range dep.Spec.Template.Spec.Containers {
190204
images = append(images, c.Image)
191205
}
206+
log.Printf("Validating Deployment: %s, Images: %v", dep.Name, images)
192207
response := admissionv1.AdmissionReview{
193208
TypeMeta: in.TypeMeta,
194209
Response: &admissionv1.AdmissionResponse{
@@ -203,8 +218,12 @@ func ValidateDeployment(w http.ResponseWriter, r *http.Request) {
203218
jout, err := json.Marshal(response)
204219
if err != nil {
205220
e := fmt.Sprintf("could not parse admission response: %v", err)
221+
log.Println(e)
206222
http.Error(w, e, http.StatusInternalServerError)
207223
return
208224
}
209-
w.Write(jout)
225+
if _, err := w.Write(jout); err != nil {
226+
log.Printf("Failed to write response: %v", err)
227+
}
228+
log.Println("Admission response sent")
210229
}

manifest/deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ spec:
1414
spec:
1515
containers:
1616
- name: k8s-controller
17-
image: manzilrahul/k8s-custom-controller:latest
17+
image: manzilrahul/k8s-custom-controller:1.0.9
1818
volumeMounts:
1919
- name: webhook-certs
2020
mountPath: /certs # Your code expects "certs/tls.crt"

manifest/k8s-controller-webhook.yaml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ webhooks:
3535
admissionReviewVersions:
3636
- v1
3737
sideEffects: None
38-
timeoutSeconds: 30
3938
clientConfig:
4039
service:
4140
name: k8s-custom-controller-service
@@ -67,7 +66,7 @@ spec:
6766
spec:
6867
containers:
6968
- name: k8s-controller
70-
image: manzilrahul/k8s-custom-controller:1.0.15
69+
image: manzilrahul/k8s-custom-controller:1.0.9
7170
volumeMounts:
7271
- name: webhook-certs
7372
mountPath: /certs
@@ -77,8 +76,6 @@ spec:
7776
value: "/certs/tls.crt"
7877
- name: TLS_KEY_FILE
7978
value: "/certs/tls.key"
80-
# - name: BYPASS_CVE_DENIED
81-
# value: "yes" # yes or true (lowercase)
8279
volumes:
8380
- name: webhook-certs
8481
secret:

0 commit comments

Comments
 (0)