Following this guestbook tutorial.
Near the end they sort of gloss over how to create a LoadBalancer
or assign NodePorts
to the service. They reference this doc that describes the different types and what they do, but don't really go into detail about how to apply them to a service. Is there a way to update the running service, creating and attaching a load balancer to the specified ports?
Using Amazon Web Services to host our cluster, it supports load balancer great at creation of a service, but I'm not sure how to modify the service.
EDIT:
Trying this resulted in an error:
$ kubectl expose service frontend --port=80 --type=LoadBalancer
Error from server: service "frontend" already exists
It's pretty confusing, but apparently
kubectl expose
can only create a new service, not update an existing one. It says that when running on an existing service, you should pass a--name
flag to specify the desired name of the new service to avoid the conflict you were seeing.To update a service in place, you should be able to use either
kubectl patch
orkubectl update
. It's probably not the optimal approach, but I personally tend to do this sort of thing by runningkubectl get svc svc-name -o yaml > svc.yaml
, updating svc.yaml as desired (to havetype: LoadBalancer
in this case), thenkubectl update -f svc.yaml
.I'm not sure if this is suitable to your case, but a more radical and simpler approach would be to delete the service (but not the deployment):
and re-expose the deployment as LoadBalancer:
You can do it either:
kubectl edit <SERVICE_NAME>
and modify type to "LoadBalancer" in the editorkubectl patch <SERVICE_NAME> -p '{"spec":{"type":"LoadBalancer"}}'