If the infrastructure where Deckhouse Kubernetes Platform (DKP) is running has requirements to limit host-to-host network communications, the following conditions must be met:
- Tunneling mode for traffic between pods is enabled (configuration for CNI Cilium, configuration for CNI Flannel).
- Traffic between podSubnetCIDR encapsulated within a VXLAN is allowed (if inspection and filtering of traffic within a VXLAN tunnel is performed).
- If there is integration with external systems (e.g. LDAP, SMTP or other external APIs), it is required to allow network communication with them.
- Local network communication is fully allowed within each individual cluster node.
- Inter-node communication is allowed on the ports shown in the tables on the current page. Note that most ports are in the 4200-4299 range. When new platform components are added, they will be assigned ports from this range (if it is possible).
Changes related to the addition, removal, or reassignment of ports in the tables are listed in the “Network” section of a respective DKP version on the Release notes page.
Requirements for network latency between master nodes
DKP supports HA mode using arbiter nodes. The network latency requirements listed below also apply to arbiter nodes.
Etcd only commits a writing after the change has been replicated to a majority of master nodes. Therefore, the round-trip time (RTT) between master nodes directly determines the cluster’s performance. A single operation in the cluster typically consists of several consecutive writes, so as latency increases, the application of manifests, operator operations, and Kubernetes API responsiveness slow down noticeably.
The sum of RTT and jitter between master nodes must not exceed 100 ms.
Round-trip time (RTT) is specified, not one-way delay: for example, the ping command returns RTT.
Jitter—the variation in latency—is added to the RTT. For example, with an RTT of 90 ms and jitter of 20 ms, the total is 110 ms, and the requirement is not met, even though the RTT value itself is within the 100 ms limit.
When planning a cluster, it is recommended to aim for a latency of no more than 50 ms between future master nodes—that is, a twofold margin relative to the requirement. This margin is necessary for the following reasons:
- Pre-deployment measurements are performed on an idle network and may underestimate actual values.
- You need to account for latency spikes and variation, as well as possible infrastructure operations—for example, migrating a virtual machine to a zone with higher latency.
Potential issues
The main consequence of increased RTT is a proportional slowdown of the cluster. Network latency is directly reflected in write times: with an RTT of 300 ms, each write to etcd will take at least 300 ms. There is no threshold here; performance degrades continuously as latency increases.
The second issue is etcd leader re-elections. These are triggered not by the magnitude of the latency, but by its complete loss: a cluster member initiates an election if it does not receive messages from the leader within the time specified by ETCD_ELECTION_TIMEOUT (taking into account etcd’s built-in randomization mechanism—from 1,000 to 2,000 ms). With a 100-ms heartbeat interval, this corresponds to 10–20 consecutive missed heartbeat messages. Typical causes:
- A network outage or packet loss lasting 1–2 seconds.
- Disk write delays on the leader node, preventing etcd from sending heartbeat messages in time.
- A restart of the etcd process.
Isolated spikes in latency do not trigger re-elections: heartbeat messages arrive, albeit late. Only writes that occur during the spike are delayed.
However, a high RTT makes re-elections protracted when they do occur. Votes are collected within a single RTT and must fit within ETCD_ELECTION_TIMEOUT. If the RTT is close to this timeout, the election does not complete in time and restarts, leaving the cluster leaderless. A tenfold margin is required to ensure the election succeeds on the first attempt.
During leader re-elections, etcd does not process write requests, so the Kubernetes API returns errors. The KubeEtcdHighNumberOfLeaderChanges alert signals frequent leader re-elections—more than three leader re-elections in 10 minutes.
Checking current latencies
Latency and its variation can be measured using ping. The command is run on one of the master nodes, or—when planning the cluster—on the server intended to become a master node. ICMP is sufficient for this check, as it is already included in the requirements for traffic between nodes:
ping -c 100 -i 0.2 <IP address of another master node>
Example of the resulting output:
rtt min/avg/max/mdev = 25.085/25.502/35.933/1.185 ms
Here, avg is the average RTT, mdev is the delay variation (jitter), and max is the actual maximum—that is, the RTT including spikes. There is no need to add the RTT and jitter manually: you should compare the max value against the requirements. When planning a cluster, we recommend staying within 50 ms; for a live cluster, do not exceed 100 ms.
Network latency at the other nodes
The control plane has no requirements regarding network latency on nodes that are not master nodes: latency on these nodes does not affect the cluster’s stability. The only factor that matters is the duration of the loss of communication with master nodes—by default, after 40 seconds, a node enters the Unreachable state, and after 5 minutes, its pods are migrated to other nodes. Both thresholds are configured using the nodeMonitorGracePeriodSeconds and failedNodePodEvictionTimeoutSeconds parameters.
These delays affect the performance of everything running on the nodes—including the platform’s own components. For components that access the Kubernetes API (DKP operators, Prometheus, Ingress controllers), latency to the master nodes is added to every request. Latency between nodes is added to every network request between pods and to DNS lookups, and—when using replicated storage—to the time it takes to write to disk.
Thus, the acceptable value is determined by the requirements of the running workload. For clusters distributed across remote sites, this means that the platform will continue to operate, but application latencies will reflect the geographic distribution of the nodes.
Traffic between master nodes
| Port | Protocol | Purpose |
|---|---|---|
2379, 2380 |
TCP | etcd replication |
4200 |
TCP | Cluster API webhook handler |
4201 |
TCP | Webhook handler for VMware Cloud Director cloud provider |
4223 |
TCP | Deckhouse controller webhook handler |
Traffic from master nodes to regular nodes
| Port | Protocol | Purpose |
|---|---|---|
22 |
TCP | SSH for static node bootstrapping by the static provider |
10250 |
TCP | kubelet |
4221 |
TCP |
|
4227 |
TCP |
|
Traffic from nodes to master nodes
| Port | Protocol | Purpose |
|---|---|---|
4234 |
UDP | NTP for time synchronization between nodes |
6443 |
TCP |
|
4203 |
TCP |
|
4219 |
TCP | Proxy for registry packages |
4222 |
TCP | Deckhouse controller metrics |
Traffic between nodes
| Port | Protocol | Purpose |
|---|---|---|
| — | ICMP | ICMP for node-to-node connectivity monitoring |
4202 |
TCP |
|
4204 |
TCP | Deckhouse controller debug |
4205 |
TCP |
|
4206 |
TCP |
|
4207 |
TCP |
|
4208 |
TCP |
|
4209 |
TCP | Kubernetes control plane metrics |
4210 |
TCP |
|
4211 |
TCP | Cluster API metrics |
4212 |
TCP |
|
4213 |
TCP |
|
4214 |
TCP | API of the |
4215 |
TCP |
|
4216 |
TCP |
|
4218 |
TCP/UDP | Synchronization of the |
4220 |
TCP | Metrics of the |
4224 |
TCP |
|
4225 |
TCP/UDP | Synchronization of the |
4226 |
TCP | Metrics of the |
4228 |
TCP |
|
4229 |
TCP |
|
4230 |
TCP |
|
4231 |
TCP |
|
4232 |
TCP |
|
4235 |
TCP |
|
4236 |
TCP |
|
4237 |
TCP |
|
4238 |
TCP |
|
4239 |
TCP |
|
4240 |
TCP | CNI Cilium node-to-node healthcheck |
4241 |
TCP | CNI Cilium agent metrics |
4242 |
TCP | CNI Cilium operator metrics |
4244 |
TCP |
|
4245 |
TCP |
|
4246 |
TCP |
|
4247 |
TCP |
|
4248 |
TCP |
|
4249 |
TCP |
|
4250 |
TCP |
|
4251 |
TCP |
|
4252 |
TCP |
|
4253 |
TCP |
|
4254 |
TCP |
|
4255 |
TCP |
|
4256 |
TCP |
|
4257 |
TCP |
|
4258 |
TCP |
|
4259 |
TCP |
|
4260 |
TCP |
|
4261 |
TCP |
|
4262 |
TCP |
|
4263 |
TCP |
|
4269 |
TCP |
|
4270 |
TCP |
|
4271 |
TCP |
|
4272 |
TCP |
|
4135-4199 |
TCP |
|
4280 |
TCP |
|
4286 |
TCP | Istio CNI metrics |
4287 |
UDP | WireGuard port for traffic encryption in CNI Cilium |
4288 |
TCP |
|
4289 |
TCP |
|
4295‑4297 |
UDP | Used by the |
4298 |
UDP | Used by the |
4299 |
UDP | For clusters deployed on DKP versions 1.64–1.70. Used by the Note that in such clusters, enabling the |
7000‑7999 |
TCP |
|
8469 |
UDP | For clusters deployed on DKP version 1.63 and below with the |
8472 |
UDP | For clusters deployed on DKP version 1.63 and below. Used by the Note that in such clusters, enabling the
|
Static virtualization ports on cluster nodes (4100-4134/TCP reserved)
| Port | Protocol | Purpose |
|---|---|---|
4100 |
TCP |
|
4101 |
TCP |
|
4105 |
TCP |
|
4106 |
TCP |
|
4107 |
TCP |
|
External traffic to master nodes
| Port | Protocol | Purpose |
|---|---|---|
22 |
TCP | SSH for initializing Deckhouse Kubernetes Platform |
6443 |
TCP | Direct access to the apiserver |
External traffic to frontend nodes
| Port | Protocol | Purpose |
|---|---|---|
80, 443 |
TCP | Application ports for requests to Ingress controllers over HTTP and HTTPS. Note that these ports are configurable in the IngressNginxController resource and may vary across installations |
5416 |
UDP | OpenVPN |
5416 |
TCP | OpenVPN |
10256 |
TCP | Healthcheck port for external balancers |
30000-32767 |
TCP | NodePort range |
External traffic for all nodes
| Port | Protocol | Purpose |
|---|---|---|
53 |
UDP | DNS |
53 |
TCP | DNS |
123 |
UDP | NTP for synchronization with external time servers |
179 |
TCP | BGP peering with the infrastructure router for network traffic balancing (metallb module) |
443 |
TCP | Container registry |