iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
DevOps

k8s歷險記系列 第 13

Day13-pod服務處 介紹service

  • 分享至 

  • xImage
  •  

之前提到了兩種跟pod互動的方式,上一章介紹了port-forward這個方法,這一章則會介紹service。

什麼是service

官方說明
a Service is an abstraction which defines a logical set of Pods and a policy by which to access them.
翻過來就是 service是一個抽象概念,其定義了邏輯上的一組pod以及用來存取那些pod的規範。
簡單來說就是在pod外擋一層虛擬層,方便另一組pod來認識這組pod群,不必認識單個單個pod。
官方動機也寫說,當前端(一組pod)跟後端(另一組pod)在同一個cluster內時,前端要怎麼去發現以及保持追蹤後端的ip呢?
就要透過serive,也就是說service提供了讓這群pod被別組pod認識的方法。

建立Service

要建立service有幾種方式,這章會先用最簡單的方法來建立service,比較複雜的方法會留到下一章,而最簡單的方法,就是expose指令

範例pod

首先先用下面的yaml建立起一個pod

apiVersion: v1
kind: Pod
metadata:
  name: my-redis
  labels:
    app: redis
spec:
  containers:
  - name: pod-redis
    image: redis
    ports:
    - containerPort: 6379

kubectl expose

再來執行下面指令

kubectl expose pod my-redis --type=LoadBalancer --name=my-redis-service

https://ithelp.ithome.com.tw/upload/images/20210921/20129607dM0He1qbf9.png
就可以看到名為my-redis-service的service被建立出來了,不過由於要能夠直接打到需要EXTERNAL-IP
而kind建立的cluster沒辦法直接提供,一個方法是使用線上雲端像是GCP或是AWS,另一個方法是用minikube,
可以下達

minukube service my-redis-service

他可以提供你EXTERNAL-IP

除了讓k8s幫你產生port,你也可以指定port

kubectl expose pod my-redis --type=LoadBalancer --name=my-redis-service --port=7788 --target-port=6379

這樣就可以指定port給service了。
不過這邊的範例都只有一個pod,其實用service的意義不大,因此在下一章會介紹Deployment,產生出多個pod的情境,才比較好瞭解service的效果。


上一篇
Day12-你好 安安 對不起我要去洗澡了 如何跟pod互動
下一篇
Day14- 不純關係 Deployment 和 ReplicaSet(一)
系列文
k8s歷險記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言