Kubernetes 0-1 了解Service

Run Rsyslog server in Kubernetes - ITNEXT

Service介紹

按照官方文檔的說法失乾,在K8S中勇边,Service是將運行在集群中的一組Pod的應(yīng)用公開為網(wǎng)絡(luò)服務(wù)的抽象方法寇蚊,是K8S的核心概念之一峭判,Service的主要作用是使客戶端發(fā)現(xiàn)Pod并與之通信开缎。

簡單理解起來就是,由Service提供統(tǒng)一的入口地址林螃,然后將請求負(fù)載分發(fā)到后端Pod的容器應(yīng)用奕删。

image-20200622171939308

為什么有Service

集群中部署了Pod,應(yīng)用是成功的部署起來了疗认,但是只是至此的話完残,Pod提供服務(wù)訪問存在以下一些問題伏钠。

  • Pod是短暫的,可能會被銷毀或重新調(diào)度谨设,這使得Pod的IP是隨時變動和更新的熟掂;
  • 部署多個Pod的伸縮問題,流量分配問題扎拣;
  • 集群外部客戶端無法直接訪問Pod打掘。

這時候就需要Service,Pod作為Service的后端提供服務(wù)鹏秋。所以我們可以想象尊蚁,Service需要完成的事情:

  • 服務(wù)發(fā)現(xiàn),通過Pod的lable查找目標(biāo)Pod侣夷,將查找的Pod的注冊到自己的后端列表横朋,Pod的IP信息發(fā)生更改,后端列表也同步更新百拓;
  • 負(fù)載均衡琴锭,請求到達(dá)Service之后,將請求均衡轉(zhuǎn)發(fā)的后端列表衙传;
  • 服務(wù)暴露:對外提供統(tǒng)一的請求地址决帖。

創(chuàng)建Service

在創(chuàng)建Sercvice之前我們首先創(chuàng)建service代理的Pod,nginx-pod.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80

先給到一個簡單的Service定義實例nginx-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

spec.ports.port是Service對外提供服務(wù)的端口蓖捶,spec.ports.targetPort是轉(zhuǎn)發(fā)到Pod內(nèi)的訪問端口地回;

通過spec.selector發(fā)現(xiàn)同一命名空間下帶有app=nginx的label的Pod作為后端。

創(chuàng)建命令:

kubectl apply -f nginx-service.yaml

Service作為Pod的負(fù)載均衡器俊鱼,使用service.spec.selector字段去匹配Pod刻像,上面示例中,nginx Service將通過app: nginx的label查找Pod作為后端并闲。

創(chuàng)建Service之后细睡,查看Service的后端:

kubectl get svc -o wide
kubectl describe svc nginx

在創(chuàng)建Sercvice之前,我已經(jīng)創(chuàng)建了一個帶有app: nginxlabel的Pod帝火,所以可以看到Service的EndPoints中已經(jīng)有了一個后端(10.244.1.25)了溜徙,Endpoint也是一種K8S資源,可以使用kubectl get ep命令查看犀填。

image-20200622173727494

除了以上使用yaml定義Service之外蠢壹,還可以使用以下命令創(chuàng)建Service:

# 暴露Pod
kubectl expose pod nginx --name=nginx --port=80 --target-port=80 --protocol=TCP --type=NodePort
# 或者Deployment管理的Pod
kubectl expose deploy nginx --name=nginx --port=80 --target-port=80 --protocol=TCP --type=LoadBalancer

Service類型

通過Service.spec.type定義,最常用的三種:ClusterIP(默認(rèn))宏浩,NodePort知残、LoadBalancer。

CLusterIP

指定type為ClusterIP時,它將被分配一個集群內(nèi)部的IP求妹,在集群內(nèi)部通過訪問它來訪問后端Pod乏盐,這種Service一般只供集群內(nèi)部訪問。

NodePort

指定type為NodePort時制恍,會在所有節(jié)點分配一個端口(默認(rèn)從30000-32767)作為service的入口父能,訪問方式:<protocol>://<node-ip>:<port>,使用NodePort類型時净神,也會默認(rèn)分配一個ClusterIP何吝,除非使用ClusterIP: None免除分配。

特點:

  • 所有節(jié)點都是同一個端口鹃唯;
  • 端口是有限的爱榕,30000-32767范圍內(nèi)分配,也可以使用service.spec.ports.nodePort指定端口坡慌,但指定的端口必須在范圍內(nèi)且尚未被占用黔酥;
  • 外部訪問需要使用到Node的IP。

LoadBalancer

隨機分配一個LoadBalancer作為Service的入口洪橘,一般需要云提供商的支持跪者。請求到達(dá)LoadBalancer地址后,均衡負(fù)載到后端Pod熄求,使用LoadBalancer類型時渣玲,也會默認(rèn)分配一個ClusterIP,并且也會分配一個NodePort端口弟晚,實際上來說忘衍,LoadBalancer是基于NodePort實現(xiàn)的。

特點

  • 外部網(wǎng)絡(luò)可以通過LoadBalancer的地址和端口訪問到集群內(nèi)Service服務(wù)指巡。

訪問Service

  • 通過ClusterIP訪問淑履,限集群內(nèi)部訪問隶垮;
  • 通過Service Name訪問:如果在同一命名空間藻雪,可以直接使用服務(wù)名稱(<service-name>)訪問,如果不在同一命名空間狸吞,使用服務(wù)名稱和命名空間名稱(<service-name>.<namespace-name>)訪問勉耀,集群外可訪問;
  • 通過ExternalIP(一般是LoadBalancer的host和ip)訪問蹋偏,集群外可訪問便斥。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市威始,隨后出現(xiàn)的幾起案子枢纠,更是在濱河造成了極大的恐慌,老刑警劉巖黎棠,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晋渺,死亡現(xiàn)場離奇詭異镰绎,居然都是意外死亡,警方通過查閱死者的電腦和手機木西,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門畴栖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人八千,你說我怎么就攤上這事吗讶。” “怎么了恋捆?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵照皆,是天一觀的道長。 經(jīng)常有香客問我沸停,道長纵寝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任星立,我火速辦了婚禮爽茴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绰垂。我一直安慰自己室奏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布劲装。 她就那樣靜靜地躺著胧沫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪占业。 梳的紋絲不亂的頭發(fā)上绒怨,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音谦疾,去河邊找鬼南蹂。 笑死,一個胖子當(dāng)著我的面吹牛念恍,可吹牛的內(nèi)容都是我干的六剥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼峰伙,長吁一口氣:“原來是場噩夢啊……” “哼疗疟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞳氓,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤策彤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體店诗,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡叽赊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了必搞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片必指。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖恕洲,靈堂內(nèi)的尸體忽然破棺而出塔橡,到底是詐尸還是另有隱情,我是刑警寧澤霜第,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布葛家,位于F島的核電站,受9級特大地震影響泌类,放射性物質(zhì)發(fā)生泄漏癞谒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一刃榨、第九天 我趴在偏房一處隱蔽的房頂上張望弹砚。 院中可真熱鬧,春花似錦枢希、人聲如沸桌吃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茅诱。三九已至,卻和暖如春搬卒,著一層夾襖步出監(jiān)牢的瞬間瑟俭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工契邀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摆寄,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓蹂安,卻偏偏與公主長得像椭迎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子田盈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359