<p>I have successfully connect my Kubernetes-Cluster with Gitlab. Also I was able to install Helm through the Gitlab UI (Operations->Kubernetes) 
My Problem is that if I click on the "Install"-Button of Ingress Gitlab will create all the nessecary stuff that is needed for the Ingress-Controller. But one thing will be missed : external IP. External IP will mark as "?". </p>

<p>And If I run this command: </p>

<pre><code>kubectl get svc --namespace=gitlab-managed-apps ingress-nginx-ingress- controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}'; echo
</code></pre>

<p>It will show nothing. Like I won´t have a Loadbalancer that exposes an external IP. </p>

<p><strong>Kubernetes Cluster</strong></p>

<p>I installed Kubernetes through kubeadm, using flannel as CNI</p>

<p><strong>kubectl version:</strong></p>

<pre><code>Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2"}
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2"}
</code></pre>

<p>Is there something that I have to configure before installing Ingress. Do I need an external Loadbalancer(my thought: Gitlab will create that service for me)?</p>

<p>One more hint: After installation, the state of the Nginx-Ingress-Controller Service will be stay on pending. The reason for that it is not able to detect external IP. I also modified the yaml-File of the service and I manually put the "externalIPs : -External-IP line. The output of this was that it was not pending anymore. But still I couldn't find an external IP by typing the above command and Gitlab also couldn´t find any external IP</p>

<p>EDIT: 
This happens after installation:
<a href="https://i.stack.imgur.com/GyE03.png" rel="nofollow noreferrer">see picture</a></p>

<p>EDIT2:
By running the following command:      </p>

<pre><code>kubectl describe svc ingress-nginx-ingress-controller -n gitlab-managed-apps
</code></pre>

<p>I get the following result:</p>

<p><a href="https://i.stack.imgur.com/gav1U.png" rel="nofollow noreferrer">see picture</a></p>

<p>In Event log you will see that I switch the type to "NodePort" once and then back to "LoadBalancer" and I added the "externalIPs: -192.168.50.235" line in the yaml file. As you can see there is an externalIP but Git is not detecting it. </p>

<p>Btw. Im not using any of these cloud providers like AWS or GCE and I found out that LoadBalancer is not working that way. But there must be a solution for this without LoadBalancer.</p>

<p>I would consider to look at <a href="https://metallb.universe.tf/" rel="nofollow noreferrer">MetalLB</a> as for the main provisioner of Load balancing service in your cluster. If you don't use any of Cloud providers in order to obtain the entry point (External IP) for <code>Ingress</code> resource, there is option for Bare-metal environments to switch to <code>MetalLB</code> solution which will create Kubernetes services of type <code>LoadBalancer</code> in the clusters that don’t run on a cloud provider, therefore it can be also implemented for <a href="https://kubernetes.github.io/ingress-nginx/deploy/baremetal/" rel="nofollow noreferrer">NGINX Ingress Controller</a>.</p>

<p>Generally, <code>MetalLB</code> can be installed via Kubernetes manifest file or using <a href="https://docs.helm.sh/" rel="nofollow noreferrer">Helm</a> package manager as described <a href="https://metallb.universe.tf/installation/" rel="nofollow noreferrer">here</a>. </p>

<p><code>MetalLB</code> deploys it's own services across Kubernetes cluster and it might require to reserve pool of IP addresses in order to be able to take ownership of the <code>ingress-nginx</code> service. This pool can be defined in a <code>ConfigMap</code> called <code>config</code> located in the same namespace as the <code>MetalLB</code> controller:</p>

<pre><code>apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 203.0.113.2-203.0.113.3
</code></pre>

<p>External IP would be assigned to your <code>LoadBalancer</code> once ingress service obtains IP address from this address pool. </p>

<p>Find more details about <code>MetalLB</code> implementation for NGINX Ingress Controller in official <a href="https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#a-pure-software-solution-metallb" rel="nofollow noreferrer">documentation</a>.</p>
