1、概述
我們都知道Kubernetes會為每個pod配置設定一個獨立的IP,然而卻存在如下問題:
- Deployment控制的3個pod,其中一個Pod出現問題,這個時候給銷毀重新建立後Pod Ip會變化
- Pod IP 僅僅是叢集内可見的虛拟IP,外部無法通路
這樣對于通路這個服務帶來了難度。是以,kubernetes設計了Service來解決這個問題。
Service可以看作是一組同類Pod對外的通路接口。借助Service,應用可以友善地實作服務發現和負載均衡。
通過上圖可以看出,Service也是通過标簽選擇器控制一組Pod的對外通路。
2、通過指令建立叢集内部可以通路的Service
2.1、ClusterIP方式:
此方式會為Service配置設定固定IP,在Service整個生命周期内這個IP是不變化的,但是這個IP隻能在叢集内部通路
#建立deploy
kubectl create deploy mynginx --image=nginx -n dev
#暴露service
kubectl expose deploy mynginx --name=mynginx-service -n dev --port=80 --target-port=80 --type=ClusterIP
#檢視service
kubectl get deploy,svc -n dev -owide
執行個體:
注意:10.1.203.180這個IP隻能在叢集内部通路,在叢集任意幾個節點都可通路,此為--type=ClusterIP 這個類型導緻
2.2、NodePort
此方式會為Service配置設定IP和對外暴露端口,通過此端口可以在外部通路
#建立deploy
kubectl create deploy mynginx --image=nginx -n dev
#暴露service
kubectl expose deploy mynginx --name=mynginx-service -n dev --port=80 --target-port=80 --type=NodePort
#檢視service
kubectl get deploy,svc -n dev -owide
叢集内部通路位址:http://10.6.72.235
叢集外部通路位址:http://10.6.72.235:32536
3、删除service
涉及指令:
kubectl delete svc mynginx-service -n dev
4、通過yaml暴露service
4.1、生成service的yaml模闆mynginx-service.yaml 并修改
#建立模闆
kubectl expose deploy mynginx --name=mynginx-service -n dev --port=80 --target-port=80 --type=NodePort -o yaml --dry-run=client > mynginx-service.yaml
yaml内容:
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: mynginx
name: mynginx-service
namespace: dev
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: mynginx
type: NodePort
status:
loadBalancer: {}
4.2、執行mynginx-service.yaml