<p>I deploy my cluster on GKE with an Ingress Controller</p>

<p>I use <a href="https://kubernetes.github.io/ingress-nginx/deploy/#using-helm" rel="nofollow noreferrer">Helm</a> to install the following:</p>

<ul>
<li>Installed <strong><a href="https://github.com/kubernetes/ingress-nginx" rel="nofollow noreferrer">Ingress Controller</a></strong></li>
<li>Deployed Load Balancer Service (Create a Load Balancer on GCP as well)</li>
</ul>

<p>I also deployed the <strong>Ingress Object</strong> (Config as below)</p>

<hr>

<p>Then I observed the following status ...</p>

<p>The <strong>Ingress Controller</strong> is exposed (By Load Balancer Service) with two endpoints: 35.197.XX.XX:80, 35.197.XX.XX:443 </p>

<p>These two endpoints are exposed by the Cloud load balancer.
I have no problem with it.</p>

<p>However, when I execute <code>kubectl get ing ingress-service -o wide</code>, it prints out the following info.</p>

<pre><code>NAME              HOSTS             ADDRESS       PORTS     AGE
ingress-service   k8s.XX.com.tw   34.87.XX.XX   80, 443   5h50m
</code></pre>

<p>I really don't under the use of the IP under the ADDRESS column.</p>

<p>I can also see that Google add some extra info to the end of my Ingress config file about load balancer IP for me.</p>

<pre><code>apiVersion: extensions/v1beta1
kind: Ingress
metadata:
   ....(ommitted)
spec:
  rules:
  - host: k8s.XX.com.tw
    http:
      paths:
      - backend:
          serviceName: client-cluster-ip-service
          servicePort: 3000
        path: /?(.*)
      - backend:
          serviceName: server-cluster-ip-service
          servicePort: 5000
        path: /api/?(.*)
  tls:
  - hosts:
    - k8s.XX.com.tw
    secretName: XX-com-tw
status:
  loadBalancer:
    ingress:
    - ip: 34.87.XX.XX
</code></pre>

<p>According to <a href="https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer#step_4_visit_your_application" rel="nofollow noreferrer">Google's doc</a>, this (<strong>34.87.XX.XX</strong>) looks like an external IP, but I can't access it with <a href="http://34.87.XX.XX" rel="nofollow noreferrer">http://34.87.XX.XX</a></p>

<hr>

<p>My question is that since we already have an external IP (35.197.XX.XX) to receive the traffic, why do we need this ADDRESS for the <strong>ingress-service</strong>?</p>

<p>If it's an internal or external IP ADDRESS? 
What is this ADDRESS bound to?
What exactly is this ADDRESS used for?</p>

<p>Can anyone shed some light? Thanks a lot!</p>

<p>If you simply go take a look at the documentation you will have your answer.</p>

<p>What is an ingress ressource: <a href="https://kubernetes.io/docs/concepts/services-networking/ingress/#what-is-ingress" rel="nofollow noreferrer">https://kubernetes.io/docs/concepts/services-networking/ingress/#what-is-ingress</a></p>

<p>So following the doc: </p>

<blockquote>
  <p>Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the Ingress resource.</p>
</blockquote>

<p>To be more precise on cloud provider, the ingress will create a load-balancer to expose the service to the internet. The cocumentation on the subject specific to gke: <a href="https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer" rel="nofollow noreferrer">https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer</a></p>

<p>That explains why you have an external ip for the ingress.</p>

<p>What you should do now:</p>

<ul>
<li>If you don't want to expose HTTP or/and HTTPS ports just delete the ingress ressource, you don't use it so it's pretty much useless.</li>
<li>If you are using HTTP/HTTPS ressources, change your service type to nodePort and leave the management of the load balancer to the ingress.</li>
</ul>

<p>My opinion is that, as you are deploying the ingress-controller, you should select the second option and leave the management of the load-balancer to it. For the ingress of the ingress-controller, don't define rules just the backend to the nodePort service, the rules should be defined in specific ingress for each app and be managed by the ingress-controller.</p>
