[Question] Where and how to set the External IP Address of the LoadBalancer Service?

From my Cloud Provider got a LoadBalancer Service: an IPv4 Address xx.xx.xxx.xxx and Outbound IPv4 yy.yyy.y.y/14

Where exactly do I have to specify the IPv4 Address of the LoadBalancer Service ( I guess xx.xx.xxx.xxx) in weaviate-helm/weaviate/values.yaml at main · weaviate/weaviate-helm · GitHub ?

hi @Raphy !!

Welcome to our community :hugs: !!

This information doesn’t go on Weaviate, but on the load balancer itself.

You should point http calls to 8080 and grpc calls to 50051 (Weviate default ports), as per our doc: Docker | Weaviate Documentation

Let me know if this helps!

Happy coding / deploying :wink:

Hi!

Control Panel of OVHcloud (my Cloud Provider) :

I installed weaviate :

raphy@raohy:~/.talos/weaviate$ kubectl apply -f weaviate-storage.yaml 
persistentvolume/weaviate-volume created
raphy@raohy:~/.talos/weaviate$ helm -n weaviate upgrade --install "weaviate" weaviate/weaviate --values weaviate/values.yaml
Release "weaviate" does not exist. Installing it now.

But I do not get the LoadBalancer :

raphy@raohy:~/.talos/weaviate$ kubectl -n weaviate get pvc
NAME                       STATUS   VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS    VOLUMEATTRIBUTESCLASS   AGE
weaviate-data-weaviate-0   Bound    weaviate-volume   32Gi       RWO            local-storage   <unset>                 8s
raphy@raohy:~/.talos/weaviate$ kubectl -n weaviate get pv
NAME              CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                               STORAGECLASS    VOLUMEATTRIBUTESCLASS   REASON   AGE
weaviate-volume   32Gi       RWO            Retain           Bound    weaviate/weaviate-data-weaviate-0   local-storage   <unset>                          37s

raphy@raohy:~/.talos/weaviate$ kubectl -n weaviate get svc
NAME                TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
weaviate            LoadBalancer   10.107.253.53   <pending>     8080:30828/TCP    11m
weaviate-grpc       LoadBalancer   10.108.6.61     <pending>     50051:32125/TCP   11m
weaviate-headless   ClusterIP      None            <none>        80/TCP            11m

raphy@raohy:~/.talos/weaviate$ kubectl -n weaviate describe svc weaviate
Name:                     weaviate
Namespace:                weaviate
Labels:                   app.kubernetes.io/managed-by=Helm
                          app.kubernetes.io/name=weaviate
Annotations:              meta.helm.sh/release-name: weaviate
                          meta.helm.sh/release-namespace: weaviate
Selector:                 app=weaviate
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       zz.zzz.zzz.zz
IPs:                      zz.zzz.zzz.zz
Port:                     http  8080/TCP
TargetPort:               8080/TCP
NodePort:                 http  30828/TCP
Endpoints:                
Session Affinity:         None
External Traffic Policy:  Cluster
Internal Traffic Policy:  Cluster
Events:                   <none>

@DudaNogueira those are my settings in my OVHcloud control panel. What am I doing wrong and/or missing? How to make the LoadBalancer service work?

@DudaNogueira I do not understand this:

If I add in weaviate/values.yaml : externalIPs: ["xx.xx.xxx.xxx"] :

service:
  name: weaviate
  ports:
    - name: http
      protocol: TCP
      port: 8080
      # Target port is going to be the same for every port
  type: LoadBalancer
  externalIPs: ["xx.xx.xxx.xxx"]
  loadBalancerSourceRanges: []
  # optionally set cluster IP if you want to set a static IP
  clusterIP:
  #externalIPs: "51.68.117.154"
  annotations: {}

# The service controls how weaviate gRPC endpoint is exposed to the outside world.
# If you don't want a public load balancer, you can also choose 'ClusterIP' or `NodePort`
# to make weaviate gRPC port be only accessible within your cluster.
# This service is by default enabled but if you don't want it to be deployed in your
# environment then it can be disabled by setting enabled: false option.
grpcService:
  enabled: true
  name: weaviate-grpc
  ports:
    - name: grpc
      protocol: TCP
      port: 50051
      # Target port is going to be the same for every port
  type: LoadBalancer
  externalIPs: ["xx.xx.xxx.xxx"]
  loadBalancerSourceRanges: []
  # optionally set cluster IP if you want to set a static IP
  clusterIP:

I do not get the External-IP for the LoadBalancer Services :

raphy@raohy:~/.talos/weaviate$ kubectl -n weaviate get svc
NAME                TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
weaviate            LoadBalancer   yy.yyy.yy.yyy   <pending>     8080:31822/TCP    2m40s
weaviate-grpc       LoadBalancer   yy.yyy.yy.yyy  <pending>     50051:31085/TCP   2m40s
weaviate-headless   ClusterIP      None             <none>        80/TCP            2m40s
raphy@raohy:~/.talos/weaviate$ 

But if I do not insert externalIPs: [“xx.xx.xxx.xxx”] into LoadBalancer Services in weaviate/values.yaml :

service:
  name: weaviate
  ports:
    - name: http
      protocol: TCP
      port: 8080
      # Target port is going to be the same for every port
  type: LoadBalancer
  loadBalancerSourceRanges: []
  # optionally set cluster IP if you want to set a static IP
  clusterIP:
  #externalIPs: "51.68.117.154"
  annotations: {}

# The service controls how weaviate gRPC endpoint is exposed to the outside world.
# If you don't want a public load balancer, you can also choose 'ClusterIP' or `NodePort`
# to make weaviate gRPC port be only accessible within your cluster.
# This service is by default enabled but if you don't want it to be deployed in your
# environment then it can be disabled by setting enabled: false option.
grpcService:
  enabled: true
  name: weaviate-grpc
  ports:
    - name: grpc
      protocol: TCP
      port: 50051
      # Target port is going to be the same for every port
  type: LoadBalancer
  loadBalancerSourceRanges: []
  # optionally set cluster IP if you want to set a static IP
  clusterIP:
  annotations: {}

install the plain weaviate/values.yaml :

raphy@raohy:~/.talos/weaviate$ kubectl apply -f weaviate-storage.yaml 
persistentvolume/weaviate-volume created
raphy@raohy:~/.talos/weaviate$ 
raphy@raohy:~/.talos/weaviate$ helm -n weaviate upgrade --install "weaviate" weaviate/weaviate --values weaviate/values.yaml
Release "weaviate" does not exist. Installing it now.

raphy@raohy:~/.talos/weaviate$ kubectl -n weaviate get svc
NAME                TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
weaviate            LoadBalancer   aa.aaa.aa.aaa   <pending>     8080:30481/TCP    80s
weaviate-grpc       LoadBalancer   bb.bbb.bbb.bb   <pending>     50051:32275/TCP   80s
weaviate-headless   ClusterIP      None            <none>        80/TCP            80s

And, then, apply, a patch to the services, setting the externalIPs:

raphy@raohy:~/.talos/weaviate$ kubectl -n weaviate patch svc weaviate -p '{"spec":{"externalIPs":["xx.xx.xxx.xxx"]}}'
service/weaviate patched
raphy@raohy:~/.talos/weaviate$ kubectl -n weaviate patch svc weaviate-grpc -p '{"spec":{"externalIPs":["xx.xx.xxx.xxx"]}}'
service/weaviate-grpc patched

Then the LoadBalancer services have their External-IP set:

raphy@raohy:\~/.talos/weaviate$ kubectl -n weaviate get svc
 NAME                TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)           AGE
weaviate            LoadBalancer     aa.aaa.aa.aaa   xx.xx.xxx.xxx   8080:30481/TCP    4m18s
weaviate-grpc       LoadBalancer     bb.bbb.bbb.bb   xx.xx.xxx.xxx   50051:32275/TCP   4m18s
weaviate-headless   ClusterIP        None                  80/TCP            4m18s

Why?