# 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
```