Created
October 11, 2020 20:35
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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