8-通過(guò)Service訪問(wèn)Pod

Pod中的容器很可能因?yàn)楦鞣N原因發(fā)生故障而死掉罢浇。

而使用Deployment等Controller可以動(dòng)態(tài)創(chuàng)建和銷毀Pod來(lái)保證應(yīng)用整體的健壯性读第。

每個(gè)Pod都有自己的IP地址净蚤。當(dāng)Controller用新Pod替代發(fā)生故障的Pod時(shí),新Pod會(huì)分配到新的IP地址眯杏。如果直接通過(guò)Pod的ip訪問(wèn)服務(wù)开瞭,就會(huì)產(chǎn)生問(wèn)題懒震。

為了解決這個(gè)問(wèn)題罩息,Kubernetes提供了Service,并通過(guò)service訪問(wèn)pod中的服務(wù)挎狸。

創(chuàng)建Service

Service從邏輯上代表了一組Pod扣汪。Service有自己的IP断楷,而且這個(gè)IP是不變的锨匆。
客戶端只需要訪問(wèn)Service的IP,Kubernetes則負(fù)責(zé)建立和維護(hù)Service與Pod的映射關(guān)系冬筒。

看個(gè)例子恐锣,創(chuàng)建下面的這個(gè)Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd
        ports:
        - containerPort: 80

啟動(dòng)了3個(gè)pod

pod分配了各自的IP,這些IP只能被集群內(nèi)的容器和節(jié)點(diǎn)訪問(wèn)

接下來(lái)創(chuàng)建Service舞痰,配置文件如下

apiVersion: v1
kind: Service
metadata:
  name: httpd-svc
spec:
  selector:
    app: httpd
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80

①v1是Service的apiVersion土榴。
②指明當(dāng)前資源的類型為Service。
③Service的名字為httpd-svc响牛。
④selector使用標(biāo)簽和pod關(guān)聯(lián)玷禽。
⑤將Service的8080端口映射到Pod的80端口,使用TCP協(xié)議呀打。

執(zhí)行kubectl apply創(chuàng)建Service httpd-svc

[root@master ~]# kubectl apply -f httpd-svc.yml 
service/httpd-svc created
[root@master ~]# kubectl get service
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
httpd-svc    ClusterIP   10.97.164.120   <none>        8080/TCP   40s
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP    4h51m

httpd-svc分配到一個(gè)CLUSTER-IP 10.97.164.120矢赁。可以通過(guò)該IP訪問(wèn)后端的httpd Pod贬丛,根據(jù)前面的端口映射撩银,這里要使用8080端口

[root@master ~]# curl 10.97.164.120:8080
<html><body><h1>It works!</h1></body></html>

這和直接訪問(wèn)Pod IP:80是一樣的

除了我們創(chuàng)建的httpd-svc,還有一個(gè)Service kubernetes豺憔,Cluster內(nèi)部通過(guò)這個(gè)Service訪問(wèn)Kubernetes API Server额获。

通過(guò)describe查看service的詳細(xì)信息,從中可以看到Endpoints即為與之對(duì)應(yīng)的Pod


Cluster IP底層實(shí)現(xiàn)

CLUSTER-IP是如何映射到Pod IP的呢恭应?答案是iptables抄邀。

可以通過(guò)iptables-save命令打印出當(dāng)前節(jié)點(diǎn)的iptables規(guī)則

大概意思是經(jīng)過(guò)規(guī)則跳轉(zhuǎn),最終將請(qǐng)求轉(zhuǎn)發(fā)到后端的三個(gè)Pod昼榛。

結(jié)論:iptables將訪問(wèn)Service的流量轉(zhuǎn)發(fā)到后端Pod境肾,而且使用類似輪詢的負(fù)載均衡策略。

另外褒纲,需要補(bǔ)充一點(diǎn):Cluster的每一個(gè)節(jié)點(diǎn)都配置了相同的iptables規(guī)則准夷,這樣就確保了整個(gè)Cluster都能夠通過(guò)Service的Cluster IP訪問(wèn)Service


DNS訪問(wèn)Service

kubeadm部署時(shí)會(huì)默認(rèn)安裝coredns組件

coredns是一個(gè)DNS服務(wù)器。每當(dāng)有新的Service被創(chuàng)建莺掠,coredns會(huì)添加該Service的DNS記錄衫嵌。Cluster中的Pod可以通過(guò)<SERVICE_NAME>.<NAMESPACE_NAME>訪問(wèn)Service。

如下在一個(gè)臨時(shí)的busybox Pod中驗(yàn)證了DNS的有效性彻秆。

另外楔绞,由于這個(gè)Pod與httpd-svc同屬于default namespace结闸,因此可以省略default直接用httpd-svc訪問(wèn)Service

用nslookup查看httpd-svc的DNS信息

Server是DNS服務(wù)器
httpd-svc.default.svc.cluster.local是httpd-svc的完整域名


外網(wǎng)如何訪問(wèn)Service

Kubernetes提供了多種類型的Service,默認(rèn)是ClusterIP酒朵。

ClusterIP只能在Cluster內(nèi)部訪問(wèn)桦锄,如果要在外部訪問(wèn)service,這就要通過(guò)NodePort來(lái)實(shí)現(xiàn)蔫耽。

apiVersion: v1
kind: Service
metadata:
  name: httpd-svc
spec:
  type: NodePort
  selector:
    app: httpd
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80

添加type: NodePort结耀,重新創(chuàng)建httpd-svc

Kubernetes依然會(huì)為httpd-svc分配一個(gè)ClusterIP,8080是ClusterIP監(jiān)聽(tīng)的端口
除此之外匙铡,8080后的端口:31639图甜,則是節(jié)點(diǎn)監(jiān)聽(tīng)的端口,每個(gè)節(jié)點(diǎn)都會(huì)監(jiān)聽(tīng)此端口并將請(qǐng)求轉(zhuǎn)發(fā)給Service

在master節(jié)點(diǎn)上測(cè)試

集群外訪問(wèn)測(cè)試

這時(shí)鳖眼,集群外也可以訪問(wèn)服務(wù)了

NodePort默認(rèn)的是隨機(jī)選擇黑毅,可以用nodePort指定某個(gè)特定端口

現(xiàn)在配置文件中就有三個(gè)Port了:
(1)nodePort是節(jié)點(diǎn)上監(jiān)聽(tīng)的端口。
(2)port是ClusterIP上監(jiān)聽(tīng)的端口钦讳。
(3)targetPort是Pod監(jiān)聽(tīng)的端口矿瘦。


也可以通過(guò)expose命令創(chuàng)建service

查看service

瀏覽器訪問(wèn)節(jié)點(diǎn)ip:30355

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市愿卒,隨后出現(xiàn)的幾起案子缚去,更是在濱河造成了極大的恐慌,老刑警劉巖掘猿,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件病游,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡稠通,警方通過(guò)查閱死者的電腦和手機(jī)衬衬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)改橘,“玉大人滋尉,你說(shuō)我怎么就攤上這事》芍鳎” “怎么了狮惜?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)碌识。 經(jīng)常有香客問(wèn)我碾篡,道長(zhǎng),這世上最難降的妖魔是什么筏餐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任开泽,我火速辦了婚禮,結(jié)果婚禮上魁瞪,老公的妹妹穿的比我還像新娘穆律。我一直安慰自己惠呼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布峦耘。 她就那樣靜靜地躺著剔蹋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辅髓。 梳的紋絲不亂的頭發(fā)上泣崩,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音利朵,去河邊找鬼律想。 笑死猎莲,一個(gè)胖子當(dāng)著我的面吹牛绍弟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播著洼,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼樟遣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了身笤?” 一聲冷哼從身側(cè)響起豹悬,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎液荸,沒(méi)想到半個(gè)月后瞻佛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娇钱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年伤柄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片文搂。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡适刀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出煤蹭,到底是詐尸還是另有隱情笔喉,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布硝皂,位于F島的核電站常挚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏稽物。R本人自食惡果不足惜奄毡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姨裸。 院中可真熱鬧秧倾,春花似錦怨酝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至售淡,卻和暖如春斤葱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揖闸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工揍堕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汤纸。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓衩茸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贮泞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子楞慈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容