blob: ac201a8e653b53c7f39699a2ba15ae51c13f1c6d [file] [log] [blame]
diff --git a/pkg/registry/core/service/portallocator/allocator.go b/pkg/registry/core/service/portallocator/allocator.go
--- a/pkg/registry/core/service/portallocator/allocator.go (revision f66044f4361b9f1f96f0053dd46cb7dce5e990a8)
+++ b/pkg/registry/core/service/portallocator/allocator.go (revision bdd789d982712179c6a849ceed7f12e063b3fce3)
@@ -25,6 +25,7 @@
"k8s.io/kubernetes/pkg/registry/core/service/allocator"
"k8s.io/klog/v2"
+ "source.monogon.dev/metropolis/node"
)
// Interface manages the allocation of ports out of a range. Interface
@@ -70,6 +71,12 @@
}
var err error
a.alloc, err = allocatorFactory(max, rangeSpec)
+
+ for _, p := range node.SystemPorts {
+ // We ignore errors as these could only happen if the port we try to
+ // allocate is out of range, which we dont really care about.
+ _, _ = a.alloc.Allocate(int(p))
+ }
return a, err
}
diff --git a/pkg/registry/core/service/portallocator/controller/repair.go b/pkg/registry/core/service/portallocator/controller/repair.go
--- a/pkg/registry/core/service/portallocator/controller/repair.go (revision f66044f4361b9f1f96f0053dd46cb7dce5e990a8)
+++ b/pkg/registry/core/service/portallocator/controller/repair.go (revision bdd789d982712179c6a849ceed7f12e063b3fce3)
@@ -21,6 +21,8 @@
"fmt"
"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"
@@ -123,6 +126,18 @@
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)
if err != nil {
return fmt.Errorf("unable to create port allocator: %v", err)