/
ingress-controller-deploy.sh
executable file
·104 lines (89 loc) · 3.34 KB
/
ingress-controller-deploy.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/env bash
# Script to deploy an nginx ingress controller using Helm3 to either EKS/GKE or AKS.
#set -oe pipefail
# Helm chart version. Note that chart versions 4.x and greater
# require kubernetes >= 1.19 and ingress v1 support.
# The version below supports k8s 1.18 and ingress v1beta1
# To see the available chart versions, run
# helm search repo ingress-nginx --versions
VERSION="3.39.0"
IP_OPTS=""
usage() {
echo -e "\nUsage: $0 [-g|--gke <ip-address>] [-e|--eks] [-a|--aks] [-d|delete] [-h|--help]\n"
echo -e "\t -g, --gke: - deploy to GKE. Optionally provide IP address (default: dynamically generate IP address)"
echo -e "\t -e, --eks: - deploy to EKS"
echo -e "\t -a, --aks: - deploy to AKS"
echo -e "\t -d, --delete: - delete ingress controller"
echo -e "\t -h, --help: - display options"
exit 2
}
# Delete Helm chart
delete() {
helm uninstall ingress-nginx --namespace nginx || true
exit 1
}
# If an argument is provided, ensure that it is either delete or an IP address for GKE
if [[ $# > 0 ]]; then
case $1 in
-d|--delete)
echo "Deleting Ingress Controller Helm chart."
delete
;;
-g|--gke)
if [[ "$#" == 2 ]]; then
# Check IP address format and don't continue if not valid.
[[ ! "$2" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] && echo -e "\nERROR: Can't detect a valid IP address" && usage
# Set the loadBalancerIP annotation.
echo "IP: $2"
IP_OPTS="--set controller.service.loadBalancerIP=${2}"
fi
echo -e "Deploying Ingress Controller to GKE...\n"
PROVIDER="gke"
;;
-e|--eks)
echo -e "Deploying Ingress Controller to EKS...\n"
PROVIDER="eks"
;;
-a|--aks)
echo -e "Deploying Ingress Controller to AKS...\n"
PROVIDER="aks"
;;
-h|--help)
usage
;;
*)
usage
;;
esac
fi
# Create namespace
ns=$(kubectl get namespace | grep nginx | awk '{ print $1 }' || true)
# Identify cluster size
clustsize=$(kubectl get nodes --label-columns forgerock.io/cluster --no-headers | head -n 1 | awk '{print $6}')
if [ -z "${ns}" ]; then
kubectl create namespace nginx
else
printf "*** nginx namespace already exists ***\n"
fi
if [ -n "$clustsize" ]; then
echo "Detected cluster of type: $clustsize"
fi
if [[ -n "$clustsize" && ($clustsize == "cdm-medium" || $clustsize == "cdm-large") ]]; then
echo "Setting ingress pod count to 3"
INGRESS_POD_COUNT=3
elif [[ -n "$clustsize" && ($clustsize == "cdm-small") ]]; then
echo "Setting ingress pod count to 2"
INGRESS_POD_COUNT=2
else
echo "Setting ingress pod count to 1"
INGRESS_POD_COUNT=1
fi
# Set script location
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
ADDONS_BASE="${ADDONS_BASE:-${DIR}/../cluster/addons}"
ADDONS_DIR="${ADDONS_BASE}/nginx-ingress-controller"
# Add Helm repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx --force-update
# Deploy ingress controller Helm chart
helm upgrade -i ingress-nginx --namespace nginx ingress-nginx/ingress-nginx \
$IP_OPTS -f ${ADDONS_DIR}/${PROVIDER}.yaml --set controller.replicaCount=${INGRESS_POD_COUNT} --version "$VERSION"