Skip to main content
The edge proxy routes connections by reading the server_address field from the Minecraft handshake packet and matching it against the domain rules defined in your MinecraftJoinRoute resources.

Basic hostname routing

To route players who connect to play.example.com to a specific backend:
spec:
  filterRules:
    - type: any
      rules:
        - domain: play.example.com
  backendRefs:
    - name: my-server
      port: 25565

Wildcard routing

A wildcard pattern *.example.com matches any single subdomain level under example.com. It does not match example.com itself.
filterRules:
  - type: any
    rules:
      - domain: "*.example.com"
This matches lobby.example.com, survival.example.com, etc., but not example.com or a.b.example.com. When both an exact domain and a wildcard cover the same hostname, the exact match is tried first.

Multiple domains for one route

Use multiple rules within a single rule set to match several hostnames with one route:
filterRules:
  - type: any
    rules:
      - domain: play.example.com
      - domain: mc.example.com
      - domain: "*.example.com"
Each rule in an any rule set adds its domain to the edge routing table independently. The controller automatically removes exact domains that are already fully covered by a wildcard in the same set.

Route priority

When multiple routes could match the same connection at the network proxy layer, priority controls which is evaluated first. Higher integers win.
# Lobby catches all *.example.com (priority 1)
---
apiVersion: gateway.networking.minefleet.dev/v1alpha1
kind: MinecraftJoinRoute
metadata:
  name: lobby
spec:
  priority: 1
  filterRules:
    - type: any
      rules:
        - domain: "*.example.com"
  backendRefs:
    - name: lobby
      port: 25565
---
# Survival takes play.example.com at higher priority (priority 10)
apiVersion: gateway.networking.minefleet.dev/v1alpha1
kind: MinecraftJoinRoute
metadata:
  name: survival
spec:
  priority: 10
  filterRules:
    - type: any
      rules:
        - domain: play.example.com
  backendRefs:
    - name: survival
      port: 25565

Combining conditions with all

Use type: all when a route should only match if the connection satisfies every condition in the set — for example, a specific hostname and a player permission:
filterRules:
  - type: all
    rules:
      - domain: admin.example.com
      - permission: minefleet.admin
With type: all, only the first rule’s domain is added to the edge routing table (because all rules must match simultaneously, and a connection can only arrive on one hostname).

Route conflicts

A route conflict occurs when two MinecraftJoinRoute resources from different Gateway objects map the same hostname to different clusters. When a conflict is detected:
  • The conflicting gateway’s routes are excluded from the edge snapshot.
  • The controller logs the conflict but does not mark the route as failed.
  • The remaining (non-conflicting) gateway continues working normally.
Routes within the same Gateway can share domains — the network proxy evaluates them in priority order.

Forge and proxy suffix stripping

The edge filter automatically strips Forge and BungeeCord/Velocity \0-separated suffixes from the server_address field before matching. For example, play.example.com\0FML\0 is treated as play.example.com. This applies regardless of which network proxy integration you use.
Last modified on April 19, 2026