@@ -59,11 +59,18 @@ func CollectAllIPs() (addresses []net.IP, err error) {
59
59
// FirstPublicAddress return the first found non-local IPv4 address that's not part of pod network
60
60
// if any interface does not have any IPv4 address then return the first found non-local IPv6 address
61
61
func FirstPublicAddress () (string , error ) {
62
+ addr , err := GetPublicAddresses ()
63
+ return addr [0 ], err
64
+ }
65
+
66
+ // GetPublicAddresses returns a list of all public network addresses on a node.
67
+ // The slice contains the ipv4 addresses followed by the ipv6 addresses
68
+ func GetPublicAddresses () ([]string , error ) {
62
69
ifs , err := net .Interfaces ()
63
70
if err != nil {
64
- return "127.0.0.1" , fmt .Errorf ("failed to list network interfaces: %w" , err )
71
+ return [] string { "127.0.0.1" } , fmt .Errorf ("failed to list network interfaces: %w" , err )
65
72
}
66
- ipv6addr := ""
73
+ publicAddresses := [] string {}
67
74
for _ , i := range ifs {
68
75
switch {
69
76
// Skip calico CNI interface
@@ -91,18 +98,23 @@ func FirstPublicAddress() (string, error) {
91
98
// check the address type and skip if loopback
92
99
if ipnet , ok := a .(* net.IPNet ); ok && ! ipnet .IP .IsLoopback () {
93
100
if ipnet .IP .To4 () != nil {
94
- return ipnet .IP .String (), nil
101
+ publicAddresses = append ( publicAddresses , ipnet .IP .String ())
95
102
}
96
- if ipnet .IP .To16 () != nil && ipv6addr == "" {
97
- ipv6addr = ipnet .IP .String ()
103
+ }
104
+ }
105
+ for _ , a := range addresses {
106
+ // check the address type and skip if loopback
107
+ if ipnet , ok := a .(* net.IPNet ); ok && ! ipnet .IP .IsLoopback () {
108
+ if ipnet .IP .To16 () != nil {
109
+ publicAddresses = append (publicAddresses , ipnet .IP .String ())
98
110
}
99
111
}
100
112
}
101
113
}
102
- if ipv6addr != "" {
103
- return ipv6addr , nil
114
+ if len ( publicAddresses ) > 0 {
115
+ return publicAddresses , nil
104
116
}
105
117
106
118
logrus .Warn ("failed to find any non-local, non podnetwork addresses on host, defaulting public address to 127.0.0.1" )
107
- return "127.0.0.1" , nil
119
+ return [] string { "127.0.0.1" } , nil
108
120
}
0 commit comments