feat(velocity): legacy forwarding 列表跟随 CR 的 forwarding=legacy 标签实时更新 (#15)

This commit is contained in:
Lemon-miaow committed 2026-09-26 08:09:49 +08:00
1 parent 7c2fa08e85
commit 5099b2501f
15 files changed
+522 -14

No files matched your search

+6
View File
@@ -482,6 +482,12 @@ components:
playerCountUnknown:
type: boolean
description: Present and true while the operator cannot read the player count over RCON; idle auto-stop waits until it can.
legacyForwarding:
type: boolean
description: >-
Present and true when the CR carries the label felis.lolicon.best/forwarding=legacy.
The proxy then forwards this server's players BungeeCord-style in the handshake
address instead of modern forwarding (Felis-Legacy Velocity fork only).
FleetServer:
description: One row of the fleet-wide admin read (internal/api/handlers_user.go fleetServerView).
+32
View File
@@ -383,6 +383,38 @@ version, in this order, each step one release:
3. A later release stops serving `v1alpha1`. Felis itself reads through one Go type at a
time, so the operator and felis-api switch in the release that moves storage.
### Legacy-forwarded backends [VM-VERIFIED]
A 1.8-era backend sits behind ViaVersion, which drops modern forwarding's login plugin
message on the way down to protocol 47, so the proxy has to hand that server the
player's identity BungeeCord-style, in the handshake address. Only the Felis-Legacy
Velocity fork can do that per server. Mark the server's CR and the proxy picks it up at
its next server-list refresh (every 15 s):
```sh
kubectl -n minecraft label minecraftserver <name> felis.lolicon.best/forwarding=legacy
kubectl -n minecraft label minecraftserver <name> felis.lolicon.best/forwarding- # back to modern
journalctl -u felis-velocity | grep 'legacy forwarding list'
```
The installer's `FELIS_LEGACY_FORWARDING_SERVERS` (default `legacy18`) stays in the list
whatever the labels say. What a label does depends on the proxy the host runs:
| Proxy | A label applies |
|---|---|
| Fork with patch 0004 (`build-velocity.sh` default arm) | from the next connection to that server |
| Fork with 0003 alone (`--deployed`) | at the next `systemctl restart felis-velocity` |
| Stock Velocity | never; the log line is a warning naming the server |
On the test VM (fork with 0004) labelling a server logged `legacy forwarding list is now
[legacy18,resolvecheck]` 12 s later, and removing the label logged the list back to
`[legacy18]`. The fork's own test (`FelisLegacyForwardingTest`) covers the next
connection following the rewritten list.
Legacy forwarding carries no secret. A marked server believes any identity that reaches
its game port, which `felis-allow-game-from-velocity` limits to the proxy and the node
itself; anything else running on the node can reach it too.
## 5. Disaster recovery
The procedures are in §16: what a database bundle holds, restoring one on the same host,