Skip to content

Instantly share code, notes, and snippets.

@jclosure
Created October 11, 2020 20:35
Show Gist options
  • Save jclosure/62758aaa22cac87ef24662de212e0e94 to your computer and use it in GitHub Desktop.
Save jclosure/62758aaa22cac87ef24662de212e0e94 to your computer and use it in GitHub Desktop.
Automated deployment of pod and proxy ssh and other ports without load-balancer
#!/bin/bash
# Scripted deployment of a pod w/ forward ports using ssh tunnels via $JUMP_BOX.
JUMP_BOX=root@my-bastion-host
NAME="my-container-prefix-name"
CONTAINER=`kubectl -n admin get pods | grep $NAME | head -1 | awk '{print $1}'`
if [ -n "$CONTAINER" ]; then
echo "pod for $NAME exists: $CONTAINER"
else
echo "pod for $NAME does not exist. running..."
kubectl -n admin run $NAME --image=ubuntu --port 8001 -- sleep infinity
CONTAINER=`kubectl -n admin get pods | grep $NAME | head -1 | awk '{print $1}'`
sleep 5
kubectl -n admin exec $CONTAINER -- bash -c "shopt -s expand_aliases; source /root/.bashrc; apt-get update; apt-get install -y openssh-server vim; mkdir -p /root/.ssh"
kubectl -n admin cp ~/.ssh/id_rsa.pub $CONTAINER:/root/.ssh/
fi
EC2_NODE=$(kubectl -n admin get pods -o wide | grep $NAME | head -1 | awk '{print $7}')
IP=$(echo "$EC2_NODE" | sed 's/.*-\([0-9]\{1,3\}-[0-9]\{1,3\}-[0-9]\{1,3\}-[0-9]\{1,3\}\).*/\1/' | sed 's/-/\./g')
echo "IP Address: $IP"
if ! echo "$(kubectl -n admin get services)" | grep -q $NAME-2002; then
kubectl -n admin expose deployment $NAME --port 2002 --target-port 22 --name $NAME-2002 --external-ip $IP
fi
if ! echo "$(kubectl -n admin get services)" | grep -q $NAME-8001; then
kubectl -n admin expose deployment $NAME --port 8001 --target-port 8001 --name $NAME-8001 --external-ip $IP
fi
alias $NAME-2002-up="ssh -M -S ~/.ssh/$NAME-2002.sock -fNT -L 2002:$IP:2002 $JUMP_BOX"
alias $NAME-2002-check="ssh -S ~/.ssh/$NAME-2002.sock -O check $JUMP_BOX"
alias $NAME-2002-down="ssh -S ~/.ssh/$NAME-2002.sock -O exit $JUMP_BOX"
alias $NAME-8001-up="ssh -M -S ~/.ssh/$NAME-8001.sock -fNT -L 8001:$IP:8001 $JUMP_BOX"
alias $NAME-8001-check="ssh -S ~/.ssh/$NAME-8001.sock -O check $JUMP_BOX"
alias $NAME-8001-down="ssh -S ~/.ssh/$NAME-8001.sock -O exit $JUMP_BOX"
alias connect-$NAME-shell="kubectl -n admin exec -it $CONTAINER bash"
shopt -s expand_aliases
# tunnel ports to localhost if not already up
if ! echo "$(eval $NAME-2002-check 2>&1)" | grep -q running; then
echo "starting tunnel for port 2002"
eval $NAME-2002-up
else
echo "tunnel for port 2002 already up"
fi
if ! echo "$(eval $NAME-8001-check 2>&1)" | grep -q running; then
echo "starting tunnel for port 8001"
eval $NAME-8001-up
else
echo "tunnel for port 8001 already up"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment