<p>As we can see in <a href="https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters" rel="nofollow noreferrer">this documentation</a>. A private cluster is accessible by the VMs (GCP compute instances) in the same subnet by default. Here is what is mentioned in the docs :</p>

<pre><code>From other VMs in the cluster's VPC network: 
Other VMs can use kubectl to communicate with the private endpoint
only if they are in the same region as the cluster 
and their internal IP addresses are included in 
the list of master authorized networks.
</code></pre>

<p>I have tested this: <br></p>

<ul>
<li>the cluster is accessible from VMs in the same subnetwork as the cluster</li>
<li>the cluster is not accessible from the VMs in different subnets.</li>
</ul>

<p>How does this private cluster figure out which VMs to give access and which VMs to reject?</p>

Amit Yadav
<p>The Compute Engine instances (or <em>nodes</em>) in a private cluster are isolated from the internet and have access to <a href="https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters#overview" rel="nofollow noreferrer">the Master API server endpoint</a> for authentication, that is publicly exposed in the Google-managed project. However, resources outside the VPC aren't, by default, allowed to reach said endpoint.</p>

<p>Master Authorized Networks are used to allow the GKE Master API available to the whitelisted external networks/addresses that want to authenticate against it. Is not related to disallow communication within the compute resources in the cluster VPC. For that, you can simply use <a href="https://cloud.google.com/vpc/docs/firewalls#ingress_cases" rel="nofollow noreferrer">VPC level firewall rules</a>.</p>
