Skip to content

Commit 44c9dd4

Browse files
CharlieR-o-o-tSiarhei Rasiukevich
authored and
Siarhei Rasiukevich
committed
fix: set correct IP address type for machine, kubernetes-sigs#947
Signed-off-by: Siarhei Rasiukevich <[email protected]>
1 parent 82542dc commit 44c9dd4

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

pkg/services/vimmachine.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,13 @@ func (v *VimMachineService) reconcileNetwork(ctx context.Context, vimMachineCtx
289289
addresses := vm.Status.Addresses
290290
machineAddresses := make([]clusterv1.MachineAddress, 0, len(addresses))
291291
for _, addr := range addresses {
292+
var addrType = clusterv1.MachineInternalIP
293+
if !infrautilv1.IsInternalIP(addr) {
294+
addrType = clusterv1.MachineExternalIP
295+
}
296+
292297
machineAddresses = append(machineAddresses, clusterv1.MachineAddress{
293-
Type: clusterv1.MachineExternalIP,
298+
Type: addrType,
294299
Address: addr,
295300
})
296301
}

pkg/util/machines.go

+38
Original file line numberDiff line numberDiff line change
@@ -258,3 +258,41 @@ func MachinesAsString(machines []*clusterv1.Machine) string {
258258
}
259259
return message
260260
}
261+
262+
// IsInternalIP checks if the IP is private/internal
263+
func IsInternalIP(ip string) bool {
264+
netIP := net.ParseIP(ip)
265+
if netIP == nil {
266+
return false
267+
}
268+
269+
privateBlocks := []*net.IPNet{
270+
{IP: net.IPv4(10, 0, 0, 0), Mask: net.CIDRMask(8, 32)}, // 10.0.0.0/8
271+
{IP: net.IPv4(172, 16, 0, 0), Mask: net.CIDRMask(12, 32)}, // 172.16.0.0/12
272+
{IP: net.IPv4(192, 168, 0, 0), Mask: net.CIDRMask(16, 32)}, // 192.168.0.0/16
273+
{IP: net.IPv4(127, 0, 0, 1), Mask: net.CIDRMask(8, 32)}, // 127.0.0.0/8 (loopback)
274+
{IP: net.IPv4(169, 254, 0, 0), Mask: net.CIDRMask(16, 32)}, // 169.254.0.0/16 (link-local)
275+
}
276+
277+
// Check IPv4 private ranges
278+
for _, block := range privateBlocks {
279+
if block.Contains(netIP) {
280+
return true
281+
}
282+
}
283+
284+
// Check IPv6 private ranges
285+
privateIPv6Blocks := []*net.IPNet{
286+
{IP: net.ParseIP("::1"), Mask: net.CIDRMask(128, 128)}, // Loopback
287+
{IP: net.ParseIP("fc00::"), Mask: net.CIDRMask(7, 128)}, // Unique Local Addresses (ULA)
288+
{IP: net.ParseIP("fe80::"), Mask: net.CIDRMask(10, 128)}, // Link-local
289+
}
290+
291+
for _, block := range privateIPv6Blocks {
292+
if block.Contains(netIP) {
293+
return true
294+
}
295+
}
296+
297+
return false
298+
}

0 commit comments

Comments
 (0)