gcloud ingress loadbalancer / static ip

ghz 1years ago ⋅ 9738 views

Question

Having set the default gce ingress controller working with ingresses resources set to respond to hostnames

The advantage of having a static ip (in my very current point of view) is that you never wonder where to configure your domain to, it will always remain the same ip; and on the other side you can stick as much service as you want behind it

I'm quite new using this gce loadbalancer, can I rely on it as I would with a static ip (meaning it'll never change) ? Or is there a layer to add to point a static ip to a loadbalancer ?

I'm asking because you can set the ip of a service resource. But I have no clue yet about doing the same with this lbc/ingress combo — assigning a static ip to an ingress ?

I've checked around, there seem to exist some 'forwarding' (static ip to load balancer)… but I'd really appreciate some experienced help on this one, at least to end up understanding it all clearly

Best


Answer

Finally I have a working solution. You gotta add an L4 Service using loadBalancerIP: x.x.x.x where you put a previously reserved static IP, and then put a selector that the deployment/RC already has, like this:

UPDATE [Nov-2017]: Static IP should be regional and in the same region as cluster

Service:

apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress-svc
spec:
  type: LoadBalancer
  loadBalancerIP: 104.155.55.37  # static IP pre-allocated.
  ports:
    - port: 80
      name: http
    - port: 443
      name: https
  selector:
    k8s-app: nginx-ingress-lb

Controller:

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-ingress-rc
  labels:
    k8s-app: nginx-ingress-lb
spec:
  replicas: 1
  selector:
    k8s-app: nginx-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: nginx-ingress-lb
    spec:
      containers:
      - image: eu.gcr.io/infantium-platform-20/nginx-ingress
        imagePullPolicy: Always
        name: nginx-ingress
        ports:
        - containerPort: 80
          hostPort: 80
        - containerPort: 443
          hostPort: 443
        args:
        - -nginx-configmaps=staging/nginx-staging-config

Solution hint was sourced from this example: https://beroux.com/english/articles/kubernetes/?part=3

Hope this helps.