// getClusterNodesIP returns the IP address of each node in the kubernetes cluster func getClusterNodesIP(kubeClient *unversioned.Client, nodeSelector string) (clusterNodes []string) { listOpts := api.ListOptions{} if nodeSelector != "" { label, err := labels.Parse(nodeSelector) if err != nil { glog.Fatalf("'%v' is not a valid selector: %v", nodeSelector, err) } listOpts.LabelSelector = label } nodes, err := kubeClient.Nodes().List(listOpts) if err != nil { glog.Fatalf("Error getting running nodes: %v", err) } for _, nodo := range nodes.Items { nodeIP, err := node.GetNodeHostIP(&nodo) if err == nil { clusterNodes = append(clusterNodes, nodeIP.String()) } } sort.Strings(clusterNodes) return }
// getHostIPAnyway attempts to return the host IP from kubelet's nodeInfo, or the initialNodeStatus func (kl *Kubelet) getHostIPAnyWay() (net.IP, error) { node, err := kl.getNodeAnyWay() if err != nil { return nil, err } return nodeutil.GetNodeHostIP(node) }
// Returns host IP or nil in case of error. func (kl *Kubelet) GetHostIP() (net.IP, error) { node, err := kl.GetNode() if err != nil { return nil, fmt.Errorf("cannot get node: %v", err) } return nodeutil.GetNodeHostIP(node) }
// ResourceLocation returns an URL and transport which one can use to send traffic for the specified node. func ResourceLocation(getter ResourceGetter, connection client.ConnectionInfoGetter, proxyTransport http.RoundTripper, ctx api.Context, id string) (*url.URL, http.RoundTripper, error) { schemeReq, name, portReq, valid := util.SplitSchemeNamePort(id) if !valid { return nil, nil, errors.NewBadRequest(fmt.Sprintf("invalid node request %q", id)) } nodeObj, err := getter.Get(ctx, name) if err != nil { return nil, nil, err } node := nodeObj.(*api.Node) hostIP, err := nodeutil.GetNodeHostIP(node) if err != nil { return nil, nil, err } host := hostIP.String() if portReq == "" || strconv.Itoa(ports.KubeletPort) == portReq { // Ignore requested scheme, use scheme provided by GetConnectionInfo scheme, port, kubeletTransport, err := connection.GetConnectionInfo(host) if err != nil { return nil, nil, err } return &url.URL{ Scheme: scheme, Host: net.JoinHostPort( host, strconv.FormatUint(uint64(port), 10), ), }, kubeletTransport, nil } return &url.URL{Scheme: schemeReq, Host: net.JoinHostPort(host, portReq)}, proxyTransport, nil }
func (r *REST) GetConnectionInfo(ctx api.Context, nodeName types.NodeName) (string, string, uint, http.RoundTripper, error) { scheme, port, transport, err := r.connection.GetRawConnectionInfo(ctx, nodeName) if err != nil { return "", "", 0, nil, err } // We probably shouldn't care about context when looking for Node object. obj, err := r.Get(ctx, string(nodeName)) if err != nil { return "", "", 0, nil, err } node, ok := obj.(*api.Node) if !ok { return "", "", 0, nil, fmt.Errorf("Unexpected object type: %#v", node) } hostIP, err := nodeutil.GetNodeHostIP(node) if err != nil { return "", "", 0, nil, err } host := hostIP.String() daemonPort := int(node.Status.DaemonEndpoints.KubeletEndpoint.Port) if daemonPort > 0 { return scheme, host, uint(daemonPort), transport, nil } return scheme, host, port, transport, nil }
// Returns host IP or nil in case of error. func (nm *realNodeManager) GetHostIP() (net.IP, error) { if nm.client == nil { return nil, errors.New("unable to get node entry because apiserver client is nil") } node, err := nm.GetNode() if err != nil { return nil, fmt.Errorf("cannot get node: %v", err) } return nodeutil.GetNodeHostIP(node) }
func getNodeIP(client clientset.Interface, hostname string) net.IP { var nodeIP net.IP node, err := client.Core().Nodes().Get(hostname) if err != nil { glog.Warningf("Failed to retrieve node info: %v", err) return nil } nodeIP, err = nodeutil.GetNodeHostIP(node) if err != nil { glog.Warningf("Failed to retrieve node IP: %v", err) return nil } return nodeIP }
// getNodeIP is copied from the upstream proxy config to retrieve the IP of a node. func getNodeIP(client *kclient.Client, hostname string) net.IP { var nodeIP net.IP node, err := client.Nodes().Get(hostname) if err != nil { glog.Warningf("Failed to retrieve node info: %v", err) return nil } nodeIP, err = utilnode.GetNodeHostIP(node) if err != nil { glog.Warningf("Failed to retrieve node IP: %v", err) return nil } return nodeIP }
// getClusterNodesIP returns the IP address of each node in the kubernetes cluster func getClusterNodesIP(kubeClient *unversioned.Client) (clusterNodes []string) { nodes, err := kubeClient.Nodes().List(api.ListOptions{}) if err != nil { glog.Fatalf("Error getting running nodes: %v", err) } for _, nodo := range nodes.Items { nodeIP, err := node.GetNodeHostIP(&nodo) if err == nil { clusterNodes = append(clusterNodes, nodeIP.String()) } } sort.Strings(clusterNodes) return }
// ResourceLocation returns an URL and transport which one can use to send traffic for the specified node. func ResourceLocation(getter ResourceGetter, connection client.ConnectionInfoGetter, proxyTransport http.RoundTripper, ctx api.Context, id string) (*url.URL, http.RoundTripper, error) { schemeReq, name, portReq, valid := utilnet.SplitSchemeNamePort(id) if !valid { return nil, nil, errors.NewBadRequest(fmt.Sprintf("invalid node request %q", id)) } nodeObj, err := getter.Get(ctx, name) if err != nil { return nil, nil, err } node := nodeObj.(*api.Node) hostIP, err := nodeutil.GetNodeHostIP(node) if err != nil { return nil, nil, err } host := hostIP.String() // We check if we want to get a default Kubelet's transport. It happens if either: // - no port is specified in request (Kubelet's port is default), // - we're using Port stored as a DaemonEndpoint and requested port is a Kubelet's port stored in the DaemonEndpoint, // - there's no information in the API about DaemonEnpoint (legacy cluster) and requested port is equal to ports.KubeletPort (cluster-wide config) kubeletPort := node.Status.DaemonEndpoints.KubeletEndpoint.Port if kubeletPort == 0 { kubeletPort = ports.KubeletPort } if portReq == "" || strconv.Itoa(int(kubeletPort)) == portReq { scheme, port, kubeletTransport, err := connection.GetConnectionInfo(ctx, node.Name) if err != nil { return nil, nil, err } return &url.URL{ Scheme: scheme, Host: net.JoinHostPort( host, strconv.FormatUint(uint64(port), 10), ), }, kubeletTransport, nil } return &url.URL{Scheme: schemeReq, Host: net.JoinHostPort(host, portReq)}, proxyTransport, nil }