third_party/com_k8s_io_kubernetes: fix port allocator warning

This is the third(?) attempt to fix this, but this time its actually
fixed :smile:. I missed the store.Release call in the previous version,
which are used to detect leaks.

Closes monogon-dev/monogon#238

Change-Id: I145caf1fe7ea62fc726656d9461925a5708c5c78
Reviewed-on: https://review.monogon.dev/c/monogon/+/3931
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/third_party/com_k8s_io_kubernetes/k8s-reserve-metropolis-ports.patch b/third_party/com_k8s_io_kubernetes/k8s-reserve-metropolis-ports.patch
index 89cff48..2900867 100644
--- a/third_party/com_k8s_io_kubernetes/k8s-reserve-metropolis-ports.patch
+++ b/third_party/com_k8s_io_kubernetes/k8s-reserve-metropolis-ports.patch
@@ -1,44 +1,42 @@
-From b10b2922f0b4fb114b6b535df1ba9fca583c6cf2 Mon Sep 17 00:00:00 2001
+From 922898cb67ccedc6f0b67af9b398895d7fb55e56 Mon Sep 17 00:00:00 2001
 From: Tim Windelschmidt <tim@monogon.tech>
 Date: Sat, 9 Sep 2023 14:22:59 +0200
-Subject: [PATCH 6/6] reserve metropolis system ports
+Subject: [PATCH] reserve metropolis system ports
 
 ---
- .../service/portallocator/controller/repair.go    | 15 +++++++++++++++
- 1 file changed, 15 insertions(+)
+ .../core/service/portallocator/controller/repair.go  | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
 
 diff --git a/pkg/registry/core/service/portallocator/controller/repair.go b/pkg/registry/core/service/portallocator/controller/repair.go
-index fa870760490..0f67fe7eb9b 100644
+index 0ec22c55a54..f890b9c133e 100644
 --- a/pkg/registry/core/service/portallocator/controller/repair.go
 +++ b/pkg/registry/core/service/portallocator/controller/repair.go
 @@ -22,6 +22,8 @@ import (
  	"sync"
  	"time"
-
+ 
 +	"source.monogon.dev/metropolis/node"
 +
  	corev1 "k8s.io/api/core/v1"
  	"k8s.io/apimachinery/pkg/api/errors"
  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-@@ -133,6 +136,18 @@ func (c *Repair) doRunOnce() error {
- 		return fmt.Errorf("unable to refresh the port block: %v", err)
- 	}
-
-+	// pretend that metropolis system ports are in use by an actual service
-+	var metropolisService corev1.Service
-+	for _, p := range node.SystemPorts {
-+		metropolisService.Spec.Ports = append(metropolisService.Spec.Ports, corev1.ServicePort{
-+			Name:     p.String(),
-+			Protocol: corev1.ProtocolTCP,
-+			Port:     int32(p),
-+			NodePort: int32(p),
-+		})
-+	}
-+	list.Items = append(list.Items, metropolisService)
-+
- 	rebuilt, err := portallocator.NewInMemory(c.portRange)
+@@ -148,6 +150,16 @@ func (c *Repair) doRunOnce() error {
  	if err != nil {
  		return fmt.Errorf("unable to create port allocator: %v", err)
+ 	}
++
++	// pretend that metropolis system ports are in use by an actual service
++	for _, p := range node.SystemPorts {
++		if err := rebuilt.Allocate(int(p)); err != nil {
++			return fmt.Errorf("unable to allocate metropolis port: %v", err)
++		}
++		// remove it from the old set, so it doesn't appear leaked
++		stored.Release(int(p))
++	}
++
+ 	// Check every Service's ports, and rebuild the state as we think it should be.
+ 	for i := range list.Items {
+ 		svc := &list.Items[i]
 -- 
-2.41.0
+2.47.1