官方定義:
A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them - sometimes called a micro-service
我的理解:
Service提供了基于pod的抽象,是一個(gè)大型集群系統(tǒng)中出現(xiàn)錯(cuò)誤的自發(fā)現(xiàn)和動(dòng)態(tài)調(diào)整的關(guān)鍵組件寞冯。
創(chuàng)建一個(gè)service將會為其分配一個(gè)新的獨(dú)立與任何pod或者節(jié)點(diǎn)的IP,可以通過固定的方式訪問服務(wù)窍箍,而不必關(guān)系服務(wù)是在那里運(yùn)行的
Kubernetes proxy會自動(dòng)處理調(diào)用service的請求豪硅,proxy 還會在這些pod 之間進(jìn)行負(fù)載平衡
調(diào)用方可以通過兩種方式獲得service 的IP 地址:環(huán)境變量或者DNS(推薦使用) DNS的話要考慮命名空間哩照,默認(rèn)的是default,在同一個(gè)命名空間中懒浮,可以直接使用服務(wù)名來找到該服務(wù)飘弧。
創(chuàng)建一個(gè)service,也是編寫一個(gè)yaml文件砚著,然后使用 create來創(chuàng)建 使用第二種方式(具體見上一篇文章)
這個(gè)是一個(gè)service的實(shí)例:
apiVersion: v1
kind: Service
metadata:
labels:
name: wordpress
name: wordpress
spec:
type: NodePort
ports:
- port: 80
nodePort: 30000
selector:
name: wp
另一個(gè)實(shí)例
kind: Service
apiVersion: v1
metadata:
name: mysql
spec:
selector:
tier: wp-mysql
ports:
- port: 3306
上面的選擇器會匹配到所有具有 tier: wp-mysql標(biāo)簽的pod
這個(gè)service會創(chuàng)建一個(gè)新的“集群IP”次伶,集群中的其他pod都可以訪問到該IP地址(但是外部節(jié)點(diǎn)都沒法訪問),任何對該機(jī)器IP的訪問都會被負(fù)載平衡代理到一個(gè)底層服務(wù)節(jié)點(diǎn)(selector所匹配到的pod)
如果正在運(yùn)行DNS稽穆,service的集群IP還會被分配一個(gè)邏輯名稱冠王,其他客戶端可以使用這個(gè)邏輯名稱,在wordpress pod 的配置中就可以使用該邏輯名稱秧骑,好處是不管IP是什么版确,這個(gè)pod都可以根據(jù)這個(gè)邏輯名稱找到數(shù)據(jù)庫。
Service的Type:
- NodePort:除了使用ClusterIP外乎折,也將service 的port映射到每個(gè)指定的內(nèi)部port上绒疗,
- ClusterIP:使用集群內(nèi)的私有IP -- 默認(rèn)值
- LoadBalancer: 使用一個(gè)ClusterIP & NodePort 但是會向 could provider申請映射到service本身的負(fù)載均衡
LoadBalancer 只有云平臺才支持
之后在定義wordpress的pod的時(shí)候就可以直接使用mysql的這個(gè)service,讓W(xué)ordPress通過這個(gè)service來訪問mysql數(shù)據(jù)庫:具體做法就是將WORDPRESS_DB_HOST 配置為 mysql(service的名字)