天天看點

Kubernetes核心技術Service詳解、執行個體

作者:全棧行動派

1、概述

我們都知道Kubernetes會為每個pod配置設定一個獨立的IP,然而卻存在如下問題:

  • Deployment控制的3個pod,其中一個Pod出現問題,這個時候給銷毀重新建立後Pod Ip會變化
  • Pod IP 僅僅是叢集内可見的虛拟IP,外部無法通路

這樣對于通路這個服務帶來了難度。是以,kubernetes設計了Service來解決這個問題。

Service可以看作是一組同類Pod對外的通路接口。借助Service,應用可以友善地實作服務發現和負載均衡。

Kubernetes核心技術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           

執行個體:

Kubernetes核心技術Service詳解、執行個體

注意: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           
Kubernetes核心技術Service詳解、執行個體

叢集内部通路位址:http://10.6.72.235

叢集外部通路位址:http://10.6.72.235:32536

3、删除service

涉及指令:

kubectl delete svc mynginx-service -n dev           
Kubernetes核心技術Service詳解、執行個體

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           
Kubernetes核心技術Service詳解、執行個體

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

Kubernetes核心技術Service詳解、執行個體

繼續閱讀