diff --git a/cluster/gce/gci/configure-helper.sh b/cluster/gce/gci/configure-helper.sh index 79f3432616b..9bb96e1c438 100644 --- a/cluster/gce/gci/configure-helper.sh +++ b/cluster/gce/gci/configure-helper.sh @@ -892,8 +892,9 @@ function create-kubelet-kubeconfig() { echo "Must provide API server address to create Kubelet kubeconfig file!" exit 1 fi - echo "Creating kubelet kubeconfig file" - cat </var/lib/kubelet/bootstrap-kubeconfig + if [[ "${CREATE_BOOTSTRAP_KUBECONFIG:-true}" == "true" ]]; then + echo "Creating kubelet bootstrap-kubeconfig file" + cat </var/lib/kubelet/bootstrap-kubeconfig apiVersion: v1 kind: Config users: @@ -913,6 +914,13 @@ contexts: name: service-account-context current-context: service-account-context EOF + elif [[ "${FETCH_BOOTSTRAP_KUBECONFIG:-false}" == "true" ]]; then + echo "Fetching kubelet bootstrap-kubeconfig file from metadata" + get-metadata-value "instance/attributes/bootstrap-kubeconfig" >/var/lib/kubelet/bootstrap-kubeconfig + else + echo "Fetching kubelet kubeconfig file from metadata" + get-metadata-value "instance/attributes/kubeconfig" >/var/lib/kubelet/kubeconfig + fi } # Uses KUBELET_CA_CERT (falling back to CA_CERT), KUBELET_CERT, and KUBELET_KEY @@ -1612,7 +1620,7 @@ function start-kube-apiserver { params+=" --feature-gates=${FEATURE_GATES}" fi if [[ -n "${PROJECT_ID:-}" && -n "${TOKEN_URL:-}" && -n "${TOKEN_BODY:-}" && -n "${NODE_NETWORK:-}" ]]; then - local -r vm_external_ip=$(curl --retry 5 --retry-delay 3 ${CURL_RETRY_CONNREFUSED} --fail --silent -H 'Metadata-Flavor: Google' "http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip") + local -r vm_external_ip=$(get-metadata-value "instance/network-interfaces/0/access-configs/0/external-ip") if [[ -n "${PROXY_SSH_USER:-}" ]]; then params+=" --advertise-address=${vm_external_ip}" params+=" --ssh-user=${PROXY_SSH_USER}" @@ -2008,6 +2016,20 @@ function download-extra-addons { "${curl_cmd[@]}" } +# A function that fetches a GCE metadata value and echoes it out. +# +# $1: URL path after /computeMetadata/v1/ (without heading slash). +function get-metadata-value { + curl \ + --retry 5 \ + --retry-delay 3 \ + ${CURL_RETRY_CONNREFUSED} \ + --fail \ + --silent \ + -H 'Metadata-Flavor: Google' \ + "http://metadata/computeMetadata/v1/${1}" +} + # A helper function for copying manifests and setting dir/files # permissions. # @@ -2590,4 +2612,4 @@ if [[ "$#" -eq 1 && "${1}" == "--source-only" ]]; then : else main "${@}" -fi \ No newline at end of file +fi