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

79 lines
2.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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 ==="