// GetServerCertHostnames returns the set of hostnames and IP addresses a serving certificate for node on this host might need to be valid for. func (args NodeArgs) GetServerCertHostnames() (sets.String, error) { allHostnames := sets.NewString(args.NodeName) listenIP := net.ParseIP(args.ListenArg.ListenAddr.Host) // add the IPs that might be used based on the ListenAddr. if listenIP != nil && listenIP.IsUnspecified() { allAddresses, _ := cmdutil.AllLocalIP4() for _, ip := range allAddresses { allHostnames.Insert(ip.String()) } } else { allHostnames.Insert(args.ListenArg.ListenAddr.Host) } certHostnames := sets.String{} for hostname := range allHostnames { if host, _, err := net.SplitHostPort(hostname); err == nil { // add the hostname without the port certHostnames.Insert(host) } else { // add the originally specified hostname certHostnames.Insert(hostname) } } return certHostnames, nil }
// GetServerCertHostnames returns the set of hostnames that any serving certificate for master needs to be valid for. func (args MasterArgs) GetServerCertHostnames() (sets.String, error) { masterAddr, err := args.GetMasterAddress() if err != nil { return nil, err } masterPublicAddr, err := args.GetMasterPublicAddress() if err != nil { return nil, err } assetPublicAddr, err := args.GetAssetPublicAddress() if err != nil { return nil, err } allHostnames := sets.NewString( "localhost", "127.0.0.1", "openshift.default.svc.cluster.local", "openshift.default.svc", "openshift.default", "openshift", "kubernetes.default.svc.cluster.local", "kubernetes.default.svc", "kubernetes.default", "kubernetes", masterAddr.Host, masterPublicAddr.Host, assetPublicAddr.Host) if _, ipnet, err := net.ParseCIDR(args.NetworkArgs.ServiceNetworkCIDR); err == nil { // CIDR is ignored if it is invalid, other code handles validation. if firstServiceIP, err := ipallocator.GetIndexedIP(ipnet, 1); err == nil { allHostnames.Insert(firstServiceIP.String()) } } listenIP := net.ParseIP(args.ListenArg.ListenAddr.Host) // add the IPs that might be used based on the ListenAddr. if listenIP != nil && listenIP.IsUnspecified() { allAddresses, _ := cmdutil.AllLocalIP4() for _, ip := range allAddresses { allHostnames.Insert(ip.String()) } } else { allHostnames.Insert(args.ListenArg.ListenAddr.Host) } certHostnames := sets.String{} for hostname := range allHostnames { if host, _, err := net.SplitHostPort(hostname); err == nil { // add the hostname without the port certHostnames.Insert(host) } else { // add the originally specified hostname certHostnames.Insert(hostname) } } return certHostnames, nil }
// GetServerCertHostnames returns the set of hostnames that any serving certificate for master needs to be valid for. func (args MasterArgs) GetServerCertHostnames() (util.StringSet, error) { masterAddr, err := args.GetMasterAddress() if err != nil { return nil, err } masterPublicAddr, err := args.GetMasterPublicAddress() if err != nil { return nil, err } assetPublicAddr, err := args.GetAssetPublicAddress() if err != nil { return nil, err } allHostnames := util.NewStringSet( "localhost", "127.0.0.1", "openshift.default.svc.cluster.local", "openshift.default.svc", "openshift.default", "openshift", "kubernetes.default.svc.cluster.local", "kubernetes.default.svc", "kubernetes.default", "kubernetes", masterAddr.Host, masterPublicAddr.Host, assetPublicAddr.Host) listenIP := net.ParseIP(args.ListenArg.ListenAddr.Host) // add the IPs that might be used based on the ListenAddr. if listenIP != nil && listenIP.IsUnspecified() { allAddresses, _ := cmdutil.AllLocalIP4() for _, ip := range allAddresses { allHostnames.Insert(ip.String()) } } else { allHostnames.Insert(args.ListenArg.ListenAddr.Host) } certHostnames := util.StringSet{} for hostname := range allHostnames { if host, _, err := net.SplitHostPort(hostname); err == nil { // add the hostname without the port certHostnames.Insert(host) } else { // add the originally specified hostname certHostnames.Insert(hostname) } } return certHostnames, nil }
func (c *ClientStartConfig) determineIP(out io.Writer) (string, error) { if ip := net.ParseIP(c.PublicHostname); ip != nil && !ip.IsUnspecified() { fmt.Fprintf(out, "Using public hostname IP %s as the host IP\n", ip) return ip.String(), nil } // If using port-forwarding, find a local IP that can be used to communicate with the // Origin container if c.PortForwarding { ip4, err := cmdutil.DefaultLocalIP4() if err != nil { return "", errors.NewError("cannot determine local IP address").WithCause(err) } glog.V(2).Infof("Testing local IP %s", ip4.String()) err = c.OpenShiftHelper().TestForwardedIP(ip4.String()) if err == nil { return ip4.String(), nil } glog.V(2).Infof("Failed to use %s: %v", ip4.String(), err) otherIPs, err := cmdutil.AllLocalIP4() if err != nil { return "", errors.NewError("cannot find local IP addresses to test").WithCause(err) } for _, ip := range otherIPs { if ip.String() == ip4.String() { continue } err = c.OpenShiftHelper().TestForwardedIP(ip.String()) if err == nil { return ip.String(), nil } glog.V(2).Infof("Failed to use %s: %v", ip.String(), err) } return "", errors.NewError("could not determine local IP address to use").WithCause(err) } if len(c.DockerMachine) > 0 { glog.V(2).Infof("Using docker machine %q to determine server IP", c.DockerMachine) ip, err := dockermachine.IP(c.DockerMachine) if err != nil { return "", errors.NewError("Could not determine IP address").WithCause(err).WithSolution("Ensure that docker-machine is functional.") } fmt.Fprintf(out, "Using docker-machine IP %s as the host IP\n", ip) return ip, nil } // First, try to get the host from the DOCKER_HOST if communicating via tcp var err error ip := c.DockerHelper().HostIP() if ip != "" { glog.V(2).Infof("Testing Docker host IP (%s)", ip) if err = c.OpenShiftHelper().TestIP(ip); err == nil { return ip, nil } } glog.V(2).Infof("Cannot use the Docker host IP(%s): %v", ip, err) // Next, use the the --print-ip output from openshift ip, err = c.OpenShiftHelper().ServerIP() if err == nil { glog.V(2).Infof("Testing openshift --print-ip (%s)", ip) if err = c.OpenShiftHelper().TestIP(ip); err == nil { return ip, nil } glog.V(2).Infof("OpenShift server ip test failed: %v", err) } glog.V(2).Infof("Cannot use OpenShift IP: %v", err) // Next, try other IPs on Docker host ips, err := c.OpenShiftHelper().OtherIPs(ip) if err != nil { return "", err } for i := range ips { glog.V(2).Infof("Testing additional IP (%s)", ip) if err = c.OpenShiftHelper().TestIP(ips[i]); err == nil { return ip, nil } glog.V(2).Infof("OpenShift additional ip test failed: %v", err) } return "", errors.NewError("cannot determine an IP to use for your server.") }