目錄
?編輯
序言
1.Service介紹
1.1 什么是Service
1.2 Service 類(lèi)型
1.2.1?NodePort
1.2.2?LoadBalancer
1.2.3?ExternalName
1.2.4?ClusterIP
2.yaml名詞解釋
?3.投票?
序言
當(dāng)發(fā)現(xiàn)自己的才華撐不起野心時(shí),就安靜下來(lái)學(xué)習(xí)吧
三言?xún)烧Z(yǔ),不如細(xì)心探索
今天學(xué)習(xí)一下Service相關(guān)內(nèi)容,希望此文,能幫助讀者對(duì) k8s Service有進(jìn)一步的認(rèn)識(shí)
文章標(biāo)記顏色說(shuō)明:
- 黃色:重要標(biāo)題
- 紅色:用來(lái)標(biāo)記結(jié)論
- 綠色:用來(lái)標(biāo)記一級(jí)論點(diǎn)
- 藍(lán)色:用來(lái)標(biāo)記二級(jí)論點(diǎn)
1.Service介紹
1.1 什么是Service
Kubernetes Service 定義了這樣一種抽象:
- 一個(gè) Pod 的邏輯分組
- 一種可以訪(fǎng)問(wèn)這組Pod的策略
也可以理解為微服務(wù)。 這一組 Pod 能夠被 Service 訪(fǎng)問(wèn)到,通常是通過(guò) Label Selector實(shí)現(xiàn)的。
Service 通過(guò)標(biāo)簽來(lái)選取服務(wù)后端,一般配合
- Replication Controller
- Deployment
從而保證后端容器的正常運(yùn)行。
這些匹配標(biāo)簽的 Pod IP 和端口列表組成 endpoints,由 kube-proxy 負(fù)責(zé)將服務(wù) IP 負(fù)載均衡到這些 endpoints 上。
如下圖,展示的是Service與Pod、RC的關(guān)系
總結(jié):
k8s的Service定義了一個(gè)服務(wù)的訪(fǎng)問(wèn)入口地址。
前端的應(yīng)用通過(guò)這個(gè)入口地址訪(fǎng)問(wèn)其背后的一組由Pod副本組成的集群實(shí)例,來(lái)自外部的訪(fǎng)問(wèn)請(qǐng)求被負(fù)載均衡到后端的各個(gè)容器應(yīng)用上。?
1.2 Service 類(lèi)型
Service 類(lèi)型有四種,總接下來(lái):
- NodePort
- LoadBalancer
- ExternalName
- ClusterIP
在定義Service的時(shí)候可以指定一個(gè)需要的類(lèi)型的Service。
如果不指定,則默認(rèn)是ClusterIP類(lèi)型。
1.2.1?NodePort
只對(duì)外部可見(jiàn)
通過(guò)每個(gè) Node 節(jié)點(diǎn)上的 IP 和靜態(tài)端口(NodePort)暴露服務(wù)。
NodePort 服務(wù)會(huì)路由到 ClusterIP 服務(wù),這個(gè) ClusterIP 服務(wù)會(huì)自動(dòng)創(chuàng)建。
通過(guò)請(qǐng)求可以從集群的外部訪(fǎng)問(wèn)一個(gè) NodePort 服務(wù)
主要適合:集群外業(yè)務(wù)訪(fǎng)問(wèn)的場(chǎng)景。
如下:
apiVersion: v1 kind: Service metadata: name: test-service spec: selector: app: test type: NodePort # 指定service 類(lèi)型 ports: - protocol: TCP port: 80 targetPort: 80 name: test-http nodePort: 30000 # 范圍:30000-32767
設(shè)置 type 的值為 "NodePort",Kubernetes master 將從給定的配置范圍內(nèi)(默認(rèn):30000-32767)分配端口
每個(gè) Node 將從該端口(每個(gè) Node 上的同一端口)代理到 Service。
該端口將通過(guò) Service 的 spec.ports[*].nodePort 字段被指定,這里指定的是30000
如果不指定的話(huà)會(huì)自動(dòng)生成一個(gè)端口。
1.2.2?LoadBalancer
使用云提供商的負(fù)載局衡器,可以向外部暴露服務(wù)。
外部的負(fù)載均衡器可以路由到 NodePort 服務(wù)和 ClusterIP 服務(wù),
需要結(jié)合具體的云廠(chǎng)商進(jìn)行操作
1.2.3?ExternalName
ExternalName 是 Service 的特例
- 沒(méi)有 selector
- 沒(méi)有定義任何的端口和 Endpoint
對(duì)于運(yùn)行在集群外部的服務(wù),它通過(guò)返回該外部服務(wù)的別名這種方式來(lái)提供服務(wù)。
示例:
kind: Service apiVersion: v1 metadata: name: test-service namespace: test spec: type: ExternalName # 類(lèi)型 externalName: test.service.com
1.2.4?ClusterIP
只對(duì)內(nèi)部可見(jiàn),外部無(wú)法訪(fǎng)問(wèn)
Service的IP地址,通過(guò)集群的內(nèi)部 IP 暴露服務(wù),服務(wù)只能夠在kubernetes集群內(nèi)部可以訪(fǎng)問(wèn),此為虛擬IP地址
是默認(rèn)的ServiceType。
kubectl -n test get Service # 即可看到ClusterIP
test 是命名空間文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-781836.html
2.yaml名詞解釋
以下為yaml名詞解釋?zhuān)?span toymoban-style="hidden">文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-781836.html
apiVersion: v1 # 版本
kind: Service # 類(lèi)型
metadata: #元數(shù)據(jù) 類(lèi)型string
name: test #Service名稱(chēng) 類(lèi)型string
namespace: test #命名空間,不指定時(shí)默認(rèn)為default命名空間
labels: #自定義標(biāo)簽屬性列表 類(lèi)型string
- name: string
annotations: #自定義注解屬性列表
- name: string
spec: #詳細(xì)描述 類(lèi)型list[]
selector: [] #Label Selector配置,選擇具有指定label標(biāo)簽的pod作為管理范圍
type: string #service的類(lèi)型,指定service的訪(fǎng)問(wèn)方式,默認(rèn)ClusterIP
#ClusterIP:虛擬的服務(wù)ip地址,用于k8s集群內(nèi)部的pod訪(fǎng)問(wèn),在Node上kube-porxy通過(guò)設(shè)置的iptables規(guī)則進(jìn)行轉(zhuǎn)發(fā)
#NodePort:使用宿主機(jī)端口,能夠訪(fǎng)問(wèn)各Node的外部客戶(hù)端通過(guò)Node的IP和端口就能訪(fǎng)問(wèn)服務(wù)器
#LoadBalancer:使用外部負(fù)載均衡器完成到服務(wù)器的負(fù)載分發(fā),
#需要在spec.status.loadBalancer字段指定外部負(fù)載均衡服務(wù)器的IP,并同時(shí)定義nodePort和clusterIP用于公有云環(huán)境。
clusterIP: string #虛擬服務(wù)IP地址,當(dāng)type=ClusterIP時(shí),如不指定,則系統(tǒng)會(huì)自動(dòng)進(jìn)行分配,也可以手動(dòng)指定。當(dāng)type=loadBalancer,需要指定
sessionAffinity: string #是否支持session,可選值為ClietIP,默認(rèn)值為空,ClientIP表示將同一個(gè)客戶(hù)端(根據(jù)客戶(hù)端IP地址決定)的訪(fǎng)問(wèn)請(qǐng)求都轉(zhuǎn)發(fā)到同一個(gè)后端Pod
ports: #service需要暴露的端口列表
- name: string #端口名稱(chēng) 類(lèi)型string
protocol: TCP #端口協(xié)議,支持TCP或UDP,默認(rèn)TCP 類(lèi)型string
port: 80 #服務(wù)監(jiān)聽(tīng)的端口號(hào) 類(lèi)型int
targetPort: 8080 #需要轉(zhuǎn)發(fā)到后端的端口號(hào) 類(lèi)型int
nodePort: 8080 #當(dāng)type=NodePort時(shí),指定映射到物理機(jī)的端口號(hào) 類(lèi)型:int
status: #當(dāng)type=LoadBalancer時(shí),設(shè)置外部負(fù)載均衡的地址,用于公有云環(huán)境
loadBalancer: #外部負(fù)載均衡器
ingress: #外部負(fù)載均衡器
ip: string #外部負(fù)載均衡器的IP地址
hostname: string #外部負(fù)載均衡器的機(jī)主機(jī)
?3.投票
到了這里,關(guān)于【K8S系列】第十二講:Service進(jìn)階的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!