From e1c2e6b4b1e3c47a56333d50bc5449076a8d4e15 Mon Sep 17 00:00:00 2001 From: Max Forbes Date: Wed, 29 Apr 2015 15:39:07 -0700 Subject: [PATCH] Make nodes report their external IP rather than the master's. --- pkg/cloudprovider/gce/gce.go | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/pkg/cloudprovider/gce/gce.go b/pkg/cloudprovider/gce/gce.go index 65bd0f84c6d..a0826ae7fee 100644 --- a/pkg/cloudprovider/gce/gce.go +++ b/pkg/cloudprovider/gce/gce.go @@ -42,8 +42,6 @@ import ( "google.golang.org/cloud/compute/metadata" ) -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 { service *compute.Service @@ -414,27 +412,28 @@ func (gce *GCECloud) getInstanceByName(name string) (*compute.Instance, error) { // NodeAddresses is an implementation of Instances.NodeAddresses. func (gce *GCECloud) NodeAddresses(instance string) ([]api.NodeAddress, error) { - externalIP, err := gce.metadataAccess(EXTERNAL_IP_METADATA_URL) + externalIP, err := gce.getExternalIP(instance) if err != nil { - return nil, err + return nil, fmt.Errorf("couldn't get external IP for instance %s: %v", instance, err) } - nodeAddresses := []api.NodeAddress{{Type: api.NodeExternalIP, Address: externalIP}} - if legacyHostAddress, err := gce.getLegacyHostAddress(instance); err == nil { - nodeAddresses = append(nodeAddresses, *legacyHostAddress) - } - return nodeAddresses, nil + + return []api.NodeAddress{ + {Type: api.NodeExternalIP, Address: externalIP}, + // TODO(mbforbes): Remove NodeLegacyHostIP once v1beta1 is removed. + {Type: api.NodeLegacyHostIP, Address: externalIP}, + }, nil } -func (gce *GCECloud) getLegacyHostAddress(instance string) (*api.NodeAddress, error) { +func (gce *GCECloud) getExternalIP(instance string) (string, error) { inst, err := gce.getInstanceByName(instance) if err != nil { - return nil, err + return "", err } ip := net.ParseIP(inst.NetworkInterfaces[0].AccessConfigs[0].NatIP) if ip == nil { - return nil, fmt.Errorf("invalid network IP: %s", inst.NetworkInterfaces[0].AccessConfigs[0].NatIP) + return "", fmt.Errorf("invalid network IP: %s", inst.NetworkInterfaces[0].AccessConfigs[0].NatIP) } - return &api.NodeAddress{Type: api.NodeLegacyHostIP, Address: ip.String()}, nil + return ip.String(), nil } // ExternalID returns the cloud provider ID of the specified instance.