<p>Let's say I'm using an GCE <code>ingress</code> to handle traffic from outside the cluster and terminate TLS (<code>https://example.com/api/items</code>), from here the request gets routed to one of two <code>services</code> that are only available inside the cluster. So far so good.  </p>

<p>What if I have to call service B from service A, should I go all the way and use the cluster's external IP/domain and use HTTPS (<code>https://example.com/api/user/1</code>) to call the service or could I use the internal IP of the service and use HTTP (<code>http://serviceb/api/user/1</code>)? Do I have to encrypt the data or is it "safe" as long as it isn't leaving the private k8s network?</p>

<p>What if I want to have "internal" endpoints that should only be accessible from within the cluster - when I'm always using the external https-url those endpoints would be reachable for everyone. Calling the service directly, I could just do a <code>http://serviceb/internal/info/abc</code>.</p>

<blockquote>
  <p>What if I have to call service B from service A, should I go all the way and use the cluster's external IP/domain and use HTTPS (<a href="https://example.com/api/user/1" rel="noreferrer">https://example.com/api/user/1</a>) to call the service or could I use the internal IP of the service and use HTTP (<a href="http://serviceb/api/user/1" rel="noreferrer">http://serviceb/api/user/1</a>)?</p>
</blockquote>

<p>If you need to use the features that you API Gateway is offering (authentication, cache, high availability, load balancing) then YES, otherwise DON'T. The External facing API should contain only endpoints that are used by external clients (from outside the cluster).</p>

<blockquote>
  <p>Do I have to encrypt the data or is it "safe" as long as it isn't leaving the private k8s network?</p>
</blockquote>

<p>"safe" is a very relative word and I believe that there are no 100% safe networks. You should put in the balance <strong>the probability</strong> of "somebody" or "something" sniffing data from the network and <strong>the impact</strong> that it has on your business if that happens.</p>

<p>If this helps you: for any project that I've worked for (or I heard from somebody I know), the private network between containers/services was more than sufficient.</p>

<blockquote>
  <p>What if I want to have "internal" endpoints that should only be accessible from within the cluster - when I'm always using the external https-url those endpoints would be reachable for everyone. </p>
</blockquote>

<p>Exactly what I was saying on top of the answer. Keeping those endpoints inside the cluster makes them inaccessible by design from outside.</p>

<p>One last thing, managing a lot of <code>SSL</code> certificates for a lot of internal services is a pain that one should avoid if not necessary.</p>
