@@ -273,7 +273,115 @@ no longer be included in this metric.
273
273
274
274
###### Were upgrade and rollback tested? Was the upgrade->downgrade->upgrade path tested?
275
275
276
- Upgrade->downgrade->upgrade testing (manual or automated) will be required for Beta. If tested manually, the steps will be documented in this KEP.
276
+ Upgrade->downgrade->upgrade testing was done manually using the following steps:
277
+
278
+ Build and run the latest version of Kubernetes using Kind:
279
+ ```
280
+ $ kind build node-image
281
+ $ kind create cluster --image kindest/node:latest
282
+ ...
283
+ ...
284
+ $ kubectl get no
285
+ NAME STATUS ROLES AGE VERSION
286
+ kind-control-plane Ready control-plane 21m v1.26.0-beta.0.88+3cfa2453421710
287
+
288
+ ```
289
+
290
+ Deploy a webserver. In this test the following Deployment and Service was used:
291
+ ```
292
+ apiVersion: apps/v1
293
+ kind: Deployment
294
+ metadata:
295
+ name: agnhost-server
296
+ labels:
297
+ app: agnhost-server
298
+ spec:
299
+ replicas: 1
300
+ selector:
301
+ matchLabels:
302
+ app: agnhost-server
303
+ template:
304
+ metadata:
305
+ labels:
306
+ app: agnhost-server
307
+ spec:
308
+ containers:
309
+ - name: agnhost
310
+ image: registry.k8s.io/e2e-test-images/agnhost:2.40
311
+ args:
312
+ - serve-hostname
313
+ - --port=80
314
+ ports:
315
+ - containerPort: 80
316
+ ---
317
+ apiVersion: v1
318
+ kind: Service
319
+ metadata:
320
+ name: agnhost-server
321
+ labels:
322
+ app: agnhost-server
323
+ spec:
324
+ internalTrafficPolicy: Local
325
+ selector:
326
+ app: agnhost-server
327
+ ports:
328
+ - port: 80
329
+ protocol: TCP
330
+ ```
331
+
332
+ Before roll back, first verify that the ` ProxyTerminatingEndpoint ` feature is working. This is accomplished by
333
+ scaling down the ` agnhost-server ` deployment to 0 replicas, and checking that the server still accepts traffic
334
+ while it is terminating:
335
+
336
+ Retrieve the cluster IP:
337
+ ```
338
+ $ kubectl get svc agnhost-server
339
+ NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
340
+ agnhost-server ClusterIP 10.96.132.199 <none> 80/TCP 6m40s
341
+ ```
342
+
343
+ Send a request from inside the kind node container:
344
+ ```
345
+ $ docker exec -ti kind-control-plane bash
346
+ root@kind-control-plane:/# curl 10.96.132.199
347
+ agnhost-server-6d66cfc94f-q5msk
348
+ ```
349
+
350
+ Scale down ` agnhost-server ` deployment to 0 replicas, check the pod is terminating, and check that the
351
+ cluster IP works while the pod is terminating.
352
+ ```
353
+ $ kubectl scale deploy/agnhost-server --replicas=0
354
+ deployment.apps/agnhost-server scaled
355
+ $ kubectl get po
356
+ NAME READY STATUS RESTARTS AGE
357
+ agnhost-server-6d66cfc94f-x9kcw 1/1 Terminating 0 19s
358
+ $ docker exec -ti kind-control-plane bash
359
+ root@kind-control-plane:/# curl 10.96.132.199
360
+ agnhost-server-6d66cfc94f-x9kcw
361
+ ```
362
+
363
+ Rollback the feature by disabling the feature gate in kube-proxy:
364
+ ```
365
+ # edit kube-proxy ConfigMap and add `ProxyTerminatingEndpoints: false` to `featureGates` field
366
+ $ kubectl -n kube-system edit cm kube-proxy
367
+ configmap/kube-proxy edited
368
+ # restart kube-proxy
369
+ $ kubectl -n kube-system delete po -l k8s-app=kube-proxy
370
+ pod "kube-proxy-2ltb8" deleted
371
+
372
+ ```
373
+
374
+ Verify that traffic cannot be routed to terminating endpoints anymore:
375
+ ```
376
+ $ kubectl scale deploy/agnhost-server --replicas=0
377
+ deployment.apps/agnhost-server scaled
378
+ $ kubectl get po
379
+ NAME READY STATUS RESTARTS AGE
380
+ agnhost-server-6d66cfc94f-qmftt 1/1 Terminating 0 12s
381
+ $ docker exec -ti kind-control-plane bash
382
+ root@kind-control-plane:/# curl 10.96.132.199
383
+ curl: (7) Failed to connect to 10.96.132.199 port 80 after 0 ms: Connection refused
384
+ ```
277
385
278
386
###### Is the rollout accompanied by any deprecations and/or removals of features, APIs, fields of API types, flags, etc.?
279
387
0 commit comments