79 lines
2.2 KiB
Bash
79 lines
2.2 KiB
Bash
|
|
#!/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 ==="
|