---
# System prepended metadata

title: Services
tags: [Kubernetes]

---

# Services
###### tags: `Kubernetes`


若想要讓外面的人可以存取pod裡面的application，就需要透過services的幫忙。 

這些 IP 僅有在 K8s cluster 內部才有辦法存取的到


> Service Type 有以下三種。
> * NodePort
> * ClusterIP
> * LoadBalancer

![](https://i.imgur.com/kpiMhRw.png)


### YAML範例檔

* NodePort 設定想對外的port
* Selector 選想要apply到的那個pod，使用他的 Label

若Master node IP 為 10.0.2.15

若有兩個service對應到兩個pod(網頁)，對外的 port 個別是30008、300010，所有的node(master、worker)，都可以直接localhost存取到兩個網頁

```
$ vim svc.yaml

apiVersion: v1
kind: Service
metadata: 
  name: nodeport-service
spec:
  type: NodePort
  ports:
    - targetPort: 80
      port: 80
      nodePort: 30008
  selector: 
    app: MyApp
```

上面是nodeport的範例，可以會對外

service 的 cluster ip 都可以在cluster 裡面的node存取到

也可以透過以下方式建立:

```
#創建的Service會自動將該Pod的label填入selector欄位
$ kubectl expose po <pod-name> --name=<svc-name> --type=<type-of-svc> --port=<port> 

#這邊的port是service上面的port
$ kubectl expose po nginx --name=service --type=NodePort --port 80 

```

![](https://i.imgur.com/SlYrW5H.png)
