<p>I deployed a istio to k8s and it works well at first, but after one day, I can't access the app via ingress gateway. Then checked the istio svc status. It shows the external ip of the istio ingress gateway is pending.</p>

<p>I checked logs and events of the service, but there is nothing. What's the most possibility cause of the issue?</p>

<p>the external ip stay pending:</p>

<p><img src="https://i.stack.imgur.com/3euP8.png" alt="the external ip stay pending"></p>

<p>This is most likely caused by using platform that does not provide an external loadbalancer to istio ingress gateway.</p>
<p>According to <a href="https://istio.io/latest/docs/tasks/traffic-management/ingress/ingress-control/#determining-the-ingress-ip-and-ports" rel="nofollow noreferrer">istio</a> documentation:</p>
<blockquote>
<p>If the <code>EXTERNAL-IP</code> value is set, your environment has an external load balancer that you can use for the ingress gateway. If the <code>EXTERNAL-IP</code> value is <code>&lt;none&gt;</code> (or perpetually <code>&lt;pending&gt;</code>), your environment does not provide an external load balancer for the ingress gateway. In this case, you can access the gateway using the service’s <a href="https://kubernetes.io/docs/concepts/services-networking/service/#nodeport" rel="nofollow noreferrer">node port</a>.</p>
</blockquote>
<hr />
<p>Follow these instructions if you have determined that your environment has an external load balancer.</p>
<p>Set the ingress IP and ports:</p>
<pre><code>export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name==&quot;http2&quot;)].port}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name==&quot;https&quot;)].port}')
export TCP_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name==&quot;tcp&quot;)].port}')
</code></pre>
<p>In certain environments, the load balancer may be exposed using a host name, instead of an IP address. In this case, the ingress gateway’s  <code>EXTERNAL-IP</code>  value will not be an IP address, but rather a host name, and the above command will have failed to set the  <code>INGRESS_HOST</code>  environment variable. Use the following command to correct the  <code>INGRESS_HOST</code>  value:</p>
<pre><code>export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
</code></pre>
