Skip to content

Commit 67ee03a

Browse files
authored
Merge pull request kubernetes#76440 from mm4tt/gce_private_clusters
Ability to set up Private GCE Test Clusters with NAT.
2 parents 0da72a1 + 2efea76 commit 67ee03a

File tree

3 files changed

+55
-4
lines changed

3 files changed

+55
-4
lines changed

cluster/gce/config-default.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,3 +489,6 @@ fi
489489
# Taint Windows nodes by default to prevent Linux workloads from being
490490
# scheduled onto them.
491491
WINDOWS_NODE_TAINTS="${WINDOWS_NODE_TAINTS:-node.kubernetes.io/os=win1809:NoSchedule}"
492+
493+
# Whether to set up a private GCE cluster, i.e. a cluster where nodes have only private IPs.
494+
GCE_PRIVATE_CLUSTER="${KUBE_GCE_PRIVATE_CLUSTER:-false}"

cluster/gce/config-test.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,3 +511,6 @@ fi
511511
# Taint Windows nodes by default to prevent Linux workloads from being
512512
# scheduled onto them.
513513
WINDOWS_NODE_TAINTS="${WINDOWS_NODE_TAINTS:-node.kubernetes.io/os=win1809:NoSchedule}"
514+
515+
# Whether to set up a private GCE cluster, i.e. a cluster where nodes have only private IPs.
516+
GCE_PRIVATE_CLUSTER="${KUBE_GCE_PRIVATE_CLUSTER:-false}"

cluster/gce/util.sh

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1892,8 +1892,11 @@ function make-gcloud-network-argument() {
18921892
if [[ "${enable_ip_alias}" == 'true' ]]; then
18931893
ret="--network-interface"
18941894
ret="${ret} network=${networkURL}"
1895-
# If address is omitted, instance will not receive an external IP.
1896-
ret="${ret},address=${address:-}"
1895+
if [[ "${address:-}" == "no-address" ]]; then
1896+
ret="${ret},no-address"
1897+
else
1898+
ret="${ret},address=${address:-}"
1899+
fi
18971900
ret="${ret},subnet=${subnetURL}"
18981901
ret="${ret},aliases=pods-default:${alias_size}"
18991902
ret="${ret} --no-can-ip-forward"
@@ -1905,7 +1908,7 @@ function make-gcloud-network-argument() {
19051908
fi
19061909

19071910
ret="${ret} --can-ip-forward"
1908-
if [[ -n ${address:-} ]]; then
1911+
if [[ -n ${address:-} ]] && [[ "$address" != "no-address" ]]; then
19091912
ret="${ret} --address ${address}"
19101913
fi
19111914
fi
@@ -2010,13 +2013,17 @@ function create-node-template() {
20102013
fi
20112014
fi
20122015

2016+
local address=""
2017+
if [[ ${GCE_PRIVATE_CLUSTER:-} == "true" ]]; then
2018+
address="no-address"
2019+
fi
20132020

20142021
local network=$(make-gcloud-network-argument \
20152022
"${NETWORK_PROJECT}" \
20162023
"${REGION}" \
20172024
"${NETWORK}" \
20182025
"${SUBNETWORK:-}" \
2019-
"" \
2026+
"${address}" \
20202027
"${ENABLE_IP_ALIASES:-}" \
20212028
"${IP_ALIAS_SIZE:-}")
20222029

@@ -2113,6 +2120,7 @@ function kube-up() {
21132120
create-network
21142121
create-subnetworks
21152122
detect-subnetworks
2123+
create-cloud-nat-router
21162124
write-cluster-location
21172125
write-cluster-name
21182126
create-autoscaler-config
@@ -2302,6 +2310,26 @@ function detect-subnetworks() {
23022310
echo "${color_red}Could not find subnetwork with region ${REGION}, network ${NETWORK}, and project ${NETWORK_PROJECT}"
23032311
}
23042312

2313+
# Sets up Cloud NAT for the network.
2314+
# Assumed vars:
2315+
# NETWORK_PROJECT
2316+
# REGION
2317+
# NETWORK
2318+
function create-cloud-nat-router() {
2319+
if [[ ${GCE_PRIVATE_CLUSTER:-} == "true" ]]; then
2320+
gcloud compute routers create "$NETWORK-nat-router" \
2321+
--project $NETWORK_PROJECT \
2322+
--region $REGION \
2323+
--network $NETWORK
2324+
gcloud compute routers nats create "$NETWORK-nat-config" \
2325+
--project $NETWORK_PROJECT \
2326+
--router-region $REGION \
2327+
--router "$NETWORK-nat-router" \
2328+
--nat-all-subnet-ip-ranges \
2329+
--auto-allocate-nat-external-ips
2330+
fi
2331+
}
2332+
23052333
function delete-all-firewall-rules() {
23062334
if fws=$(gcloud compute firewall-rules list --project "${NETWORK_PROJECT}" --filter="network=${NETWORK}" --format="value(name)"); then
23072335
echo "Deleting firewall rules remaining in network ${NETWORK}: ${fws}"
@@ -2333,6 +2361,15 @@ function delete-network() {
23332361
fi
23342362
}
23352363

2364+
function delete-cloud-nat-router() {
2365+
if [[ ${GCE_PRIVATE_CLUSTER:-} == "true" ]]; then
2366+
if [[ -n $(gcloud compute routers describe --project "${NETWORK_PROJECT}" --region "${REGION}" "${NETWORK}-nat-router" --format='value(name)' 2>/dev/null || true) ]]; then
2367+
echo "Deleting Cloud NAT router..."
2368+
gcloud compute routers delete --project "${NETWORK_PROJECT}" --region "${REGION}" --quiet "${NETWORK}-nat-router"
2369+
fi
2370+
fi
2371+
}
2372+
23362373
function delete-subnetworks() {
23372374
# If running in custom mode network we need to delete subnets manually.
23382375
mode="$(check-network-mode)"
@@ -3209,6 +3246,7 @@ function kube-down() {
32093246
"${NETWORK}-default-internal" # Pre-1.5 clusters
32103247

32113248
if [[ "${KUBE_DELETE_NETWORK}" == "true" ]]; then
3249+
delete-cloud-nat-router
32123250
# Delete all remaining firewall rules in the network.
32133251
delete-all-firewall-rules || true
32143252
delete-subnetworks || true
@@ -3404,6 +3442,13 @@ function check-resources() {
34043442
return 1
34053443
fi
34063444

3445+
if [[ ${GCE_PRIVATE_CLUSTER:-} == "true" ]]; then
3446+
if gcloud compute routers describe --project "${NETWORK_PROJECT}" --region "${REGION}" "${NETWORK}-nat-router" &>/dev/null; then
3447+
KUBE_RESOURCE_FOUND="Cloud NAT router"
3448+
return 1
3449+
fi
3450+
fi
3451+
34073452
# No resources found.
34083453
return 0
34093454
}

0 commit comments

Comments
 (0)