From f72fa6792467d1a8ff9e7da2ae7a614c9068d4d4 Mon Sep 17 00:00:00 2001 From: Brian Grant Date: Wed, 3 Jun 2015 18:19:22 -0700 Subject: [PATCH] Revert "Use Node IP Address instead of Node.Name in minion.ResourceLocation." --- cmd/kubelet/app/server.go | 5 ++--- pkg/cloudprovider/gce/gce.go | 16 ++++++---------- pkg/kubelet/kubelet.go | 17 +++++++++++++++-- pkg/registry/minion/rest.go | 12 ++++-------- pkg/util/{node => }/node.go | 23 +---------------------- 5 files changed, 28 insertions(+), 45 deletions(-) rename pkg/util/{node => }/node.go (56%) diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index afc57c2e88b..66d1fe0e7b2 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -48,7 +48,6 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/master/ports" "github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/GoogleCloudPlatform/kubernetes/pkg/util/mount" - nodeutil "github.com/GoogleCloudPlatform/kubernetes/pkg/util/node" "github.com/GoogleCloudPlatform/kubernetes/pkg/volume" "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider" @@ -288,7 +287,7 @@ func (s *KubeletServer) Run(_ []string) error { if s.TLSCertFile == "" && s.TLSPrivateKeyFile == "" { s.TLSCertFile = path.Join(s.CertDirectory, "kubelet.crt") s.TLSPrivateKeyFile = path.Join(s.CertDirectory, "kubelet.key") - if err := util.GenerateSelfSignedCert(nodeutil.GetHostname(s.HostnameOverride), s.TLSCertFile, s.TLSPrivateKeyFile); err != nil { + if err := util.GenerateSelfSignedCert(util.GetHostname(s.HostnameOverride), s.TLSCertFile, s.TLSPrivateKeyFile); err != nil { return fmt.Errorf("unable to generate self signed cert: %v", err) } glog.V(4).Infof("Using self-signed cert (%s, %s)", s.TLSCertFile, s.TLSPrivateKeyFile) @@ -545,7 +544,7 @@ func SimpleKubelet(client *client.Client, // 3 Standalone 'kubernetes' binary // Eventually, #2 will be replaced with instances of #3 func RunKubelet(kcfg *KubeletConfig, builder KubeletBuilder) error { - kcfg.Hostname = nodeutil.GetHostname(kcfg.HostnameOverride) + kcfg.Hostname = util.GetHostname(kcfg.HostnameOverride) eventBroadcaster := record.NewBroadcaster() kcfg.Recorder = eventBroadcaster.NewRecorder(api.EventSource{Component: "kubelet", Host: kcfg.Hostname}) eventBroadcaster.StartLogging(glog.Infof) diff --git a/pkg/cloudprovider/gce/gce.go b/pkg/cloudprovider/gce/gce.go index 029f266e4d7..50ac1fbcc2c 100644 --- a/pkg/cloudprovider/gce/gce.go +++ b/pkg/cloudprovider/gce/gce.go @@ -42,11 +42,9 @@ import ( "google.golang.org/cloud/compute/metadata" ) -const ( - ProviderName = "gce" - EXTERNAL_IP_METADATA_URL = "http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip" - INTERNAL_IP_METADATA_URL = "http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/ip" -) +const ProviderName = "gce" + +const EXTERNAL_IP_METADATA_URL = "http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip" // GCECloud is an implementation of Interface, TCPLoadBalancer and Instances for Google Compute Engine. type GCECloud struct { @@ -478,17 +476,15 @@ func (gce *GCECloud) getInstanceByName(name string) (*compute.Instance, error) { // NodeAddresses is an implementation of Instances.NodeAddresses. func (gce *GCECloud) NodeAddresses(_ string) ([]api.NodeAddress, error) { - internalIP, err := gce.metadataAccess(INTERNAL_IP_METADATA_URL) - if err != nil { - return nil, fmt.Errorf("couldn't get internal IP: %v", err) - } externalIP, err := gce.metadataAccess(EXTERNAL_IP_METADATA_URL) if err != nil { return nil, fmt.Errorf("couldn't get external IP: %v", err) } + return []api.NodeAddress{ - {Type: api.NodeInternalIP, Address: internalIP}, {Type: api.NodeExternalIP, Address: externalIP}, + // TODO(mbforbes): Remove NodeLegacyHostIP once v1beta1 is removed. + {Type: api.NodeLegacyHostIP, Address: externalIP}, }, nil } diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index a3822572191..3d9fc1221c1 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -54,7 +54,6 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/util" utilErrors "github.com/GoogleCloudPlatform/kubernetes/pkg/util/errors" "github.com/GoogleCloudPlatform/kubernetes/pkg/util/mount" - nodeutil "github.com/GoogleCloudPlatform/kubernetes/pkg/util/node" "github.com/GoogleCloudPlatform/kubernetes/pkg/version" "github.com/GoogleCloudPlatform/kubernetes/pkg/volume" "github.com/GoogleCloudPlatform/kubernetes/pkg/watch" @@ -1724,7 +1723,21 @@ func (kl *Kubelet) GetHostIP() (net.IP, error) { if err != nil { return nil, fmt.Errorf("cannot get node: %v", err) } - return nodeutil.GetNodeHostIP(node) + addresses := node.Status.Addresses + addressMap := make(map[api.NodeAddressType][]api.NodeAddress) + for i := range addresses { + addressMap[addresses[i].Type] = append(addressMap[addresses[i].Type], addresses[i]) + } + if addresses, ok := addressMap[api.NodeLegacyHostIP]; ok { + return net.ParseIP(addresses[0].Address), nil + } + if addresses, ok := addressMap[api.NodeInternalIP]; ok { + return net.ParseIP(addresses[0].Address), nil + } + if addresses, ok := addressMap[api.NodeExternalIP]; ok { + return net.ParseIP(addresses[0].Address), nil + } + return nil, fmt.Errorf("host IP unknown; known addresses: %v", addresses) } // GetPods returns all pods bound to the kubelet and their spec, and the mirror diff --git a/pkg/registry/minion/rest.go b/pkg/registry/minion/rest.go index de06a9ed772..782770ef7c9 100644 --- a/pkg/registry/minion/rest.go +++ b/pkg/registry/minion/rest.go @@ -33,7 +33,6 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" "github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/GoogleCloudPlatform/kubernetes/pkg/util/fielderrors" - nodeutil "github.com/GoogleCloudPlatform/kubernetes/pkg/util/node" ) // nodeStrategy implements behavior for nodes @@ -142,16 +141,13 @@ func ResourceLocation(getter ResourceGetter, connection client.ConnectionInfoGet return nil, nil, err } node := nodeObj.(*api.Node) - hostIP, err := nodeutil.GetNodeHostIP(node) - if err != nil { - return nil, nil, err - } + host := node.Name // TODO: use node's IP, don't expect the name to resolve. if portReq != "" { - return &url.URL{Host: net.JoinHostPort(hostIP.String(), portReq)}, nil, nil + return &url.URL{Host: net.JoinHostPort(host, portReq)}, nil, nil } - scheme, port, transport, err := connection.GetConnectionInfo(hostIP.String()) + scheme, port, transport, err := connection.GetConnectionInfo(host) if err != nil { return nil, nil, err } @@ -159,7 +155,7 @@ func ResourceLocation(getter ResourceGetter, connection client.ConnectionInfoGet return &url.URL{ Scheme: scheme, Host: net.JoinHostPort( - hostIP.String(), + host, strconv.FormatUint(uint64(port), 10), ), }, diff --git a/pkg/util/node/node.go b/pkg/util/node.go similarity index 56% rename from pkg/util/node/node.go rename to pkg/util/node.go index 19608015e3b..1607ed94b13 100644 --- a/pkg/util/node/node.go +++ b/pkg/util/node.go @@ -14,15 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -package node +package util import ( - "fmt" - "net" "os/exec" "strings" - "github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/golang/glog" ) @@ -37,21 +34,3 @@ func GetHostname(hostnameOverride string) string { } return strings.ToLower(strings.TrimSpace(hostname)) } - -// GetNodeHostIP returns the provided node's IP, based on the priority: -// 1. NodeInternalIP -// 2. NodeExternalIP -func GetNodeHostIP(node *api.Node) (net.IP, error) { - addresses := node.Status.Addresses - addressMap := make(map[api.NodeAddressType][]api.NodeAddress) - for i := range addresses { - addressMap[addresses[i].Type] = append(addressMap[addresses[i].Type], addresses[i]) - } - if addresses, ok := addressMap[api.NodeInternalIP]; ok { - return net.ParseIP(addresses[0].Address), nil - } - if addresses, ok := addressMap[api.NodeExternalIP]; ok { - return net.ParseIP(addresses[0].Address), nil - } - return nil, fmt.Errorf("host IP unknown; known addresses: %v", addresses) -}