87 lines
1.9 KiB
Bash
87 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
NAMESPACE="$(kubectl config view --minify --output 'jsonpath={..namespace}')"
|
|
HOST_PORT=10001
|
|
|
|
print_usage() {
|
|
echo "kube-forward-all - create port-forwards for all pods in the given namespace"
|
|
echo " "
|
|
echo "kube-forward-all [options]"
|
|
echo " "
|
|
echo "Options:"
|
|
echo "-h, --help show this help text"
|
|
echo "-n, --namespace the namespace to launch the pod in"
|
|
echo "-p, --port the port to start at (and increment from for each service) (default: 10001)"
|
|
}
|
|
|
|
while test $# -gt 0; do
|
|
case "$1" in
|
|
-n|--namespace)
|
|
shift
|
|
NAMESPACE=$1
|
|
shift
|
|
;;
|
|
-p|--port)
|
|
shift
|
|
HOST_PORT=$1
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
print_usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Get all services first
|
|
IFS=$'\n'
|
|
SERVICES=( $(kubectl get service --namespace ${NAMESPACE} --no-headers -o json | jq '[.items[] | select(.metadata.annotations."kube-forward" != "false")] | (.[] | .metadata.name + "\t" + ([.spec.ports[].port] | join(",")))' -r | column -t) )
|
|
unset IFS
|
|
|
|
# Track the port-forwards we need to clean up
|
|
TO_KILL=()
|
|
|
|
cleanup() {
|
|
echo "\nClosing connections..."
|
|
for pid in "${TO_KILL[@]}"
|
|
do
|
|
(kill -2 $pid) &> /dev/null
|
|
done
|
|
|
|
trap - INT TERM
|
|
}
|
|
trap 'cleanup' INT TERM
|
|
|
|
echo "Forwarding..."
|
|
|
|
for s in "${SERVICES[@]}"
|
|
do
|
|
SERVICE=( $(echo $s) )
|
|
NAME=${SERVICE[0]}
|
|
PORT=${SERVICE[1]}
|
|
PORTS=($(echo $PORT | tr "," "\n"))
|
|
for PORT in "${PORTS[@]}"
|
|
do
|
|
(kubectl port-forward --namespace ${NAMESPACE} svc/$NAME $HOST_PORT:$PORT &>/dev/null) &
|
|
BG_PID=$!
|
|
|
|
if `curl -s -o /dev/null --retry 5 --retry-delay 0 --retry-connrefused -m 3 http://localhost:$HOST_PORT`
|
|
then
|
|
echo "\e[1m$NAME:$PORT\e[0m ➡ \e[34mhttp://localhost:$HOST_PORT\e[0m"
|
|
TO_KILL+=($BG_PID)
|
|
((HOST_PORT=HOST_PORT+1))
|
|
else
|
|
(kill -2 $BG_PID) &> /dev/null
|
|
fi
|
|
done
|
|
done
|
|
|
|
echo "\n\e[2m(Use [Ctl + C] to exit)"
|
|
cat
|
|
cleanup
|