Tim Windelschmidt | 0300077 | 2023-07-03 02:19:28 +0200 | [diff] [blame] | 1 | diff --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 Windelschmidt | e95007b | 2023-07-17 19:05:30 +0200 | [diff] [blame] | 3 | +++ b/pkg/registry/core/service/portallocator/allocator.go (revision bdd789d982712179c6a849ceed7f12e063b3fce3) |
Tim Windelschmidt | 0300077 | 2023-07-03 02:19:28 +0200 | [diff] [blame] | 4 | @@ -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 Windelschmidt | e95007b | 2023-07-17 19:05:30 +0200 | [diff] [blame] | 25 | diff --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) |