添加 'Yaml文件/deploy.sh'
This commit is contained in:
parent
3f429cee63
commit
5a13d225ed
|
@ -0,0 +1,123 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Deploys CoreDNS to a cluster currently running Kube-DNS.
|
||||
|
||||
show_help () {
|
||||
cat << USAGE
|
||||
usage: $0 [ -r REVERSE-CIDR ] [ -i DNS-IP ] [ -d CLUSTER-DOMAIN ] [ -t YAML-TEMPLATE ]
|
||||
|
||||
-r : Define a reverse zone for the given CIDR. You may specify this option more
|
||||
than once to add multiple reverse zones. If no reverse CIDRs are defined,
|
||||
then the default is to handle all reverse zones (i.e. in-addr.arpa and ip6.arpa)
|
||||
-i : Specify the cluster DNS IP address. If not specified, the IP address of
|
||||
the existing "kube-dns" service is used, if present.
|
||||
-s : Skips the translation of kube-dns configmap to the corresponding CoreDNS Corefile configuration.
|
||||
|
||||
USAGE
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Simple Defaults
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
||||
CLUSTER_DOMAIN=cluster.local
|
||||
YAML_TEMPLATE="$DIR/coredns.yaml.sed"
|
||||
STUBDOMAINS=""
|
||||
UPSTREAM=\\/etc\\/resolv\.conf
|
||||
|
||||
# Translates the kube-dns ConfigMap to equivalent CoreDNS Configuration.
|
||||
function translate-kube-dns-configmap {
|
||||
kube-dns-upstreamnameserver-to-coredns
|
||||
kube-dns-stubdomains-to-coredns
|
||||
}
|
||||
|
||||
function kube-dns-upstreamnameserver-to-coredns {
|
||||
up=$(kubectl -n kube-system get configmap kube-dns -ojsonpath='{.data.upstreamNameservers}' 2> /dev/null | tr -d '[",]')
|
||||
if [[ ! -z ${up} ]]; then
|
||||
UPSTREAM=${up}
|
||||
fi
|
||||
}
|
||||
|
||||
function kube-dns-stubdomains-to-coredns {
|
||||
STUBDOMAIN_TEMPLATE='
|
||||
SD_DOMAIN:53 {
|
||||
errors
|
||||
cache 30
|
||||
loop
|
||||
forward . SD_DESTINATION {
|
||||
max_concurrent 1000
|
||||
}
|
||||
}'
|
||||
|
||||
function dequote {
|
||||
str=${1#\"} # delete leading quote
|
||||
str=${str%\"} # delete trailing quote
|
||||
echo ${str}
|
||||
}
|
||||
|
||||
function parse_stub_domains() {
|
||||
sd=$1
|
||||
|
||||
# get keys - each key is a domain
|
||||
sd_keys=$(echo -n $sd | jq keys[])
|
||||
|
||||
# For each domain ...
|
||||
for dom in $sd_keys; do
|
||||
dst=$(echo -n $sd | jq '.['$dom'][0]') # get the destination
|
||||
|
||||
dom=$(dequote $dom)
|
||||
dst=$(dequote $dst)
|
||||
|
||||
sd_stanza=${STUBDOMAIN_TEMPLATE/SD_DOMAIN/$dom} # replace SD_DOMAIN
|
||||
sd_stanza=${sd_stanza/SD_DESTINATION/$dst} # replace SD_DESTINATION
|
||||
echo "$sd_stanza"
|
||||
done
|
||||
}
|
||||
|
||||
sd=$(kubectl -n kube-system get configmap kube-dns -ojsonpath='{.data.stubDomains}' 2> /dev/null)
|
||||
STUBDOMAINS=$(parse_stub_domains "$sd")
|
||||
}
|
||||
|
||||
|
||||
# Get Opts
|
||||
while getopts "hsr:i:d:t:k:" opt; do
|
||||
case "$opt" in
|
||||
h) show_help
|
||||
;;
|
||||
s) SKIP=1
|
||||
;;
|
||||
r) REVERSE_CIDRS="$REVERSE_CIDRS $OPTARG"
|
||||
;;
|
||||
i) CLUSTER_DNS_IP=$OPTARG
|
||||
;;
|
||||
d) CLUSTER_DOMAIN=$OPTARG
|
||||
;;
|
||||
t) YAML_TEMPLATE=$OPTARG
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Conditional Defaults
|
||||
if [[ -z $REVERSE_CIDRS ]]; then
|
||||
REVERSE_CIDRS="in-addr.arpa ip6.arpa"
|
||||
fi
|
||||
if [[ -z $CLUSTER_DNS_IP ]]; then
|
||||
# Default IP to kube-dns IP
|
||||
CLUSTER_DNS_IP=$(kubectl get service --namespace kube-system kube-dns -o jsonpath="{.spec.clusterIP}")
|
||||
if [ $? -ne 0 ]; then
|
||||
>&2 echo "Error! The IP address for DNS service couldn't be determined automatically. Please specify the DNS-IP with the '-i' option."
|
||||
exit 2
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "${SKIP}" -ne 1 ]] ; then
|
||||
translate-kube-dns-configmap
|
||||
fi
|
||||
|
||||
orig=$'\n'
|
||||
replace=$'\\\n'
|
||||
sed -e "s/CLUSTER_DNS_IP/$CLUSTER_DNS_IP/g" \
|
||||
-e "s/CLUSTER_DOMAIN/$CLUSTER_DOMAIN/g" \
|
||||
-e "s?REVERSE_CIDRS?$REVERSE_CIDRS?g" \
|
||||
-e "s@STUBDOMAINS@${STUBDOMAINS//$orig/$replace}@g" \
|
||||
-e "s/UPSTREAMNAMESERVER/$UPSTREAM/g" \
|
||||
"${YAML_TEMPLATE}"
|
Loading…
Reference in New Issue