Repository: kubernetes
Issue: Cloud Controller Manger doesn't query cloud provider for node name, causing the node to be removed
Labels: kind/bug,area/cloudprovider,area/provider/openstack,lifecycle/frozen,area/provider/aws,sig/cloud-provider,needs-triage

<!-- Please use this template while reporting a bug and provide as much info as possible. Not doing so may result in your bug not being addressed in a timely manner. Thanks!-->


**What happened**:

- Launch a node with container linux `CoreOS-stable-1911.3.0` on aws, with customized ignition configs.
- The hostname turns to be `ip-10-3-18-1`, instead of the full private dns `ip-10-3-18-1.us-west-1.compute.internal` because `/etc/hostname` is not set.
- kubelet starts with `--cloud-provider=external` and skips [this code path](https://github.com/kubernetes/kubernetes/blob/v1.14.0-alpha.0/pkg/kubelet/kubelet.go#L382-L395). So it's not able to set the private dns as the node name.
- When CCM starts, it tries to read the node name from the node spec.
- CCM calls [`GetInstanceProviderID()`](https://github.com/kubernetes/kubernetes/blob/v1.14.0-alpha.0/pkg/controller/cloud/node_controller.go#L361) and fails.
- CCM calls [`getNodeAddressesByProviderIDOrName()`](https://github.com/kubernetes/kubernetes/blob/v1.14.0-alpha.0/pkg/controller/cloud/node_controller.go#L372) and fails too.
- CCM then removes the node.


**What you expected to happen**:

Since now the kubelet runs with `--cloud-provider=external`, no one is executing that code path to query the cloud provider to get the node name anymore.
However this code path still needs to be executed by someone to get the correct node name from the cloud provider for the node.
I think the CCM might need to query the cloud provider for the full node hostname in case the hostname given by the kubelet is not the full hostname (in AWS case).

**How to reproduce it (as minimally and precisely as possible)**:
Launch a container linux with non-empty ignition config in the user data, then the hostname won't be the full `private-dns`.
Then launch kubelet with `--cloud-provider=external` and CCM will reproduce the issue described above.

**Anything else we need to know?**:

**Environment**:
- Kubernetes version:
```Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2", GitCommit:"17c77c7898218073f14c8d573582e8d2313dc740", GitTreeState:"clean", BuildDate:"2018-10-30T21:39:16Z", GoVersion:"go1.11.1", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.2", GitCommit:"bb9ffb1654d4a729bb4cec18ff088eacc153c239", GitTreeState:"clean", BuildDate:"2018-08-07T23:08:19Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}```
- Cloud provider or hardware configuration: 
AWS
- OS 
```NAME="Container Linux by CoreOS"
ID=coreos
VERSION=1911.3.0
VERSION_ID=1911.3.0
BUILD_ID=2018-11-05-1815
PRETTY_NAME="Container Linux by CoreOS 1911.3.0 (Rhyolite)"
ANSI_COLOR="38;5;75"
HOME_URL="https://coreos.com/"
BUG_REPORT_URL="https://issues.coreos.com"
COREOS_BOARD="amd64-usr"
```
- Kernel:
`Linux ip-10-3-20-13 4.14.78-coreos #1 SMP Mon Nov 5 17:42:07 UTC 2018 x86_64 Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz GenuineIntel GNU/Linux`
- Install tools: 
Internal k8s installer tool based on terraform
- Others:

This issue can be mitigated by telling the igntion config to set the `/etc/hostname` to the private-dns (by `curl http://169.254.169.254/latest/meta-data/hostname`). Or just use the coreos-metadata service.


/cc @Quentin-M 

@kubernetes/sig-aws-misc 
@andrewsykim 

<!-- DO NOT EDIT BELOW THIS LINE -->
/kind bug