'kubectl - How to edit service spec type to LoadBalancer via command line?

I have a k8s service of type clusterIP.. i need to change the below configuration via CLI

  1. the http port to https port
  2. the port number
  3. the type to Load Balancer

Is there a way to do it..?



Solution 1:[1]

You can't remove the existing port, but you can add the HTTPs port and also change the type using kubectl patch

Example:

kubectl patch svc <my_service> -p '{"spec": {"ports": [{"port": 443,"targetPort": 443,"name": "https"},{"port": 80,"targetPort": 80,"name": "http"}],"type": "LoadBalancer"}}'

If you don't want to create JSON on the command line, create a yaml file like so:

ports:
  - port: 443
    targetPort: 443
    name: "https"
  - port: 80
    targetPort: 80
    name: "http"
  type: LoadBalancer

And then do:

kubectl patch svc <my_service> --patch "$(cat patch.yaml)"

Solution 2:[2]

kubectl edit svc <service_name> -n <namespace>

i - to edit the service

ESC, :wq - update your service

Use kubectl patch svc <service_name> -p '{"spec": ....}' if you don't want the prompt.

Solution 3:[3]

The original solution does not works on powershell. Here is the following we need to do in order to make it work.

kubectl patch

Powershell:

kubectl patch svc <my_service> -p '{\"spec\": {\"ports\": [{\"port\": 443,\"targetPort\": 443,\"name\": \"https\"},{\"port\": 80,\"targetPort\": 80,\"name\": \"http\"}],\"type\": \"LoadBalancer\"}}'.

Notice the \ for powershell use case.

Bash:

kubectl patch svc <my_service> -p '{"spec": {"ports": [{"port": 443,"targetPort": 443,"name": "https"},{"port": 80,"targetPort": 80,"name": "http"}],"type": "LoadBalancer"}}'

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 jaxxstorm
Solution 2
Solution 3 Chandra Prakash Ajmera