From 3eab4f07aa97a8aeeaaef55b1b7bbc82e2a3374a Mon Sep 17 00:00:00 2001 From: Kinara Shah Date: Mon, 10 Jan 2022 09:38:12 -0800 Subject: [PATCH] set hostname for kube-proxy if cloud provider is aws kubelet uses nodename set by aws cloud provider, but kube-proxy doesn't. kube-proxy expects the hostname to be the same as the nodename, otherwise it doesn't set the right iptables rules. Getting nodename from instance metadata and passing it via hostname-override so kube-proxy gets the expected hostname. This requires fix from RKE that removes hostname-override flag from kube-proxy command args for aws cloud provider so it can be set here in rke-tools. --- entrypoint.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/entrypoint.sh b/entrypoint.sh index 42adf941..068dc894 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -12,6 +12,13 @@ if echo ${@} | grep -q "cloud-provider=azure"; then fi fi +if [ "$1" = "kube-proxy" ]; then + if echo ${@} | grep -v "hostname-override"; then + hostname=$(curl "http://169.254.169.254/latest/meta-data/hostname") + set ${@} --hostname-override=$hostname + fi +fi + if [ "$1" = "kubelet" ]; then DOCKER_ROOT=$(DOCKER_API_VERSION=1.24 /opt/rke-tools/bin/docker info 2>&1 | grep -i 'docker root dir' | cut -f2 -d:) DOCKER_DIRS=$(find -O1 $DOCKER_ROOT -maxdepth 1) # used to exclude mounts that are subdirectories of $DOCKER_ROOT to ensure we don't unmount mounted filesystems on sub directories