Browse code

add all possible ips to the serving certs

deads2k authored on 2015/05/06 22:02:42
Showing 2 changed files
... ...
@@ -416,6 +416,18 @@ func (args MasterArgs) GetServerCertHostnames() (util.StringSet, error) {
416 416
 	}
417 417
 
418 418
 	allHostnames := util.NewStringSet("localhost", "127.0.0.1", "openshift.default.local", "kubernetes.default.local", "kubernetes-ro.default.local", masterAddr.Host, masterPublicAddr.Host, assetPublicAddr.Host)
419
+
420
+	listenIP := net.ParseIP(args.ListenArg.ListenAddr.Host)
421
+	// add the IPs that might be used based on the ListenAddr.
422
+	if listenIP != nil && listenIP.IsUnspecified() {
423
+		allAddresses, _ := cmdutil.AllLocalIP4()
424
+		for _, ip := range allAddresses {
425
+			allHostnames.Insert(ip.String())
426
+		}
427
+	} else {
428
+		allHostnames.Insert(args.ListenArg.ListenAddr.Host)
429
+	}
430
+
419 431
 	certHostnames := util.StringSet{}
420 432
 	for hostname := range allHostnames {
421 433
 		if host, _, err := net.SplitHostPort(hostname); err == nil {
... ...
@@ -32,3 +32,30 @@ func DefaultLocalIP4() (net.IP, error) {
32 32
 	}
33 33
 	return nil, ErrorNoDefaultIP
34 34
 }
35
+
36
+// AllLocalIP4 returns all the IPv4 addresses that this host can be reached
37
+// on.
38
+func AllLocalIP4() ([]net.IP, error) {
39
+	devices, err := net.Interfaces()
40
+	if err != nil {
41
+		return nil, err
42
+	}
43
+
44
+	ret := []net.IP{}
45
+	for _, dev := range devices {
46
+		if dev.Flags&net.FlagUp != 0 {
47
+			addrs, err := dev.Addrs()
48
+			if err != nil {
49
+				continue
50
+			}
51
+			for i := range addrs {
52
+				if ip, ok := addrs[i].(*net.IPNet); ok {
53
+					if ip.IP.To4() != nil {
54
+						ret = append(ret, ip.IP)
55
+					}
56
+				}
57
+			}
58
+		}
59
+	}
60
+	return ret, nil
61
+}