✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Kubernetes Control Plane Component Communication

Kubernetes Control Plane components communicate through APIs and internal networks to manage cluster state and orchestrate containerized workloads.

Kubernetes Control Plane Component Communication is the specific set of network connections, ports, and credentials used among kube-apiserver, etcd, kube-scheduler, and kube-controller-manager themselves, distinct from the broader node-to-control-plane and control-plane-to-node traffic patterns, tracing exactly which of these components opens a connection to which other, on what port, and under what authentication.


kube-apiserver to etcd

The Only Direct Control Plane Connection to etcd

kube-apiserver formally opens client connections to etcd's client port, conventionally 2379, authenticated via mutual TLS using a dedicated client certificate issued for this purpose; no other control plane component holds credentials for this connection, making it the single, exclusive communication path into etcd from within the control plane.

kube-apiserver \
  --etcd-servers=https://etcd-1:2379,https://etcd-2:2379,https://etcd-3:2379 \
  --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt \
  --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key \
  --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
etcd clients = { kube-apiserver }

etcd Inter-Member Communication

Separately from client traffic, etcd members formally communicate among themselves on a distinct peer port, conventionally 2380, exchanging Raft consensus messages, log replication, and heartbeats, secured by peer-specific TLS certificates distinct from the client-facing certificates used by kube-apiserver.

etcd \
  --listen-peer-urls=https://0.0.0.0:2380 \
  --listen-client-urls=https://0.0.0.0:2379

kube-scheduler to kube-apiserver

Client-Only Relationship

kube-scheduler formally connects to kube-apiserver as an ordinary authenticated API client, using a dedicated client certificate or kubeconfig identifying it as system:kube-scheduler, establishing watches on unscheduled Pods and issuing binding writes back through the same connection, with no separate port or protocol specific to the scheduler.

apiVersion: v1
kind: Config
clusters:
  - name: local
    cluster:
      server: https://127.0.0.1:6443
users:
  - name: system:kube-scheduler
    user:
      client-certificate: /etc/kubernetes/pki/scheduler.crt
      client-key: /etc/kubernetes/pki/scheduler.key
kube-scheduler kube-apiserver only , never etcd directly

kube-controller-manager to kube-apiserver

Same Pattern, Broader Permission Scope

kube-controller-manager formally follows the identical client-connection pattern as the scheduler, authenticating as system:kube-controller-manager, but its bound RBAC permissions are formally broader, since its many internal control loops collectively require read and write access across a much wider set of resource types than scheduling alone requires.

kubectl describe clusterrole system:kube-controller-manager

Leader Election Traffic

Lease Objects as the Coordination Channel

Where kube-scheduler and kube-controller-manager run with multiple replicas, their leader election coordination is formally carried entirely through ordinary API writes to Lease objects in the kube-system namespace; there is no separate, direct network channel between competing replicas, each replica interacts only with kube-apiserver, never with its peers.

kubectl -n kube-system get lease kube-scheduler -o yaml
replica A kube-apiserver replica B , no direct A-B channel

cloud-controller-manager to kube-apiserver and the Cloud Provider

Two Distinct Outbound Connections

cloud-controller-manager formally maintains two separate kinds of outbound connections: an authenticated API client connection to kube-apiserver, identical in pattern to the scheduler's, and a separate connection to the underlying cloud provider's own management API, used to provision load balancers, attach volumes, or query node metadata, entirely outside the Kubernetes API surface.

cloud-controller-manager \
  --kubeconfig=/etc/kubernetes/cloud-controller-manager.conf \
  --cloud-provider=codartium-cloud \
  --cloud-config=/etc/kubernetes/cloud.conf

What Formally Never Happens

No Direct Component-to-Component Calls Bypassing the API Server

At no point does kube-scheduler formally call kube-controller-manager, or vice versa, and neither ever calls a kubelet directly for the purpose of control plane coordination; every one of these interactions, if it needs to occur at all, is mediated entirely through reads and writes against kube-apiserver, which in turn is the sole component authorized to reach etcd.

control plane graph = star topology centered on kube-apiserver
netstat -tlnp | grep -E '6443|2379|2380'

Why Communication Is Restricted to This Specific Set of Paths

Limiting control plane component communication to this small, explicit set of connections, each component to kube-apiserver, kube-apiserver alone to etcd, etcd members to each other, is what makes the control plane's security surface fully enumerable: every trust relationship between components corresponds to exactly one of these named connections, each independently securable with its own dedicated certificate, rather than an unbounded mesh of possible component-to-component paths that would be far harder to reason about or restrict.