<p>We have all our services running with Kubernetes. We want to know what is the best practice to deploy our own API gateway, we thought of 2 solutions:</p>
<ol>
<li><p>Deploy API gateways outside the Kubernetes cluster(s), i.e. with Kong. This means the clusters' ingress will connect to the external gateways.  The gateway is either VM or physical machines, and you can scale by replicating many gateway instances</p>
</li>
<li><p>Deploy gateway from within Kubernetes (then maybe connect to external L4 load balancer), i.e. Ambassador. However, with this approach, each cluster can only have 1 gateway. The only way to prevent fault-tolerance is to actually replicate the entire K8s cluster</p>
</li>
</ol>
<p>What is the typical setup and what is better?</p>

kent
<p>The typical setup for an api gateway in kubernetes is either using a load balancer service, if the cloud provider that you are using support dynamic provision of load balancers (all major cloud vendors like gcp, aws or azure support it), or even more common to use an ingress controller.</p>
<p>Both of these options can scale horizontally so you have fault tolerance, in fact there is already a solution for ingress controller using kong</p>
<p><a href="https://github.com/Kong/kubernetes-ingress-controller" rel="nofollow noreferrer">https://github.com/Kong/kubernetes-ingress-controller</a></p>
