<p>I'm a bit confused about communication model between K8s master components. How does <em>kube-apiserver</em>, <em>kube-controller-manager</em> and <em>kube-scheduler</em> communicate with each other?</p>

<p>According to <a href="https://kubernetes.io/docs/concepts/architecture/master-node-communication/#cluster-to-master" rel="nofollow noreferrer">official doc</a>, it seems to me that only <em>kube-controller-manager</em> and <em>kube-scheduler</em> connects to <em>kube-apiserver</em>, but not the other way around. However, I found there were bunch of server-flavored flags provided by both <em>kube-controller-manager</em> and <em>kube-scheduler</em>, such as <code>--bind-address</code> or <code>--client-ca-file</code>. So they are both definitely acting as a server too, which I can further confirm using <code>curl localhost:10251/healthz</code> and <code>curl localhost:10252/healthz</code>.</p>

<p>So the big question mark in my head now is that, what functionalities were provided by <em>kube-controller-manager</em>'s and <em>kube-scheduler</em>'s server ports? And were they used by <em>kube-apiserver</em>?</p>

<p>They are not used by kube-apiserver.</p>

<p>That is health check ports to export current health status and metrics. <code>--client-ca-file</code>  is an option for outgoing connections. </p>

<p>Here is a related path of a <a href="https://github.com/kubernetes/kubernetes/blob/master/cmd/kube-scheduler/app/options/insecure_serving.go" rel="noreferrer">source code</a> of kube-scheduler.</p>
