How can I create Kubernetes load balancer with an ephemeral IP in GKE?

11/19/2018

How can I configure a LoadBalancer to retrieve a ephemeral rather than static IP?

I need this so I don't have to WAIT FOR GOOGLE TO INCREASE THE QUOTA FROM 1 IP ADDRRESS... (It's been a long day...)

  Normal   EnsuringLoadBalancer        3m (x7 over 8m)  service-controller  Ensuring load balancer
  Warning  CreatingLoadBalancerFailed  3m (x7 over 8m)  service-controller  Error creating load balancer (will retry): failed to ensure load balancer for service default/subzero-react: failed to ensure a static IP for load balancer (*****************(default/subzero-react)): error creating gce static IP address: googleapi: Error 403: Quota 'STATIC_ADDRESSES' exceeded. Limit: 1.0 in region us-central1., quotaExceeded

Upon removing the loadBalancerIp field and recreating the service, it still remains in pending.

This is the output of kubectl get service ****** -o yaml:

kubectl get service **** -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"api"},"name":"subzero-react","namespace":"default"},"spec":{"ports":[{"name":"http","port":80}],"selector":{"app":"initial-pp3subzero"},"type":"LoadBalancer"}}
  creationTimestamp: 2018-11-19T18:04:24Z
  labels:
    app: api
  name: *****************
  namespace: default
  resourceVersion: "584211"
  selfLink: /api/v1/namespaces/default/services/**********
  uid: 8c140d40-ec25-11e8-b7b3-42010a8000c2
spec:
  clusterIP: 10.7.242.176
  externalTrafficPolicy: Cluster
  ports:
  - name: http
    nodePort: 31853
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: ******************
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer: {}
-- Chris Stryczynski
google-cloud-platform
google-kubernetes-engine
kubernetes
kubernetes-service

1 Answer

11/20/2018

To not assign a static IP on a GCP load balancer with Kubernetes (default behavior) you generally don't need to specify anything in the loadBalancerIP service spec as described here and here.

You can delete your service and re-create it without the loadBalancerIP or you can patch it:

$ kubectl patch service <service-name> -p '{"spec": { "loadBalancerIP": null }}'
-- Rico
Source: StackOverflow