rings: RingTwoPrefix()
Ring 2 is the service network shared by all kubernetes clusters. Signed-off-by: Alejandro Mery <amery@jpi.io>
This commit is contained in:
@@ -24,6 +24,9 @@ const (
|
||||
RingZeroBits = 16
|
||||
// RingOneBits indicates the size of the prefix on the ring 1 (lan) network.
|
||||
RingOneBits = 20
|
||||
// RingTwoBits indicates the size of the prefix on the ring 2 (services) network
|
||||
// of all kubernetes clusters.
|
||||
RingTwoBits = 20
|
||||
// RingThreeBits indicates the size of the prefix on the ring 3 (pods) network
|
||||
// of the kubernetes cluster of a region.
|
||||
RingThreeBits = 12
|
||||
@@ -131,6 +134,22 @@ func RingOneAddress(region RegionID, zone ZoneID, node NodeID) (addr netip.Addr,
|
||||
return addr, err
|
||||
}
|
||||
|
||||
// RingTwoPrefix represents the services of a cluster
|
||||
//
|
||||
// Ring 2 subnets are of the form `10.(region_id).0.0/20`,
|
||||
// using the address space that would belong to the ring 3
|
||||
// region_id 0.
|
||||
func RingTwoPrefix(region RegionID) (cidr netip.Prefix, err error) {
|
||||
switch {
|
||||
case !region.Valid():
|
||||
err = ErrOutOfRange(region, "region")
|
||||
default:
|
||||
addr := unsafeRingTwoAddress(region, 0)
|
||||
cidr = netip.PrefixFrom(addr, RingTwoBits)
|
||||
}
|
||||
return cidr, err
|
||||
}
|
||||
|
||||
// RingThreePrefix returns the subnet corresponding to
|
||||
// the pods of a cluster.
|
||||
//
|
||||
@@ -165,6 +184,15 @@ func unsafeRingOneAddress(region RegionID, zone ZoneID, node NodeID) netip.Addr
|
||||
return AddrFrom4(10, r, z<<4+n1, n0)
|
||||
}
|
||||
|
||||
func unsafeRingTwoAddress(region RegionID, n uint) netip.Addr {
|
||||
r := uint(region)
|
||||
|
||||
n1 := n >> 8
|
||||
n0 := n >> 0
|
||||
|
||||
return AddrFrom4(10, r, n1, n0)
|
||||
}
|
||||
|
||||
func unsafeRingThreeAddress(region RegionID, n uint) netip.Addr {
|
||||
r := uint(region)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user