Change:
When we add nodes to an existing cluster, we need to reuse the existing configuration. In particular, we need to extract the kubelet cert & key, otherwise we get a cert error connecting to the master.
WIP fix in

Discussion:
echo "Using master: $KUBE_MASTER (external IP: $KUBE_MASTER_IP)" } <ins> # Reads kube-env metadata from master # # Assumed vars: #   KUBE_MASTER_IP #   AWS_SSH_KEY #   SSH_USER function get-master-env() { ssh -oStrictHostKeyChecking=no -i "${AWS_SSH_KEY}" ${SSH_USER}@${KUBE_MASTER_IP} sudo cat /etc/kubernetes/kube_env.yaml } </ins> function query-running-minions () { local query=$1

function find-master-pd { local name=${MASTER_NAME}-pd if [[ -z "${MASTER_DISK_ID}" ]]; then <ins> local zone_filter="Name=availability-zone,Values=${ZONE}" if [[ "${KUBE_USE_EXISTING_MASTER:-}" == "true" ]]; then # If we're reusing an existing master, it is likely to be in another zone # If running multizone, your cluster must be uniquely named across zones zone_filter="" fi </ins> MASTER_DISK_ID=`$AWS_CMD describe-volumes  <del> --filters Name=availability-zone,Values=${ZONE}  </del> <ins> --filters ${zone_filter}  </ins> Name=tag:Name,Values=${name}  Name=tag:KubernetesCluster,Values=${CLUSTER_ID}  --query Volumes[].VolumeId`

# KUBE_USE_EXISTING_MASTER is used to add minions to an existing master if [[ "${KUBE_USE_EXISTING_MASTER:-}" == "true" ]]; then <del> # Detect existing master </del> detect-master <ins> parse-master-env </ins> # Start minions start-minions

KUBECFG_CERT_BASE64=$(cat "${CERT_DIR}/pki/issued/kubecfg.crt" | base64 | tr -d 'rn') KUBECFG_KEY_BASE64=$(cat "${CERT_DIR}/pki/private/kubecfg.key" | base64 | tr -d 'rn') } <ins> # # Using provided master env, extracts value from provided key. # # Args: # $1 master env (kube-env of master; result of calling get-master-env) # $2 env key to use function get-env-val() { local match=`(echo "${1}" | grep ${2}) || echo ""` if [[ -z ${match} ]]; then echo "" fi echo ${match} | cut -d : -f 2 | cut -d ' -f 2 } # Load the master env by calling get-master-env, and extract important values function parse-master-env() { # Get required master env vars local master_env=$(get-master-env) KUBELET_TOKEN=$(get-env-val "${master_env}" "KUBELET_TOKEN") KUBE_PROXY_TOKEN=$(get-env-val "${master_env}" "KUBE_PROXY_TOKEN") CA_CERT_BASE64=$(get-env-val "${master_env}" "CA_CERT") EXTRA_DOCKER_OPTS=$(get-env-val "${master_env}" "EXTRA_DOCKER_OPTS") KUBELET_CERT_BASE64=$(get-env-val "${master_env}" "KUBELET_CERT") KUBELET_KEY_BASE64=$(get-env-val "${master_env}" "KUBELET_KEY") } </ins>

echo "Using master: $KUBE_MASTER (external IP: $KUBE_MASTER_IP)" } <ins> # Reads kube-env metadata from master # # Assumed vars: #   KUBE_MASTER #   PROJECT #   ZONE function get-master-env() { # TODO(zmerlynn): Make this more reliable with retries. gcloud compute --project ${PROJECT} ssh --zone ${ZONE} ${KUBE_MASTER} --command  "curl --fail --silent -H 'Metadata-Flavor: Google'  'http://metadata/computeMetadata/v1/instance/attributes/kube-env'" 2>/dev/null } </ins> # Robustly try to create a static ip. # $1: The name of the ip to create # $2: The name of the region to create the ip in.

set_num_migs if [[ ${KUBE_USE_EXISTING_MASTER:-} == "true" ]]; then <ins> parse-master-env </ins> create-nodes create-autoscaler else