blob: ac201a8e653b53c7f39699a2ba15ae51c13f1c6d [file] [log] [blame]
Tim Windelschmidt03000772023-07-03 02:19:28 +02001diff --git a/pkg/registry/core/service/portallocator/allocator.go b/pkg/registry/core/service/portallocator/allocator.go
2--- a/pkg/registry/core/service/portallocator/allocator.go (revision f66044f4361b9f1f96f0053dd46cb7dce5e990a8)
Tim Windelschmidte95007b2023-07-17 19:05:30 +02003+++ b/pkg/registry/core/service/portallocator/allocator.go (revision bdd789d982712179c6a849ceed7f12e063b3fce3)
Tim Windelschmidt03000772023-07-03 02:19:28 +02004@@ -25,6 +25,7 @@
5 "k8s.io/kubernetes/pkg/registry/core/service/allocator"
6
7 "k8s.io/klog/v2"
8+ "source.monogon.dev/metropolis/node"
9 )
10
11 // Interface manages the allocation of ports out of a range. Interface
12@@ -70,6 +71,12 @@
13 }
14 var err error
15 a.alloc, err = allocatorFactory(max, rangeSpec)
16+
17+ for _, p := range node.SystemPorts {
18+ // We ignore errors as these could only happen if the port we try to
19+ // allocate is out of range, which we dont really care about.
20+ _, _ = a.alloc.Allocate(int(p))
21+ }
22 return a, err
23 }
24
Tim Windelschmidte95007b2023-07-17 19:05:30 +020025diff --git a/pkg/registry/core/service/portallocator/controller/repair.go b/pkg/registry/core/service/portallocator/controller/repair.go
26--- a/pkg/registry/core/service/portallocator/controller/repair.go (revision f66044f4361b9f1f96f0053dd46cb7dce5e990a8)
27+++ b/pkg/registry/core/service/portallocator/controller/repair.go (revision bdd789d982712179c6a849ceed7f12e063b3fce3)
28@@ -21,6 +21,8 @@
29 "fmt"
30 "time"
31
32+ "source.monogon.dev/metropolis/node"
33+
34 corev1 "k8s.io/api/core/v1"
35 "k8s.io/apimachinery/pkg/api/errors"
36 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
37@@ -123,6 +126,18 @@
38 return fmt.Errorf("unable to refresh the port block: %v", err)
39 }
40
41+ // pretend that metropolis system ports are in use by an actual service
42+ var metropolisService corev1.Service
43+ for _, p := range node.SystemPorts {
44+ metropolisService.Spec.Ports = append(metropolisService.Spec.Ports, corev1.ServicePort{
45+ Name: p.String(),
46+ Protocol: corev1.ProtocolTCP,
47+ Port: int32(p),
48+ NodePort: int32(p),
49+ })
50+ }
51+ list.Items = append(list.Items, metropolisService)
52+
53 rebuilt, err := portallocator.NewInMemory(c.portRange)
54 if err != nil {
55 return fmt.Errorf("unable to create port allocator: %v", err)