<p>We've used Zuul as API gateway for a while in Microservices scene, recently we decided to move to Kubernetes and choose a more cloud native way.</p>

<p>After some investigation and going through the Istio docs, we have some questions about API gateway selection in Kubernetes:</p>

<ul>
<li>Which aspects should be considered when choosing an API gateway in Kubernetes?</li>
<li>Do we still need Zuul if we use Istio?</li>
</ul>

xring
<p>I assume that <a href="https://github.com/Netflix/zuul" rel="noreferrer">Zuul</a> offers a lots of features as an edge service for traffic management, routing and security functions. It has to declare API Gateway the main point of accessing microservices by the external clients as per Microservice Architecture pattern <a href="https://microservices.io/patterns/microservices.html" rel="noreferrer">Design</a>. However, Zuul needs to somehow discover underlying microservices and for Kubernetes you might need to adapt Kubernetes Discovery Client which defines the rules how API Gateway will detect routes and transmit network traffic to the nested services.</p>

<p>As per design, Istio represents Service mesh <a href="https://istio.io/docs/concepts/what-is-istio/#architecture" rel="noreferrer">architecture</a> and becomes Kubernetes oriented solution with smooth integration as well. The main concept here is using advanced version of <a href="https://envoyproxy.github.io/envoy/" rel="noreferrer">Envoy</a> proxy by injecting sidecars into Kubernetes Pods with no need to change or rewrite existing deployment or use any other methods for service discovery purposes. Zuul API Gateway can be fully replaced by Istio <a href="https://istio.io/docs/reference/config/networking/v1alpha3/gateway/" rel="noreferrer">Gateway</a> resource as the edge load balancer for ingress or egress HTTP(S)/TCP connections. Istio contains a set of <a href="https://istio.io/docs/reference/config/networking/" rel="noreferrer">traffic management</a> features which can be included in the general configuration.</p>

<p>You might be interested with other fundamental concepts of functional Istio facilities like: </p>

<ul>
<li><p>Authorization <a href="https://istio.io/docs/reference/config/authorization/" rel="noreferrer">model</a>;</p></li>
<li><p>Authentication <a href="https://istio.io/docs/reference/config/istio.authentication.v1alpha1/" rel="noreferrer">policies</a>;</p></li>
<li><p>Istio <a href="https://istio.io/docs/reference/config/policy-and-telemetry/" rel="noreferrer">telemetry</a> and Mixer policies.</p></li>
</ul>
