From 03b8b52315f760664ad85f9c3b68659703d6b182 Mon Sep 17 00:00:00 2001 From: hotwa Date: Fri, 3 Oct 2025 14:52:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(registrar):=20=E6=A0=87=E7=AD=BE=E6=8C=89?= =?UTF-8?q?=E8=A1=8C=E6=8B=BC=E6=8E=A5=E9=81=BF=E5=85=8D=E9=80=97=E5=8F=B7?= =?UTF-8?q?=E6=8B=86=E5=88=86=EF=BC=9B=E9=BB=98=E8=AE=A4=E5=90=AF=E7=94=A8?= =?UTF-8?q?=20TCP=20TLS=EF=BC=9B=E6=96=B0=E5=A2=9E=20TLS=5FMODE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复 ConsulCatalog 标签因逗号分割导致的解析错误: 「error parsing server URL ... : invalid port ':9009,'」 现在改为按“行”累加标签,再转换为 JSON 数组,避免值中逗号(如 middlewares)被错误拆分 - TCP 路由默认启用 TLS(terminating),补齐 tls=true / tls.certresolver 修复「HostSNI(...) but no TLS on router」 - 新增 TLS_MODE=terminating|passthrough|plaintext 三种模式 - 统一使用 loadbalancer.server.port(替代 server.url),规避尾逗号风险 - 提供严格的 to_json_array 实现,避免尾逗号 JSON 问题 - HTTP 路由补充 priority=10000;保留可选中间件(需与动态配置名称一致) Test plan: - 清理旧服务并重注册: curl -s http://100.64.0.1:8500/v1/agent/services \ | jq 'to_entries[] | select(.value.Service=="mcp") | .key' \ | xargs -I{} curl -s -X PUT http://100.64.0.1:8500/v1/agent/service/deregister/{} 然后重启注册器容器 - 验证 Traefik 路由: curl -s http://localhost:8083/api/tcp/routers \ | jq '.[] | select(.rule|test("ci-agent\\.jmsu\\.top")) | {name,entryPoints,tls}' - 验证证书握手: openssl s_client -connect ci-agent.jmsu.top:4443 -servername ci-agent.jmsu.top -brief &2; exit 2;; + esac else echo "unsupported SERVICE_PROTOCOL=$SERVICE_PROTOCOL" >&2; exit 2 fi -# 转 JSON 数组(按逗号拆分) -to_json_array() { echo "$1" | awk -v RS=, 'NF{print "\""$0"\""}' | paste -sd, - | sed 's/^/[/' | sed 's/$/]/'; } -TAGS_JSON="$(to_json_array "$TAGS")" +# 转 JSON 数组(按“行”解析) +to_json_array() { + # 逐行 -> trim -> "..." -> [ ... ] + awk 'BEGIN{RS="\n"} NF {gsub(/^[ \t]+|[ \t]+$/,""); printf "\"%s\",\n",$0}' | + sed '1s/^/[/' | sed '$s/,\s*$/]/' +} +TAGS_JSON="$(printf "%s" "$TAGS" | to_json_array)" # 健康检查 JSON if [ "$CHECK_TYPE" = "http" ]; then @@ -64,12 +103,12 @@ EOF ) fi -# 写 service 定义并注册到"云端" Consul Server +# 写 service 定义并注册到云端 Consul cat > /tmp/svc.json < ${CONSUL}" consul services register -http-addr="$CONSUL" /tmp/svc.json term() { @@ -79,4 +118,4 @@ term() { } trap term TERM INT -tail -f /dev/null \ No newline at end of file +tail -f /dev/null