
itzg/mc-router |
--mapping | 无 | 路由映射规则,格式为 externalHostname=host:port,支持多次指定 |
--in-kube-cluster | 无(需显式指定) | 启用 Kubernetes 集群内服务自动发现(仅在 K8s 环境中使用) |
bashdocker run -d \ --name mc-router \ -p 25565:25565 \ itzg/mc-router \ --mapping=vanilla.example.com=vanilla-server:25565 \ --mapping=forge.example.com=forge-server:25565 \ --api-binding=0.0.0.0:8080
-p 25565:25565:映射容器内监听端口至主机,接收客户端连接--mapping:配置静态路由规则,将客户端请求的 vanilla.example.com 转发至后端 vanilla-server:25565--api-binding:开放 API 接口,用于动态管理路由以下示例通过 Docker Compose 配置两个 Minecraft 后端服务(vanilla 和 forge)及路由服务(router)。后端服务通过内部网络通信,无需暴露外部端口;路由服务作为唯一入口,通过 --mapping 映射客户端请求的主机名至内部服务。
!Docker Compose 架构图
yamlversion: '3.8' services: router: image: itzg/mc-router ports: - "25565:25565" command: --mapping=vanilla.example.com=vanilla:25565 --mapping=forge.example.com=forge:25565 depends_on: - vanilla - forge vanilla: image: itzg/minecraft-server environment: - EULA=TRUE - VERSION=1.20.1 volumes: - vanilla-data:/data forge: image: itzg/minecraft-server environment: - EULA=TRUE - TYPE=FORGE - VERSION=1.20.1 volumes: - forge-data:/data volumes: vanilla-data: forge-data:
hosts 文件中添加解析:
127.0.0.1 vanilla.example.com 127.0.0.1 forge.example.com
docker-compose up -dvanilla.example.com 和 forge.example.com 连接不同后端服务器在 Kubernetes 集群中部署时,通过 --in-kube-cluster 参数启用服务自动发现,mc-router 会监听带有以下注解的服务:
mc-router.itzg.me/externalServerName: 客户端用于连接的外部主机名,服务的 ClusterIP 和目标端口将自动注册为路由后端mc-router.itzg.me/defaultServer: 配置默认路由,当无匹配路由时转发至该服务示例服务注解配置:
yamlapiVersion: v1 kind: Service metadata: name: mc-forge annotations: "mc-router.itzg.me/externalServerName": "forge.example.com" spec: selector: app: mc-forge ports: - port: 25565 targetPort: 25565
通过以下命令部署包含自动发现功能的 mc-router 及示例后端服务:
bashkubectl apply -f [***]
部署架构: !Kubernetes 部署架构图
注意事项:
mc-stable 和 mc-snapshot 两个持久卷声明(PVC)--service-node-port-range=25000-32767 实现)GET /routesjson[ {"serverAddress": "vanilla.example.com", "backend": "vanilla:25565"}, {"serverAddress": "forge.example.com", "backend": "forge:25565"} ]
POST /routesjson{ "serverAddress": "CLIENT REQUESTED SERVER ADDRESS", // 客户端请求的服务器地址(如 "test.example.com") "backend": "HOST:PORT" // 后端服务地址(如 "test-server:25565") }
POST /defaultRoutejson{ "backend": "HOST:PORT" // 默认后端服务地址(如 "fallback-server:25565") }
DELETE /routes/{serverAddress}serverAddress - 需删除的客户端请求地址(如 "test.example.com")manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务