如何做產(chǎn)品網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)登封網(wǎng)站設(shè)計(jì)
系列文章目錄
K8s中的Namespace是什么?
Kubernetes 集群的組件介紹
Kubernetes 對(duì)象是什么?
Pod——k8s中最重要的對(duì)象之一
Kubernetes 和 Docker 之間有什么區(qū)別?
部署安裝 K8s 為什么要關(guān)閉 swap 分區(qū)?
k8s中容器之間、pod之間如何進(jìn)行網(wǎng)絡(luò)通信?
從不同的角度理解靜態(tài)Pod和動(dòng)態(tài)/普通Pod的區(qū)別
本篇目錄
- 系列文章目錄
- 什么是Service?
- 為什么要有Service?
- Service類型有哪些?
- 如何定義 Service?
什么是Service?
Kubernetes 中的 Service 是一組Pod集合的抽象,能夠?qū)od 集合在網(wǎng)絡(luò)上公開(kāi)出去。我們可以使用 Service 讓一組 Pod 可在網(wǎng)絡(luò)上訪問(wèn),這樣客戶端就能與之交互。在這種情況下,在集群內(nèi)外部訪問(wèn)Pod時(shí)并不是直接接觸Pod,而是通過(guò)Service。Service也是K8s里的資源對(duì)象。在創(chuàng)建的時(shí)候要定義端點(diǎn)集合(所謂端點(diǎn)集合就是Pod集合,也就是這個(gè)Service代表了哪些Pod),并且還要定義策略來(lái)決定如何訪問(wèn)到這些Pod。
為什么要有Service?
Pod是動(dòng)態(tài)的,是臨時(shí)資源,它不可靠也不耐用。每個(gè)Pod都有自己的IP地址,哪怕一個(gè)Pod“重啟”了,它的IP也會(huì)發(fā)生變化。所以我們不希望前端客戶端直接和每個(gè)Pod單獨(dú)通訊,這樣的通訊是不可靠的。
所以就提出了Service抽象。Service對(duì)象創(chuàng)建后,Kubernetes會(huì)為它分配一個(gè)IP地址,這個(gè)IP地址比較持久,不會(huì)輕易改變,前端只需要知道這個(gè)Service的IP地址就可以了,然后Service會(huì)將傳過(guò)來(lái)的流量轉(zhuǎn)發(fā)到它代表的Pod集合中的一個(gè)或一些Pod上去。
Service類型有哪些?
-
ClusterIP
Service的默認(rèn)類型就是ClusterIP。也就是通過(guò)集群的內(nèi)部 IP 公開(kāi) Service,選擇該值時(shí) Service 只能夠在集群內(nèi)部訪問(wèn)。
-
NodePort
這種類型是通過(guò) 每個(gè)節(jié)點(diǎn)上的IP和特定的靜態(tài)端口(NodePort) 來(lái)公開(kāi)Service。也就是說(shuō)每個(gè)節(jié)點(diǎn)會(huì)將這個(gè)端口(每個(gè)節(jié)點(diǎn)上的相同端口號(hào))上的流量代理到所創(chuàng)建的 Service。這樣通過(guò)合適的協(xié)議和分配給該Service的端口連接到任何一個(gè)節(jié)點(diǎn),我們都能從集群外部訪問(wèn)NodePort類型的Service·。
-
LoadBalancer
在使用支持外部負(fù)載均衡器的云平臺(tái)時(shí),如果將
type
設(shè)置為"LoadBalancer"
, 則平臺(tái)會(huì)為 Service 提供負(fù)載均衡器 -
ExternalName
類型為 ExternalName 的 Service 將 Service 映射到 DNS 名稱,而不是典型的選擇算符。
如何定義 Service?
Service是Kubernetes中的一個(gè)對(duì)象,可以使用 Kubernetes API 創(chuàng)建、查看或修改 Service 定義。
例如,假定有一組 Pod,每個(gè) Pod 都在偵聽(tīng) TCP 端口 9376,并且它們還被打上 app.kubernetes.io/name=MyApp
標(biāo)簽。我們就可以定義一個(gè) Service 來(lái)發(fā)布該 TCP 偵聽(tīng)器:
apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app.kubernetes.io/name: MyAppports:- protocol: TCPport: 80targetPort: 9376
應(yīng)用上述清單時(shí),系統(tǒng)將創(chuàng)建一個(gè)名為 “my-service” 的、 服務(wù)類型默認(rèn)為 ClusterIP 的 Service。 該 Service 指向帶有標(biāo)簽 app.kubernetes.io/name: MyApp
的所有 Pod 的 TCP 端口 9376。
需要解釋的是,清單里的port指的是暴露給客戶端的端口,外部的流量從port端口經(jīng)過(guò)kube-proxy流入到后端pod的targetPort上,最后進(jìn)入容器。