diff --git a/cluster/gke/config-common.sh b/cluster/gke/config-common.sh index 468a341d7d4fe..67729c98c6015 100644 --- a/cluster/gke/config-common.sh +++ b/cluster/gke/config-common.sh @@ -28,6 +28,15 @@ NETWORK="${NETWORK:-default}" GCLOUD="${GCLOUD:-gcloud}" GCLOUD_CONFIG_DIR="${GCLOUD_CONFIG_DIR:-${HOME}/.config/gcloud/kubernetes}" +# Optional: Install cluster DNS. +# TODO: enable this when DNS_SERVER_IP can be easily bound. +ENABLE_CLUSTER_DNS=true +# DNS_SERVER_IP bound during kube-up using servicesIpv4Cidr +# and DNS_SERVER_OCTET. +DNS_SERVER_OCTET="10" +DNS_DOMAIN="kubernetes.local" +DNS_REPLICAS=1 + # This is a hack, but I keep setting this when I run commands manually, and # then things grossly fail during normal runs because cluster/kubecfg.sh and # cluster/kubectl.sh both use this if it's set. diff --git a/cluster/gke/util.sh b/cluster/gke/util.sh index d32b706527250..8aa6200962919 100644 --- a/cluster/gke/util.sh +++ b/cluster/gke/util.sh @@ -85,6 +85,8 @@ function verify-prereqs() { # CLUSTER_API_VERSION (optional) # NUM_MINIONS function kube-up() { + local service_prefix + echo "... in kube-up()" >&2 detect-project >&2 "${GCLOUD}" preview container clusters create "${CLUSTER_NAME}" \ @@ -92,6 +94,19 @@ function kube-up() { --project="${PROJECT}" \ --cluster-api-version="${CLUSTER_API_VERSION:-}" \ --num-nodes="${NUM_MINIONS}" + + # Compute DNS_SERVER_IP: This is looking for something like + # "servicesIpv4Cidr: 10.27.240.0/20" and returning "10.27.240" + # (which is presumptious of at least a /24 network mask, but easier + # to use in bash than the /20). We then tack on the DNS_SERVER_OCTET + # to mutate the global DNS_SERVER_IP. + if [[ "${ENABLE_CLUSTER_DNS}" == "true" ]]; then + service_prefix=$("${GCLOUD}" preview container clusters describe \ + --project="${PROJECT}" --zone="${ZONE}" "${CLUSTER_NAME}" | + egrep "^servicesIpv4Cidr:" | cut -f2 -d\ | cut -f1-3 -d.) + + DNS_SERVER_IP="${service_prefix}.${DNS_SERVER_OCTET}" + fi } # Called during cluster/kube-up.sh