2

I want to get specific output for a command like getting the nodeports and loadbalancer of a service. How do I do that?

Wytrzymały Wiktor
  • 11,492
  • 5
  • 29
  • 37
Anvay
  • 25
  • 1
  • 5
  • What have you tried so far (that didn't work or was showing undesired output)? Hav you tried `kubectl describe svc your-service-name`? – deHaar Jun 10 '21 at 06:40

2 Answers2

2

The question is pretty lacking on what exactly wants to be retrieved from Kubernetes but I think I can provide a good baseline.

When you use Kubernetes, you are most probably using kubectl to interact with kubeapi-server.

Some of the commands you can use to retrieve the information from the cluster:

  • $ kubectl get RESOURCE --namespace NAMESPACE RESOURCE_NAME
  • $ kubectl describe RESOURCE --namespace NAMESPACE RESOURCE_NAME

Example:

Let's assume that you have a Service of type LoadBalancer (I've redacted some output to be more readable):

  • $ kubectl get service nginx -o yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  clusterIP: 10.2.151.123
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30531
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: A.B.C.D

Getting a nodePort from this output could be done like this:

  • kubectl get svc nginx -o jsonpath='{.spec.ports[].nodePort}'
30531

Getting a loadBalancer IP from this output could be done like this:

  • kubectl get svc nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
A.B.C.D

You can also use kubectl with custom-columns:

  • kubectl get service -o=custom-columns=NAME:metadata.name,IP:.spec.clusterIP
NAME         IP
kubernetes   10.2.0.1
nginx        10.2.151.123

There are a lot of possible ways to retrieve data with kubectl which you can read more by following the:

  • kubectl get --help:

-o, --output='': Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns, golang template and jsonpath template.


Additional resources:

Dawid Kruk
  • 8,982
  • 2
  • 22
  • 45
0

If you want to extract just single values, perhaps as part of scripts, then what you are searching for is -ojsonpath such as this example:

kubectl get svc service-name -ojsonpath='{.spec.ports[0].port}'

which will extract jus the value of the first port listed into the service specs.

docs - https://kubernetes.io/docs/reference/kubectl/jsonpath/


If you want to extract the whole definition of an object, such as a service, then what you are searching for is -oyaml such as this example:

kubectl get svc service-name -oyaml

which will output the whole service definition, all in yaml format.


If you want to get a more user-friendly description of a resource, such as a service, then you are searching for a describe command, such as this example:

kubectl describe svc service-name

docs - https://kubernetes.io/docs/reference/kubectl/overview/#output-options

AndD
  • 2,281
  • 1
  • 8
  • 22