Files
zeekayandHanzo Dev 15d100931d
Hanzo CI/CD / cicd (push) Failing after 9m46s
CI/CD / cicd (push) Failing after 10m4s
Name the ingress in the docs, and fix what that exposed
Most of it was stale, not cosmetic: the docs taught `TRAEFIK_*` env,
`traefik.http.*` labels, `traefik.ingress.kubernetes.io/` annotations,
`.traefik.yml` plugins and `traefik_*` metrics. This binary answers to
`INGRESS_*`, `ingress.http.*`, `ingress.kubernetes.io/`, `.ingress.yml` and
`ingress.*` — a reader following the old text configured nothing.

Two were worse than stale. Gateway API examples gave `group: traefik.io` for an
IngressService backendRef, which kubernetes.go:1265 refuses against hanzo.ai.
The contributing guide built with `github.com/traefik/ingress` ldflags against
a module that is `github.com/hanzoai/ingress/v3`.

script/code-gen.sh globs `hanzo.ai_*.yaml` and matched nothing — the per-CRD
dumps had been deleted and never regenerated, so `cat` failed the script under
`set -e`. controller-gen v0.19.0 restores all ten; they concatenate
byte-for-byte into the committed definition and fixture.

CHANGELOG.md is untouched: 6,789 lines of imported release history, where a
rewrite would falsify the record rather than rebrand it. `@traefiklabs/faency`,
`traefik/whoami`, k3s's `--disable=traefik`, the `traefik.io` CRD group and the
MIT attribution stay — upstream's addresses, not our brand.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-16 13:01:19 -07:00

6.8 KiB

title, description
title description
Hanzo Ingress TCP Routers Documentation TCP routers are responsible for connecting incoming TCP connections to the services that can handle them. Read the technical documentation.

TCP Router

A TCP router is in charge of connecting incoming TCP connections to the services that can handle them. TCP routers analyze incoming connections based on rules, and when a match is found, forward the connection through any configured middlewares to the appropriate service.

!!! note "TCP vs HTTP Routing" If both HTTP routers and TCP routers listen to the same EntryPoint, the TCP routers will apply before the HTTP routers. If no matching route is found for the TCP routers, then the HTTP routers will take over.

Configuration Example

tcp:
  routers:
    my-tcp-router:
      entryPoints:
        - "tcp-ep"
        - "websecure"
      rule: "HostSNI(`example.com`)"
      priority: 10
      middlewares:
        - "tcp-ipallowlist"
      tls:
        passthrough: false
        certResolver: "letsencrypt"
        options: "modern-tls"
        domains:
          - main: "example.com"
            sans:
              - "www.example.com"
      service: my-tcp-service
[tcp.routers]
  [tcp.routers.my-tcp-router]
    entryPoints = ["tcp-ep", "websecure"]
    rule = "HostSNI(`example.com`)"
    priority = 10
    middlewares = ["tcp-ipallowlist"]
    service = "my-tcp-service"

    [tcp.routers.my-tcp-router.tls]
      passthrough = false
      certResolver = "letsencrypt"
      options = "modern-tls"

      [[tcp.routers.my-tcp-router.tls.domains]]
        main = "example.com"
        sans = ["www.example.com"]
labels:
  - "ingress.tcp.routers.my-tcp-router.entrypoints=tcp-ep,websecure"
  - "ingress.tcp.routers.my-tcp-router.rule=HostSNI(`example.com`)"
  - "ingress.tcp.routers.my-tcp-router.priority=10"
  - "ingress.tcp.routers.my-tcp-router.middlewares=tcp-ipallowlist"
  - "ingress.tcp.routers.my-tcp-router.tls.certresolver=letsencrypt"
  - "ingress.tcp.routers.my-tcp-router.tls.passthrough=false"
  - "ingress.tcp.routers.my-tcp-router.tls.options=modern-tls"
  - "ingress.tcp.routers.my-tcp-router.tls.domains[0].main=example.com"
  - "ingress.tcp.routers.my-tcp-router.tls.domains[0].sans=www.example.com"
  - "ingress.tcp.routers.my-tcp-router.service=my-tcp-service"
{
  "Tags": [
    "ingress.tcp.routers.my-tcp-router.entrypoints=tcp-ep,websecure",
    "ingress.tcp.routers.my-tcp-router.rule=HostSNI(`example.com`)",
    "ingress.tcp.routers.my-tcp-router.priority=10",
    "ingress.tcp.routers.my-tcp-router.middlewares=tcp-ipallowlist",
    "ingress.tcp.routers.my-tcp-router.tls.certresolver=letsencrypt",
    "ingress.tcp.routers.my-tcp-router.tls.passthrough=false",
    "ingress.tcp.routers.my-tcp-router.tls.options=modern-tls",
    "ingress.tcp.routers.my-tcp-router.tls.domains[0].main=example.com",
    "ingress.tcp.routers.my-tcp-router.tls.domains[0].sans=www.example.com",
    "ingress.tcp.routers.my-tcp-router.service=my-tcp-service"
  ]
}

Configuration Options

Field Description Default Required
entryPoints The list of entry points to which the router is attached. If not specified, TCP routers are attached to all TCP entry points. All TCP entry points No
rule Rules are a set of matchers configured with values, that determine if a particular connection matches specific criteria. If the rule is verified, the router becomes active, calls middlewares, and then forwards the connection to the service. See Rules & Priority for details. Yes
priority To avoid rule overlap, routes are sorted, by default, in descending order using rules length. The priority is directly equal to the length of the rule, and so the longest length has the highest priority. A value of 0 for the priority is ignored. Negative values are supported. See Rules & Priority for details. Rule length No
middlewares The list of middlewares that are applied to the router. Middlewares are applied in the order they are declared. See TCP Middlewares overview for available TCP middlewares. No
tls TLS configuration for the router. When specified, the router will only handle TLS connections. See TLS configuration for detailed TLS options. No
service The name of the service that will handle the matched connections. Services can be load balancer services or weighted round robin services. See TCP Service for details. Yes

Router Naming

  • The character @ is not authorized in the router name
  • Router names should be descriptive and follow your naming conventions
  • In provider-specific configurations (Docker, Kubernetes), router names are often auto-generated based on service names and rules

{% include-markdown "includes/ingress-for-business-applications.md" %}