<p>I am trying to work through the Istio quickstart guide here and am having trouble with the step <a href="https://preliminary.istio.io/docs/examples/bookinfo/#confirm-the-app-is-accessible-from-outside-the-cluster" rel="nofollow noreferrer">confirm the app is accessible from outside the cluster</a>. </p>

<p>I'm on a mac and running docker for desktop rather than minikube.</p>

<p><a href="https://i.stack.imgur.com/3djcv.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/3djcv.png" alt="docker desktop version information"></a></p>

<p>I am also behind a proxy at work but even when I bypass the proxy I get the following error:</p>

<pre><code>$ curl http://${GATEWAY_URL}/productpage -v
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connection failed
* connect to 127.0.0.1 port 30489 failed: Connection refused
* Failed to connect to 127.0.0.1 port 30489: Connection refused
* Closing connection 0

curl: (7) Failed to connect to 127.0.0.1 port 30489: Connection refused
</code></pre>

<p>The pod is running:</p>

<pre><code>$ kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
details-v1-c5b5f496d-ccw5f       2/2     Running   0          18h
productpage-v1-c7765c886-xm2jd   2/2     Running   0          18h
ratings-v1-f745cf57b-5df2q       2/2     Running   0          18h
reviews-v1-75b979578c-jtc5l      2/2     Running   0          18h
reviews-v2-597bf96c8f-g7bzd      2/2     Running   0          18h
reviews-v3-54c6c64795-gbqqj      2/2     Running   0          18h
</code></pre>

<p>I'm able to curl it from within a pod:</p>

<pre><code>$ kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "&lt;title&gt;.*&lt;/title&gt;"
&lt;title&gt;Simple Bookstore App&lt;/title&gt;
</code></pre>

<p>I'm not certain what I may be doing wrong. Any guidance is greatly appreciated!</p>

<p>I found the confusion thanks to <a href="https://discuss.istio.io/t/istio-on-docker-edge-cant-access-service-externally/2408" rel="nofollow noreferrer">this post</a> in the istio community. In that post they mention that to find the ingress port they are running the following command:</p>

<pre><code>export INGRESS_PORT=$(kubectl -n istio-system get service istio- ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
</code></pre>

<p>This differs from what you are instructed to do on the bookinfo <a href="https://istio.io/docs/examples/bookinfo/#determine-the-ingress-ip-and-port" rel="nofollow noreferrer">tutorial</a> when on step 3 you are asked to go <a href="https://istio.io/docs/tasks/traffic-management/ingress/ingress-control/#determining-the-ingress-ip-and-ports" rel="nofollow noreferrer">here</a> to determine your ingress host and port. There, if you are running locally and don't have a public loadbalancer you are told to pull the nodeport like this:</p>

<pre><code>export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
</code></pre>

<p>If I instead change the json element to 'port' it works perfectly!</p>

<pre><code>export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
</code></pre>

<p>Sample curl from tutorial:</p>

<pre><code>$ curl -v -s http://127.0.0.1:80/productpage | grep -o "&lt;title&gt;.*&lt;/title&gt;"
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
&gt; GET /productpage HTTP/1.1
&gt; Host: 127.0.0.1
&gt; User-Agent: curl/7.54.0
&gt; Accept: */*
&gt;
&lt; HTTP/1.1 200 OK
&lt; content-type: text/html; charset=utf-8
&lt; content-length: 4183
&lt; server: istio-envoy
&lt; date: Tue, 24 Dec 2019 20:28:55 GMT
&lt; x-envoy-upstream-service-time: 940
&lt;
{ [4183 bytes data]
* Connection #0 to host 127.0.0.1 left intact
&lt;title&gt;Simple Bookstore App&lt;/title&gt;
</code></pre>

<p>Hopefully this helps somebody that was struggling like I was.</p>
