safety-eval-service/docs/gbs/scripts/dubbo-dev-proxy/dubbo-proxy-refresh.sh

79 lines
2.2 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
# GBS 本地开发 Dubbo 代理刷新脚本(方案 C
# 在 192.168.20.100 上运行:将固定端口转发到当前 Pod IP:20880
# 不修改 K8s / Nacos 注册,仅做主机级 TCP 代理
set -euo pipefail
NAMESPACE="${NAMESPACE:-jjb-dragon}"
BIND_ADDR="${BIND_ADDR:-0.0.0.0}"
MAP_FILE="${MAP_FILE:-/opt/dubbo-dev-proxy/dubbo-proxy.map}"
PID_DIR="${PID_DIR:-/var/run/dubbo-dev-proxy}"
LOG_DIR="${LOG_DIR:-/var/log/dubbo-dev-proxy}"
KUBECTL="${KUBECTL:-kubectl}"
mkdir -p "$PID_DIR" "$LOG_DIR"
if ! command -v socat >/dev/null 2>&1; then
echo "[ERROR] socat 未安装,请先执行 dubbo-proxy-install.sh" >&2
exit 1
fi
if [[ ! -f "$MAP_FILE" ]]; then
echo "[ERROR] 映射文件不存在: $MAP_FILE" >&2
exit 1
fi
stop_one() {
local port="$1"
local pid_file="${PID_DIR}/${port}.pid"
if [[ -f "$pid_file" ]]; then
local pid
pid="$(cat "$pid_file" 2>/dev/null || true)"
if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then
kill "$pid" 2>/dev/null || true
sleep 0.2
kill -9 "$pid" 2>/dev/null || true
fi
rm -f "$pid_file"
fi
}
start_one() {
local port="$1"
local pod_label="$2"
local target_port="$3"
local pod_ip
pod_ip="$($KUBECTL get pods -n "$NAMESPACE" -l "app=${pod_label}" \
--field-selector=status.phase=Running \
-o jsonpath='{.items[0].status.podIP}' 2>/dev/null || true)"
if [[ -z "$pod_ip" ]]; then
echo "[WARN] ${pod_label} 无 Running Pod跳过端口 ${port}"
stop_one "$port"
return 0
fi
stop_one "$port"
nohup socat \
"TCP-LISTEN:${port},bind=${BIND_ADDR},fork,reuseaddr" \
"TCP:${pod_ip}:${target_port}" \
>> "${LOG_DIR}/${port}.log" 2>&1 &
echo $! > "${PID_DIR}/${port}.pid"
echo "[OK] ${port} -> ${pod_ip}:${target_port} (${pod_label})"
}
echo "=== dubbo-dev-proxy refresh $(date '+%F %T') ==="
while IFS= read -r line || [[ -n "$line" ]]; do
[[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
IFS='|' read -r local_port pod_label target_port <<< "$line"
[[ -z "$local_port" || -z "$pod_label" || -z "$target_port" ]] && continue
start_one "$local_port" "$pod_label" "$target_port"
done < "$MAP_FILE"
echo "=== done ==="