Skip to content

ClusterIP

Add a Service to helloworld

Now we have a basic understanding of service discovery and the different ServiceTypes on Kubernetes, it is time to expose the Deployment of helloworld using a new Service specification.

Let's look at the definition for the helloworld-service.yaml,

cat helloworld-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: helloworld
  labels:
    app: helloworld
spec:
  ports:
  - port: 8080
    targetPort: http-server
  selector:
    app: helloworld

The spec defines a few important attributes for service discovery: labels, selector and port. The set of Pods that a Service targets, is determined by the selector and labels. When a Service has no selector, the corresponding Endpoints object is not created automatically.

The Service maps the incoming port to the container's targetPort. By default the targetPort is set to the same value as the incoming port field.

Create the Service object with the default type,

$ oc create -f helloworld-service.yaml -n $MY_NS

service/helloworld created

Describe the Service,

$ oc describe svc helloworld -n $MY_NS

Name:              helloworld
Namespace:         my-apps
Labels:            app=helloworld
Annotations:       <none>
Selector:          app=helloworld
Type:              ClusterIP
IP:                172.21.86.16
Port:              <unset>  8080/TCP
TargetPort:        http-server/TCP
Endpoints:         172.30.172.228:8080,172.30.234.176:8080,172.30.234.177:8080
Session Affinity:  None
Events:            <none>

You see that Kubernetes by default creates a Service of type ClusterIP. The service is now available and discoverable, but only within the cluster, using the Endpoints and port mapping found via the selector and labels.

Next

Go to NodePort to learn more about ServiceType NodePort.