# Kubernetes Service

Pods werden nicht direkt über die Pod IP angesprochen, da sich diese IP bei jedem Anlegen eines Pods ändert. Falls über das [Deployment](../kubernetes-deployment) mehrere Pods angelegt werden, wird über die IP immer nur ein Pod angesprochen.

Ein Service sorgt für die Vergabe einer ClusterIP, eines NodePorts oder der Nutzung eines LoadBalancers.

Um die zusammengehörigen Pods zu finden werden über einen `selector` die passenden Label der Pods festgelegt. Dabei müssen die Pods und der Service im gleichen [Namespace](../kubernetes-namespace) sein.

```yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: "nginx"
  name: nginx
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: "nginx"
  type: ClusterIP
```

Durch den `port` wird der auf der `ClusterIP` zu belegende Port festgelegt. Der `targetPort` legt den vom Pod freigegebenen Port fest.

Bei der Konfiguration eines `NodePort` kann ein Port von 30000 bis 32767 automatisch oder durch die Angabe des Parameters `nodePort` festgelegt werden.

Die dynamische Vergabe des Ports bevorzugt, da es hier nicht zu Konflikten auf Grund paralleler Deployments kommen kann.

```yaml
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: "nginx"
  name: nginx
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30000
  selector:
    app: "nginx"
  type: NodePort
```
