From 32d62c57860f3b41d58b4810ce447f0fbc53550d Mon Sep 17 00:00:00 2001 From: Brad Davidson Date: Mon, 30 Jan 2023 21:05:07 +0000 Subject: [PATCH] Use default address family when adding kubernetes service address to SAN list Signed-off-by: Brad Davidson --- pkg/cli/server/server.go | 9 ++++----- pkg/util/net.go | 13 +++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/pkg/cli/server/server.go b/pkg/cli/server/server.go index f560e366b4..c9f5ca2e06 100644 --- a/pkg/cli/server/server.go +++ b/pkg/cli/server/server.go @@ -204,18 +204,17 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont } if serverConfig.ControlConfig.PrivateIP == "" && len(cmds.AgentConfig.NodeIP) != 0 { - // ignoring the error here is fine since etcd will fall back to the interface's IPv4 address - serverConfig.ControlConfig.PrivateIP, _, _ = util.GetFirstString(cmds.AgentConfig.NodeIP) + serverConfig.ControlConfig.PrivateIP = util.GetFirstValidIPString(cmds.AgentConfig.NodeIP) } // if not set, try setting advertise-ip from agent node-external-ip if serverConfig.ControlConfig.AdvertiseIP == "" && len(cmds.AgentConfig.NodeExternalIP) != 0 { - serverConfig.ControlConfig.AdvertiseIP, _, _ = util.GetFirstString(cmds.AgentConfig.NodeExternalIP) + serverConfig.ControlConfig.AdvertiseIP = util.GetFirstValidIPString(cmds.AgentConfig.NodeExternalIP) } // if not set, try setting advertise-ip from agent node-ip if serverConfig.ControlConfig.AdvertiseIP == "" && len(cmds.AgentConfig.NodeIP) != 0 { - serverConfig.ControlConfig.AdvertiseIP, _, _ = util.GetFirstString(cmds.AgentConfig.NodeIP) + serverConfig.ControlConfig.AdvertiseIP = util.GetFirstValidIPString(cmds.AgentConfig.NodeIP) } // if we ended up with any advertise-ips, ensure they're added to the SAN list; @@ -297,7 +296,7 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont } // the apiserver service does not yet support dual-stack operation - _, apiServerServiceIP, err := controlplane.ServiceIPRange(*serverConfig.ControlConfig.ServiceIPRange) + _, apiServerServiceIP, err := controlplane.ServiceIPRange(*serverConfig.ControlConfig.ServiceIPRanges[0]) if err != nil { return err } diff --git a/pkg/util/net.go b/pkg/util/net.go index 6e9c2963db..4eda2c1190 100644 --- a/pkg/util/net.go +++ b/pkg/util/net.go @@ -189,6 +189,19 @@ func ParseStringSliceToIPs(s cli.StringSlice) ([]net.IP, error) { return ips, nil } +// GetFirstValidIPString returns the first valid address from a list of IP address strings, +// without preference for IP family. If no address are found, an empty string is returned. +func GetFirstValidIPString(s cli.StringSlice) string { + for _, unparsedIP := range s { + for _, v := range strings.Split(unparsedIP, ",") { + if ip := net.ParseIP(v); ip != nil { + return v + } + } + } + return "" +} + // GetFirstIP returns the first IPv4 address from the list of IP addresses. // If no IPv4 addresses are found, returns the first IPv6 address // if neither of IPv4 or IPv6 are found an error is raised.