溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

kubernetes中Service是什么

發(fā)布時(shí)間:2021-12-24 15:55:06 來(lái)源:億速云 閱讀:140 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“kubernetes中Service是什么”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“kubernetes中Service是什么”這篇文章吧。

一:Service概念
kubernetes中Service是什么

Kubernetes里的每個(gè)Service其實(shí)就是微服務(wù)架構(gòu)中的一個(gè)微服務(wù)。 它產(chǎn)生的背景在于:一是Pod的IP地址不是固定的,需要一個(gè)代理來(lái)確保需要使用Pod的應(yīng)用不需要知道pod的真實(shí)IP地址;另一個(gè)是RC創(chuàng)建多個(gè)Pod副本時(shí),需要一個(gè)代理來(lái)為這些pod做負(fù)載均衡。

Service 主要由一個(gè)IP地址和一個(gè)label selector組成。

Service定義了一個(gè)服務(wù)的訪問入口地址,前端的應(yīng)用通過這個(gè)入口地址訪問其背后的一組由Pod副本組成的集群實(shí)例。Service與其后端Pod副本集群直接則是通過Label Selector來(lái)實(shí)現(xiàn)無(wú)縫對(duì)接的。而RC的作用實(shí)際上是保證Service的服務(wù)能力和服務(wù)質(zhì)量始終處于預(yù)期的標(biāo)準(zhǔn)。

二:Service工作原理

Kubernetes集群的每個(gè)節(jié)點(diǎn)上都運(yùn)行著一個(gè)kube-proxy,它是負(fù)責(zé)整個(gè)Service實(shí)現(xiàn)的主要組件。

對(duì)應(yīng)每個(gè)Service(無(wú)論其Pod 是否在該節(jié)點(diǎn)上),kube-proxy都會(huì)在宿主機(jī)上監(jiān)聽一個(gè)端口與Service對(duì)應(yīng)起來(lái)。它會(huì)在宿主機(jī)上建立iptables規(guī)則。 Service請(qǐng)求經(jīng)過iptables重定向到它對(duì)應(yīng)的隨機(jī)端口,再經(jīng)過kube-proxy的代理到某個(gè)后端pod.  kube-proxy里會(huì)維護(hù)端口和Service的映射關(guān)系,以及Service代理的Pod清單。

kube-proxy還會(huì)實(shí)時(shí)監(jiān)測(cè)Master節(jié)點(diǎn)上etcd中service和Endpoints對(duì)象的增加和刪除信息,從而保證后端被代理pod的IP和端口變化可以及時(shí)更新到它維護(hù)的路由信息中。

三:Service發(fā)現(xiàn)機(jī)制

一旦一個(gè)Service被創(chuàng)建,該Service的信息都可以被注入到Pod中工他們使用。

環(huán)境變量方式: kubelet創(chuàng)建pod時(shí)會(huì)自動(dòng)添加所有可用的service環(huán)境變量到該pod中,如果有需要,這些環(huán)境變量就被注入pod內(nèi)的容器里。

DNS方式:DNS服務(wù)器使用kubernetes的WatchAPI,不間斷地監(jiān)測(cè)新Service的創(chuàng)建并為每個(gè)Service新建一個(gè)DNS記錄。如果DNS在整個(gè)集群范圍內(nèi)都可用,那么所有的Pod都能夠自動(dòng)解析Service的域名。

四:Service外部訪問

Node IP:Node節(jié)點(diǎn)的IP地址。每個(gè)節(jié)點(diǎn)的物理網(wǎng)卡的IP地址,這是一個(gè)真實(shí)存在的物理網(wǎng)絡(luò)。Kubernetes集群之外的節(jié)點(diǎn)訪問集群之內(nèi)的某個(gè)節(jié)點(diǎn)或者TCP/IP服務(wù)的時(shí)候,必須通過Node IP進(jìn)行通信。

Pod IP:每個(gè)Pod的IP地址,它是Docker Engine 根據(jù)docker0網(wǎng)橋的IP地址段進(jìn)行分配的。通常是一個(gè)虛擬的二層網(wǎng)絡(luò)。kubernetes要求位于不同Node上的Pod能夠彼此直接通信,所有Kubernetes里一個(gè)pod里的容器訪問另外一個(gè)Pod里的容器,就是通過pod ip所在的虛擬二層網(wǎng)絡(luò)進(jìn)行通信的,而真實(shí)的tcp/ip流量則是通過node ip所在的物理卡流出的。

Cluseter IP: 一個(gè)虛擬的IP 僅僅作用域Service這個(gè)對(duì)象,由kubernetes管理和分配IP地址。 它是無(wú)法ping通的。只能結(jié)合Service Port組成一個(gè)具體的通信端口,她屬于kubernetes集群這樣一個(gè)封閉的空間。集群之外的節(jié)點(diǎn)如果要訪問這個(gè)通信端口,則需要做一些額外的工作。

采用NodePort解決外部對(duì)集群內(nèi)服務(wù)的訪問時(shí)最直接,最有效,最常用的方法。

NodePort的實(shí)現(xiàn)方式是在k8s集群里的每個(gè)Node上為需要外部訪問的service開啟一個(gè)對(duì)應(yīng)的TCP監(jiān)聽端口,外部系統(tǒng)只要用任意一個(gè)Node的IP地址+具體的Node Port端口號(hào)即可訪問此服務(wù)。

但NodePort還沒有完全解決外部訪問Service的所有問題,比如負(fù)載均衡問題,假如我們集群中有10個(gè)Node,則此時(shí)最好有一個(gè)負(fù)載均衡器,外部只需要訪問此負(fù)載均衡器的IP地址,由負(fù)載均衡器轉(zhuǎn)發(fā)流量到后面某個(gè)Node的NodePort上。

負(fù)載均衡器可以采用硬件或軟件(HAProxy,Nginx)的方式來(lái)實(shí)現(xiàn)。但這樣又帶來(lái)了另外一個(gè)問題,對(duì)于每個(gè)Service都需要手動(dòng)配置一個(gè)對(duì)應(yīng)的負(fù)載轉(zhuǎn)發(fā)實(shí)例。

以上是“kubernetes中Service是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI