#!/bin/bash # Генерирует манифест временного прокси <исходный куб> -> DST для инстанса и проверяет его dry-run (не применяет). # loopctl proxy make loop084756df3606 loop-2 -> state/proxy/<поддомен>-proxy-loop2.yaml # Контроллер берётся из текущего ingress инстанса: traefik-* (traefik-enterprise-clients, traefik-loop2) или nginx. set -euo pipefail ID=${1:?loop id} SRC=${2:?исходный куб, например loop-2} . "$(dirname "$0")/../lib/common.sh" LB=$(dst_lb); [ -n "$LB" ] || { echo "не резолвится $DST_DNS" >&2; exit 1; } ING=$(kubectl --context "$SRC" -n loop get ingress "$ID" -o json) HOST=$(jq -r '.spec.rules[0].host' <<<"$ING") CLASS=$(jq -r '.spec.ingressClassName // .metadata.annotations["kubernetes.io/ingress.class"]' <<<"$ING") TLS=$(jq -r '.spec.tls[0].secretName' <<<"$ING") NAME=${HOST%%.*}-proxy; [[ $NAME =~ ^[a-z] ]] || NAME=p$NAME # имя k8s не может начинаться с цифры (1kk) mkdir -p "$STATE/proxy" OUT=$STATE/proxy/$NAME-${SRC//-/}.yaml echo "$HOST class=$CLASS tls=$TLS -> $OUT" backend() { # общий Service + Endpoints на LB целевого куба cat < $DST ($LB). Откат: kubectl --context $SRC delete -f $OUT" case $CLASS in traefik-*) cat <&2; exit 1 ;; esac } > "$OUT" kubectl --context "$SRC" apply --dry-run=server -f "$OUT"