Kubernetes Service Operations

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

Internal

List Services

kubectl [-n <namespace>] get svc

Describe a Service

kubectl [-o yaml] get svc <service-name>
kubectl describe svc <service-name>

Create a Service

With CLI

A service of any type (ClusterIP, NodePort, LoadBalancer, or ExternalName) can be created with the kubectl expose command.

More details:

kubectl expose

With Metadata

Describe the service in a metadata YAML file:

apiVersion: v1
kind: Service
metadata:
  name: some-service
spec:
  selector:
    function: serves-http
  ports:
  - port: 80
    targetPort: 8888

More details about the service manifest available in:

Kubernetes Service Manifest

POST it with:

kubectl apply -f ./service.yaml

Service Troubleshooting

Services can be tested as follows:

  • Deploy an auxiliary pod, kubectl exec into it and attempt to connect to the target pods via the service.
  • ssh into a Kubernetes node and use the curl command from there.

Check:

  • Make sure to connect to a ClusterIP service from within the cluster not from outside.
  • Pinging ClusterIP services does not work, the service's cluster IP is a virtual IP address.
  • The readiness probe works correctly and returns the correct state.
  • kubectl get endpoints
  • Make sure you're using the service "port", not "targetPort"
  • Try connecting to the pod directly, circumventing the service.
  • If connecting to the pod directly does not work, make sure the application isn't only binding to localhost.