<p>I have a GKE service with load balancer, but I want to use it internally by my other services, e.g. <strong>I want public IP not to be assigned to it</strong></p>

<p>Is is it possible without private VPN and juggling over firewall settings?</p>

<p>All other load-balancing (like <code>kube-dns</code>) features work great and for services within my Container Engine do not need public IP</p>

<p>All nodes live in same region and zone so I do not need and do not care about multi-regional features</p>

<p>GKE supports <a href="https://cloud.google.com/container-engine/docs/internal-load-balancing" rel="noreferrer">Internal Load Balancing</a> now:</p>

<pre><code>apiVersion: v1
kind: Service
metadata:
  name: [SERVICE-NAME]
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
  labels:
    app: echo
spec:
  type: LoadBalancer
  loadBalancerIP: [IP-ADDRESS]
  ports:
  - port: 9000
    protocol: TCP
  selector:
    [KEY]: [VALUE]
</code></pre>

<p>Notice the annotation: <code>cloud.google.com/load-balancer-type: "Internal"</code>.
This will create a LoadBalancer Service with a private IP-Address routable from within your VPC.</p>

<p>Bitnami also has a great blog post on this:
<a href="https://engineering.bitnami.com/articles/creating-private-kubernetes-clusters-on-gke.html" rel="noreferrer">creating-private-kubernetes-clusters-on-gke</a>.</p>
