# Services - Service defines logical set of pods and policy to access - exposed in diff ways specified by spec.type: - ClusterIP (default): internal IP - NodePort: same port of each Node, accessible from outside cluster using `NodeIP:NodePort`. superset of ClusterIP - LoadBalancer: create external load balancer in cloud and assigns fixed external IP. superset of NodePort - ExternalName: Maps service to contents of `externalName` field via CNAME record - [Using Source IP](https://kubernetes.io/docs/tutorials/services/source-ip/) - [Connecting Applications with Services](https://kubernetes.io/docs/tutorials/services/connect-applications-service/) - service routes traffic across set of pods - abstraction independent of pods dying and replication - labels and selectors: service grouping primitive - allows logical operation on objects in k8s - labels: key/value pairs attached to objects - Designate objects for development, test, and production - Embed version tags - Classify an object using tags - `kubectl get services` - expose deployment to external traffic ``` kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 ``` - get pods with label ``` kubectl get pods -l app=kubernetes-bootcamp ``` - get services with label ``` kubectl get services -l app=kubernetes-bootcamp ``` - apply new label to pod ``` kubectl label pods "$POD_NAME" key=value ``` - delete service ``` kubectl delete service -l app=kubernetes-bootcamp ```