This resource is part of the Syself Autopilot 1.36 release. For the whole picture, see what's new in 1.36.
The Syself Tunnel is a reverse tunnel that lets the Kubernetes API server reach back into a node. It's the path behind kubectl logs, kubectl exec, and kubectl port-forward, and behind the control plane scraping metrics from your pods. Each node dials out to the control plane and holds that connection open, so the API server never has to dial in and no node exposes an inbound port to the internet.
Note the direction: traffic runs from the control plane back into a node. It isn't the path you use to reach the cluster.
Kubernetes ships no built-in, secure way for the control plane to reach a node. Our nodes run directly on the public internet, and we don't want to open an inbound port on every node just so the API server can dial in.
The fix flips the direction. Instead of the control plane dialing the node, each node dials out to the control plane and holds that connection open. When the API server needs to reach a node, its traffic travels back down the connection the node already opened. Because nothing dials in, a node behind NAT or a strict firewall works with no special setup.
The tunnel runs over mTLS: both ends prove who they are with a certificate, and the traffic is encrypted end to end. Certificates are re-read on every handshake, so rotation needs no restart.
The tunnel has exactly two jobs. It reaches a node's own kubelet or an in-cluster address, and nothing else. It isn't a general-purpose proxy.
| Where the request is headed | What happens |
|---|---|
| The node's own address | Routed to that node's local kubelet |
| An in-cluster pod or service | Routed inside the cluster |
| Anywhere else | Refused |
We kept that narrow on purpose. Any path the control plane can use to reach into a node is worth restricting hard, so the tunnel refuses everything outside its two jobs. Running kubectl exec never opens a new way into your nodes.
We ran the open-source konnectivity project for about five years, and helped maintain its releases for the last year and a half. Its generic design didn't fit this job well, and the project is barely maintained now. So we built a tunnel for the way we operate. It runs as two services inside the immutable node image instead of as static pods, which means a node never runs a mismatched agent and tunnel.
The bigger change is where those connections go.
Before, a node held a single tunnel connection. A tunnel multiplexes many streams over one HTTP/2 connection, and that one connection sticks to a single control plane. That's true even with a load balancer in front, because a load balancer can't split one long-lived HTTP/2 connection across backends. So one control plane carried a node, and the others couldn't reach it directly.
Now each node opens a direct connection to every control plane. In an HA cluster with three or five control planes, any control plane can reach any node to fetch what it needs. This has two effects:
The tunnel and the failover proxy are easy to confuse. The failover proxy keeps your workers talking to the control plane. The tunnel goes the other way, letting the control plane reach back into a node. You need both directions to operate and inspect a cluster at any time.
kubectl logs, exec, and port-forward stop working, and the control plane can't scrape pod metrics. Your workloads keep serving, but you lose the ability to look inside and interact with them live.
No. Nodes dial outward and hold the connection open, so there's nothing inbound to expose.
Yes. It runs over mTLS, so both ends authenticate with certificates and the traffic is encrypted end to end.
The tunnel is how the control plane reaches your nodes. Controlling who reaches the control plane in the first place is the job of KubeGate.
Start with a 14-day free trial, and our step-by-step guides will walk you through your first cluster deployment in minutes.
Tags
In Syself Autopilot 1.36, a node-local proxy handles control-plane failover on every worker, so a load-balancer outage no longer marks the whole fleet NotReady.
KubeGate is the single entry point to the Kubernetes API server in Syself Autopilot 1.36. It controls who reaches the control plane and preserves the real client IP.
Syself Autopilot 1.36 produces four Kubernetes audit signals on every node, including the real client IP in the API server audit log, ready to ship to a SIEM.