Skip to content

Commit e494b07

Browse files
authored
Merge pull request kubernetes#89543 from bartekzurawski/fix-kube-up-gce-private-restart
Set ip alias route on kubernetes-master during booting
2 parents 47daccb + 3e4744c commit e494b07

File tree

4 files changed

+50
-1
lines changed

4 files changed

+50
-1
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/usr/bin/env bash
2+
3+
# Copyright 2016 The Kubernetes Authors.
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License");
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
17+
METADATA_ENDPOINT="http://metadata.google.internal/computeMetadata/v1/instance/attributes/kube-master-internal-ip"
18+
METADATA_HEADER="Metadata-Flavor: Google"
19+
ip=$(curl -s --fail ${METADATA_ENDPOINT} -H "${METADATA_HEADER}")
20+
if [ -n "$ip" ];
21+
then
22+
# Check if route is already set if not set it
23+
if ! sudo ip route show table local | grep -q "$(echo "$ip" | cut -d'/' -f 1)";
24+
then
25+
sudo ip route add to local "${ip}/32" dev "$(ip route | grep default | awk '{print $5}')"
26+
fi
27+
fi

cluster/gce/gci/master-helper.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ function create-master-instance-internal() {
157157
metadata="${metadata},gci-docker-version=${KUBE_TEMP}/gci-docker-version.txt"
158158
metadata="${metadata},kube-master-certs=${KUBE_TEMP}/kube-master-certs.yaml"
159159
metadata="${metadata},cluster-location=${KUBE_TEMP}/cluster-location.txt"
160+
metadata="${metadata},kube-master-internal-route=${KUBE_ROOT}/cluster/gce/gci/kube-master-internal-route.sh"
160161
metadata="${metadata},${MASTER_EXTRA_METADATA}"
161162

162163
local disk="name=${master_name}-pd"

cluster/gce/gci/master.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,24 @@ write_files:
2929
[Install]
3030
WantedBy=kubernetes.target
3131
32+
- path: /etc/systemd/system/kube-master-internal-route.service
33+
permissions: 0644
34+
owner: root
35+
content: |
36+
[Unit]
37+
Description=Configure kube internal route
38+
After=kube-master-installation.service
39+
40+
[Service]
41+
Type=oneshot
42+
RemainAfterExit=yes
43+
ExecStartPre=/usr/bin/curl --fail --retry 5 --retry-delay 3 --silent --show-error -H "X-Google-Metadata-Request: True" -o /home/kubernetes/bin/kube-master-internal-route.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/kube-master-internal-route
44+
ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/kube-master-internal-route.sh
45+
ExecStart=/home/kubernetes/bin/kube-master-internal-route.sh
46+
47+
[Install]
48+
WantedBy=kubernetes.target
49+
3250
- path: /etc/systemd/system/kube-master-configuration.service
3351
permissions: 0644
3452
owner: root
@@ -125,6 +143,7 @@ write_files:
125143
runcmd:
126144
- systemctl daemon-reload
127145
- systemctl enable kube-master-installation.service
146+
- systemctl enable kube-master-internal-route.service
128147
- systemctl enable kube-master-configuration.service
129148
- systemctl enable kube-container-runtime-monitor.service
130149
- systemctl enable kubelet-monitor.service

cluster/gce/util.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2947,7 +2947,8 @@ function attach-internal-master-ip() {
29472947
echo "Setting ${name}'s aliases to '${aliases}' (added ${ip})"
29482948
# Attach ${ip} to ${name}
29492949
gcloud compute instances network-interfaces update "${name}" --project "${PROJECT}" --zone "${zone}" --aliases="${aliases}"
2950-
run-gcloud-command "${name}" "${zone}" 'sudo ip route add to local '${ip}'/32 dev $(ip route | grep default | awk '\''{print $5}'\'')' || true
2950+
gcloud compute instances add-metadata "${name}" --zone "${zone}" --metadata=kube-master-internal-ip="${ip}"
2951+
run-gcloud-command "${name}" "${zone}" 'sudo /bin/bash /home/kubernetes/bin/kube-master-internal-route.sh' || true
29512952
return $?
29522953
}
29532954

@@ -2965,6 +2966,7 @@ function detach-internal-master-ip() {
29652966
echo "Setting ${name}'s aliases to '${aliases}' (removed ${ip})"
29662967
# Detach ${MASTER_NAME}-internal-ip from ${name}
29672968
gcloud compute instances network-interfaces update "${name}" --project "${PROJECT}" --zone "${zone}" --aliases="${aliases}"
2969+
gcloud compute instances remove-metadata "${name}" --zone "${zone}" --keys=kube-master-internal-ip
29682970
run-gcloud-command "${name}" "${zone}" 'sudo ip route del to local '${ip}'/32 dev $(ip route | grep default | awk '\''{print $5}'\'')' || true
29692971
return $?
29702972
}

0 commit comments

Comments
 (0)