some improvements

This commit is contained in:
ston1th 2019-08-11 22:16:06 +02:00
commit bae55a54f4
5 changed files with 4 additions and 2 deletions

View file

@ -0,0 +1,188 @@
config() {
cat <<EOF
{
"onKubernetesEvent": [
{
"kind": "Ingress",
"event": ["$1"],
"selector": {
"matchLabels": {
"certmanager.k8s.io/acme-http01-solver": "true"
}
}
}
]
}
EOF
}
mkmap() {
kubectl apply -f - <<EOF
apiVersion: cio.giftfish.de/v1alpha1
kind: RefMap
metadata:
name: "$1"
spec:
namespace: "$2"
gateway:
ref: "$3"
action: "$4"
virtualService:
ref: "$5"
action: "$6"
EOF
}
getmap() { kubectl get refmap $1 -ojson; }
delmap() { kubectl delete refmap $1; }
mkgw() {
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: "$1"
namespace: "$2"
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts: ["$3"]
EOF
}
delgw() { kubectl -n $2 delete gateway $1; }
mkvs() {
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: "$1"
namespace: "$2"
spec:
gateways: ["$1"]
hosts: ["$3"]
http:
- match:
- port: 80
uri:
exact: "$4"
route:
- destination:
port:
number: $6
host: "$5.$2.svc.cluster.local"
EOF
}
addvs() {
insert=$(jq -c -M . <<EOF
{
"match": [
{
"port": 80,
"uri": {
"exact": "$3"
}
}
],
"route": [
{
"destination": {
"host": "$4.$2.svc.cluster.local",
"port": {
"number": $5
}
}
}
]
}
EOF
)
kubectl -n $2 get virtualservice $1 -ojson | jq ".spec.http |= [${insert}] + ." | kubectl -n $2 apply -f -
}
clearvs() { kubectl -n $2 get virtualservice $1 -ojson | jq -r '.spec.http |= .[1:]' | kubectl -n $2 apply -f -; }
delvs() { kubectl -n $2 delete virtualservice $1; }
mkdr() {
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: $1
namespace: $2
spec:
host: "$3.$2.svc.cluster.local"
trafficPolicy:
tls:
mode: DISABLE
EOF
}
deldr() { kubectl -n $2 delete destinationrule $1; }
delete() {
tmp=$(mktemp)
getmap $1 >${tmp} || return 0
ns=$(jq -r '.spec.namespace' ${tmp})
gwName=$(jq -r '.spec.gateway.ref' ${tmp})
gwAction=$(jq -r '.spec.gateway.action' ${tmp})
vsName=$(jq -r '.spec.virtualService.ref' ${tmp})
vsAction=$(jq -r '.spec.virtualService.action' ${tmp})
rm -f ${tmp}
if [[ "${gwName}" != "" ]]; then
case ${gwAction} in
delete) delgw "${gwName}" "${ns}" ;;
none|*) ;;
esac
fi
if [[ "${vsName}" != "" ]]; then
case ${vsAction} in
delete) delvs "${vsName}" "${ns}" ;;
clear) clearvs "${vsName}" "${ns}" ;;
esac
fi
deldr "$1" "${ns}"
delmap "$1"
}
add() {
res=$1
ns=$2
tmp=$(mktemp)
kubectl -n ${ns} get ingress ${res} -ojson >${tmp} || return 0
host=$(jq -r '.spec.rules[0].host' ${tmp})
svcName=$(jq -r '.spec.rules[0].http.paths[0].backend.serviceName' ${tmp})
svcPort=$(jq -r '.spec.rules[0].http.paths[0].backend.servicePort' ${tmp})
path=$(jq -r '.spec.rules[0].http.paths[0].path' ${tmp})
rm -f ${tmp}
gwName=
for gw in $(kubectl -n ${ns} get gateway -ojson | jq -r '.items[] | .metadata.name'); do
contains=$(kubectl -n ${ns} get gateway ${gw} -ojson | jq -r ".spec.servers[0].hosts | contains([\"${host}\"])")
[[ "${contains}" == "true" ]] && { gwName=${gw}; break; }
done
if [[ "${gwName}" == "" ]]; then
gwName=${res}
mkgw "${gwName}" "${ns}" "${host}"
gwAction=delete
else
gwAction=none
fi
vsName=
vsAction=
for vs in $(kubectl -n ${ns} get virtualservice -ojson | jq -r '.items[] | .metadata.name'); do
contains=$(kubectl -n ${ns} get virtualservice ${vs} -ojson | jq -r ".spec.hosts | contains([\"${host}\"])")
[[ "${contains}" == "true" ]] && { vsName=${vs}; break; }
done
if [[ "${vsName}" == "" ]]; then
vsName=${res}
mkvs "${vsName}" "${ns}" "${host}" "${path}" "${svcName}" "${svcPort}"
vsAction=delete
else
addvs "${vsName}" "${ns}" "${path}" "${svcName}" "${svcPort}"
vsAction=clear
fi
mkdr "${res}" "${ns}" "${svcName}"
mkmap "${res}" "${ns}" "${gwName}" "${gwAction}" "${vsName}" "${vsAction}"
}