Skip to main content
NetworkInfrastructure configures how a gateway discovers backend game servers, how its network proxy Deployments are templated, and (at the GatewayClass level) how the edge proxy DaemonSet is configured. API group: gateway.networking.minefleet.dev/v1alpha1

Example

apiVersion: gateway.networking.minefleet.dev/v1alpha1
kind: NetworkInfrastructure
metadata:
  name: my-infrastructure
  namespace: default
spec:
  discovery:
    namespaceSelector:
      from: Same
    labelSelector:
      matchLabels:
        minefleet.dev/gameserver: "true"
  networkTemplate:
    replicas: 2
    template:
      spec:
        containers:
          - name: network
            volumeMounts:
              - mountPath: /velocity/forwarding.secret
                subPath: forwarding.secret
                name: forwarding-secret
                readOnly: true
        volumes:
          - name: forwarding-secret
            secret:
              secretName: velocity-forwarding-secret

Spec fields

discovery

Controls which Kubernetes Services are discovered as available backends.
FieldTypeDescription
namespaceSelectorRouteNamespacesWhich namespaces to search. from: Same searches the gateway’s namespace; from: All searches all namespaces; from: Selector filters by namespaceSelector.selector.
labelSelectorLabelSelectorLabels that a Service must have to be included.
A Service is included if it matches the label selector and has a TCP port named minecraft, a TCP port numbered 25565, or (as a fallback) any TCP port. Port selection priority:
  1. TCP port named minecraft
  2. TCP port number 25565
  3. First TCP port found
Discovered services are written into status.backendRefs and made available to routes as backends.

networkTemplate

Optional. Customizes the Velocity proxy Deployment created for each gateway listener. Fields are merged into the controller-managed default.
FieldTypeDescription
replicas*int32Number of network proxy replicas per listener.
templatePodTemplateSpecPod template merged into the controller-managed default (containers, volumes, affinity, etc.).
strategyDeploymentStrategyDeployment rollout strategy.
networkTemplate:
  replicas: 2
  template:
    spec:
      containers:
        - name: network
          resources:
            requests:
              cpu: 100m
              memory: 256Mi
          volumeMounts:
            - mountPath: /velocity/forwarding.secret
              subPath: forwarding.secret
              name: forwarding-secret
              readOnly: true
      volumes:
        - name: forwarding-secret
          secret:
            secretName: velocity-forwarding-secret
The following fields are always managed by the controller and cannot be overridden:
  • selector
  • Environment variables: NAMESPACE, GATEWAY_NAME, LISTENER_NAME, GATEWAY_NETWORK_XDS_HOST, GATEWAY_NETWORK_XDS_PORT

edgeTemplate

Configures the Envoy edge proxy DaemonSet. Only effective when set on a NetworkInfrastructure referenced by a GatewayClass — per-gateway infrastructure ignores this field.
FieldTypeDescription
daemonSetEdgeDaemonSetTemplateCustomizes the edge DaemonSet. The selector and bootstrap volume/mount are always enforced.
proxyProtocolboolEnables PROXY protocol v2 on upstream clusters so game servers receive the real client IP. Default: false.
rejectUnknownboolDrops connections whose hostname does not match any route. Default: false (unmatched connections pass through to a default cluster).
daemonSet fields:
FieldTypeDescription
templatePodTemplateSpecPod template merged into the controller-managed DaemonSet default.
updateStrategyDaemonSetUpdateStrategyDaemonSet rollout strategy.
minReadySecondsint32Minimum seconds a pod must be ready before it is considered available.
# In a GatewayClass-level NetworkInfrastructure
edgeTemplate:
  proxyProtocol: true
  rejectUnknown: true
  daemonSet:
    minReadySeconds: 10
    template:
      spec:
        tolerations:
          - key: node-role.kubernetes.io/control-plane
            effect: NoSchedule

Status fields

FieldDescription
backendRefsList of discovered backend Services, populated by the controller after reconciliation.
conditionsStandard Kubernetes condition list.

Class-level vs. gateway-level

A NetworkInfrastructure can be referenced from a GatewayClass (cluster-wide defaults) or from a Gateway (per-gateway overrides). When both are present, they are merged:
FieldMerge behavior
edgeTemplateGatewayClass only — per-gateway values are ignored
networkTemplateGateway-level overrides GatewayClass-level
discoveryGateway-level wins if present
This lets you configure the edge DaemonSet once at the class level while each gateway customizes its own network proxy. See Network Integration if you want to replace the built-in Velocity proxy with your own implementation.
Last modified on April 27, 2026