chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Service在Kubernetes中的作用、使用方法及原理

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 作者:陳成 ? 2022-07-26 10:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【導(dǎo)讀】本文主要講述了K8S Service的基本概念,使用方式及實(shí)現(xiàn)原理。

故事的開始,讓我們先從一件生產(chǎn)故障說起。5月29日,內(nèi)部某系統(tǒng)出現(xiàn)大規(guī)模訪問Service故障,發(fā)現(xiàn)Pod容器內(nèi)無法正常訪問ServiceIP:Port,整個(gè)故障持續(xù)時(shí)間超過12h,相關(guān)運(yùn)維支撐人員沒有找到根本原因和解決辦法。

經(jīng)過復(fù)盤,我們發(fā)現(xiàn),大家對(duì)于K8S Service的原理不夠清晰,導(dǎo)致對(duì)問題的定位不能做得到快速準(zhǔn)確,如果當(dāng)時(shí)能夠按照如下的思路去思考問題,排查過程不至于花費(fèi)如此久的時(shí)間。

下面,我們就來細(xì)說一下Service在Kubernetes中的作用、使用方法及原理

Service是一種暴露一組Pod網(wǎng)絡(luò)的抽象方式,K8S Service提供了針對(duì)于一組Pod的負(fù)載均衡的暴露。通過這樣的方式,可以避免不同的pod之間訪問時(shí)需要知曉對(duì)應(yīng)pod網(wǎng)絡(luò)信息的痛苦。例如:前端->后端,由于前端POD IP隨時(shí)變動(dòng),后端亦如此,如何處理前端POD和后端POD的通信,就需要Service這一抽象,來保證簡單可靠。

Service的使用

1、典型服務(wù)配置方法

當(dāng)配置了selector之后,Service Controller會(huì)自動(dòng)查找匹配這個(gè)selector的pod,并且創(chuàng)建出一個(gè)同名的endpoint對(duì)象,負(fù)責(zé)具體service之后連接。

apiVersion: v1kind: Servicemetadata:  name: my-servicespec:  selector:    app: MyApp  ports:    - protocol: TCP      port: 80      targetPort: 9376

2、配置沒有selector的服務(wù)

沒有selector的service不會(huì)出現(xiàn)Endpoint的信息,需要手工創(chuàng)建Endpoint綁定,Endpoint可以是內(nèi)部的pod,也可以是外部的服務(wù)。

apiVersion: v1kind: Servicemetadata:  name: my-servicespec:  ports:    - protocol: TCP      port: 80      targetPort: 9376---apiVersion: v1kind: Endpointsmetadata:  name: my-servicesubsets:  - addresses:      - ip: 192.0.2.42    ports:      - port: 9376

Service的類型

1.CluserIP

kubectl expose pod nginx --type=CluserIP --port=80 --name=ng-svc apiVersion: v1kind: Servicemetadata:  name: ng-svc  namespace: defaultspec:  selector:      name: nginx  clusterIP: 11.254.0.2  ports:  - name: http    port: 80    protocol: TCP    targetPort: 1234  sessionAffinity: None  type: ClusterIP

2.LoadBalance

apiVersion: v1kind: Servicemetadata:  name: my-servicespec:  selector:    app: MyApp  ports:  - protocol: TCP    port: 80    targetPort: 9376  clusterIP: 10.0.171.239  type: LoadBalancerstatus:  loadBalancer:    ingress:    - ip: 192.0.2.127
3.NodePort

apiVersion: v1kind: Servicemetadata:name: my-servicespec:type: NodePortselector:  app: MyAppports:  - port: 80    targetPort: 80    nodePort: 30007
4.ExternalName 5.Headless

apiVersion: v1kind: Servicemetadata:  labels:    run: curl  name: my-headless-service  namespace: defaultspec:  clusterIP: None  ports:  - port: 80    protocol: TCP    targetPort: 80  selector:    run: curl  type: ClusterIP
對(duì)定義了選擇算符的無頭服務(wù),Endpoint 控制器在 API 中創(chuàng)建了 Endpoints 記錄, 并且修改 DNS 配置返回 A 記錄(IP 地址),通過這個(gè)地址直接到達(dá) Service 的后端 Pod 上。

# ping my-headless-servicePING my-headless-service (172.200.6.207): 56 data bytes64 bytes from 172.200.6.207: seq=0 ttl=64 time=0.040 ms64bytesfrom172.200.6.207:seq=1ttl=64time=0.063ms

對(duì)沒有定義選擇算符的無頭服務(wù),Endpoint 控制器不會(huì)創(chuàng)建 Endpoints 記錄。然而 DNS 系統(tǒng)會(huì)查找和配置,無論是:

對(duì)于 ExternalName 類型的服務(wù),查找其 CNAME 記錄

對(duì)所有其他類型的服務(wù),查找與 Service 名稱相同的任何 Endpoints 的記錄

Service的實(shí)現(xiàn)方式

1.用戶態(tài)代理訪問

5ef8eec8-0c23-11ed-ba43-dac502259ad0.png

即:當(dāng)對(duì)于每個(gè)Service,Kube-Proxy會(huì)在本地Node上打開一個(gè)隨機(jī)選擇的端口,連接到代理端口的請(qǐng)求,都會(huì)被代理轉(zhuǎn)發(fā)給Pod。那么通過Iptables規(guī)則,捕獲到達(dá)Service:Port的請(qǐng)求都會(huì)被轉(zhuǎn)發(fā)到代理端口,代理端口重新轉(zhuǎn)為對(duì)Pod的訪問

這種方式的缺點(diǎn)是存在內(nèi)核態(tài)轉(zhuǎn)為用戶態(tài),再有用戶態(tài)轉(zhuǎn)發(fā)的兩次轉(zhuǎn)換,性能較差,一般不再使用

2.Iptables模式

5f1bd4d8-0c23-11ed-ba43-dac502259ad0.png

3.Ipvs模式

5f43f0c6-0c23-11ed-ba43-dac502259ad0.png

Service Iptables實(shí)現(xiàn)原理

Iptables表和鏈及處理過程

5f66bebc-0c23-11ed-ba43-dac502259ad0.png

Service的Traffic流量將會(huì)通過prerouting和output重定向到kube-service鏈

-APREROUTING-mcomment--comment"kubernetesserviceportals"-jKUBE-SERVICES-APOSTROUTING-mcomment--comment"kubernetespostroutingrules"-jKUBE-POSTROUTING-A OUTPUT -m comment --comment "kubernetes service portals" -j KUBE-SERVICES

KUBE-SERVICES->KUBE-SVC-XXXXXXXXXXXXXXXX->KUBE-SEP-XXXXXXXXXXXXXXXX represents a ClusterIP service

KUBE-NODEPORTS->KUBE-SVC-XXXXXXXXXXXXXXXX->KUBE-SEP-XXXXXXXXXXXXXXXX represents a NodePort service

幾種不同類型的Service在Kube-Proxy啟用Iptables模式下上的表現(xiàn)

ClusterIP

-A KUBE-SERVICES ! -s 172.200.0.0/16 -d 10.100.160.92/32 -p tcp -m comment --comment "default/ccs-gateway-clusterip:http cluster IP" -m tcp --dport 30080 -j KUBE-MARK-MASQ-A KUBE-SERVICES -d 10.100.160.92/32 -p tcp -m comment --comment "default/ccs-gateway-clusterip:http cluster IP" -m tcp --dport 30080 -j KUBE-SVC-76GERFBRR2RGHNBJ  

-A KUBE-SVC-76GERFBRR2RGHNBJ -m comment --comment "default/ccs-gateway-clusterip:http" -m statistic --mode random --probability 0.33333333349 -j KUBE-SEP-GBVECAZBIC3ZKMXB-A KUBE-SVC-76GERFBRR2RGHNBJ -m comment --comment "default/ccs-gateway-clusterip:http" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-PVCYYXEU44D3IMGK-A KUBE-SVC-76GERFBRR2RGHNBJ -m comment --comment "default/ccs-gateway-clusterip:http" -j KUBE-SEP-JECGZLHE32MEARRX-AKUBE-SVC-CEZPIJSAUFW5MYPQ-mcomment--comment"kubernetes-dashboard/kubernetes-dashboard"-jKUBE-SEP-QO6MV4HR5U56RP7M

-A KUBE-SEP-GBVECAZBIC3ZKMXB -s 172.200.6.224/32 -m comment --comment "default/ccs-gateway-clusterip:http" -j KUBE-MARK-MASQ-AKUBE-SEP-GBVECAZBIC3ZKMXB-ptcp-mcomment--comment"default/ccs-gateway-clusterip:http"-mtcp-jDNAT--to-destination172.200.6.224:80...

NodePort

apiVersion: v1kind: Servicemetadata:labels:  app: ccs-gatewayspec:clusterIP: 10.101.156.39externalTrafficPolicy: Clusterports:- name: http  nodePort: 30081  port: 30080  protocol: TCP  targetPort: 80selector:  app: ccs-gatewaysessionAffinity: Nonetype: NodePort

-AKUBE-NODEPORTS-ptcp-mcomment--comment"default/ccs-gateway-service:http"-mtcp--dport30081-jKUBE-MARK-MASQ-AKUBE-NODEPORTS-ptcp-mcomment--comment"default/ccs-gateway-service:http"-mtcp--dport30081-jKUBE-SVC-QYHRFFHL5VINYT2K############################-AKUBE-SVC-QYHRFFHL5VINYT2K-mcomment--comment"default/ccs-gateway-service:http"-mstatistic--moderandom--probability0.50000000000-jKUBE-SEP-2NPKETIWKKVUXGCL-AKUBE-SVC-QYHRFFHL5VINYT2K-mcomment--comment"default/ccs-gateway-service:http"-jKUBE-SEP-6O5FHQRN5IVNPW4Q##########################-AKUBE-SEP-2NPKETIWKKVUXGCL-s172.200.6.224/32-mcomment--comment"default/ccs-gateway-service:http"-jKUBE-MARK-MASQ-AKUBE-SEP-2NPKETIWKKVUXGCL-ptcp-mcomment--comment"default/ccs-gateway-service:http"-mtcp-jDNAT--to-destination172.200.6.224:80#########################-AKUBE-SEP-6O5FHQRN5IVNPW4Q-s172.200.6.225/32-mcomment--comment"default/ccs-gateway-service:http"-jKUBE-MARK-MASQ-A KUBE-SEP-6O5FHQRN5IVNPW4Q -p tcp -m comment --comment "default/ccs-gateway-service:http" -m tcp -j DNAT --to-destination 172.200.6.225:80

同時(shí),可以看到Service所申請(qǐng)的端口38081被Kube-proxy所代理和監(jiān)聽

# netstat -ntlp | grep 30081tcp       0      00.0.0.0:30081           0.0.0.0:*               LISTEN     3665705/kube-proxy

LoadBalancer

不帶有Endpoint的Service

kubectl create svc clusterip fake-endpoint --tcp=80 -A KUBE-SERVICES -d 10.101.117.0/32 -p tcp -m comment --comment "default/fake-endpoint:80 has no endpoints" -m tcp --dport 80 -j REJECT --reject-with icmp-port-unreachable

帶有外部endpoint的Service

直接通過iptable規(guī)則轉(zhuǎn)發(fā)到對(duì)應(yīng)的外部ep地址

apiVersion: v1kind: Servicemetadata:  labels:    app: external  name: external  namespace: defaultspec:  ports:  - name: http    protocol: TCP    port: 80  sessionAffinity: None  type: ClusterIP---apiVersion: v1kind: Endpointsmetadata:  labels:    app: external  name: external  namespace: defaultsubsets:- addresses:  - ip: 10.124.142.43  ports:  - name: http    port: 80protocol: TCP

-A KUBE-SERVICES ! -s 172.200.0.0/16 -d 10.111.246.87/32 -p tcp -m comment --comment "default/external:http cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ-A KUBE-SERVICES -d 10.111.246.87/32 -p tcp -m comment --comment "default/external:http cluster IP" -m tcp --dport 80 -j KUBE-SVC-LI2K5327B6J24KJ3 

-A KUBE-SEP-QTGIPNOYXN2CZGD5 -s 10.124.142.43/32 -m comment --comment "default/external:http" -j KUBE-MARK-MASQ-A KUBE-SEP-QTGIPNOYXN2CZGD5 -p tcp -m comment --comment "default/external:http" -m tcp -j DNAT --to-destination 10.124.142.43:80

總結(jié)

ClusterIP類型,KubeProxy監(jiān)聽Service和Endpoint創(chuàng)建規(guī)則,采用DNAT將目標(biāo)地址轉(zhuǎn)換為Pod的ip和端口,當(dāng)有多個(gè)ep時(shí),按照策略進(jìn)行轉(zhuǎn)發(fā),默認(rèn)RR模式時(shí),iptables采用:比如有4個(gè)實(shí)例,四條規(guī)則的概率分別為0.25, 0.33, 0.5和 1,按照順序,一次匹配完成整個(gè)流量的分配。

NodePort類型,將會(huì)在上述ClusterIP模式之后,再加上Kube-Proxy的監(jiān)聽(為了確保其他服務(wù)不會(huì)占用該端口)和KUBE-NODEPORT的iptable規(guī)則

審核編輯:彭靜

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    17621

    瀏覽量

    190046
  • 網(wǎng)絡(luò)信息
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    10530
  • Service
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    14287

原文標(biāo)題:K8S Service 實(shí)戰(zhàn)與原理初探

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    堆棧的定義,堆棧的使用方法

    和使用; 對(duì)于8086CPU,進(jìn)出堆棧的只能是2字節(jié)的數(shù)據(jù)。 2 堆棧的使用方法 常用的堆棧相關(guān)指令包括PUSH POP PUSHF和POPF,語法如下: PUSH 源操作數(shù);將指定操作數(shù)入棧保護(hù) POP
    發(fā)表于 11-21 06:49

    借助京東AI言犀提升Kubernetes集群巡檢的效率和準(zhǔn)確性

    介紹 目前k8s-cluster-inspector組件可以自動(dòng)化完成Kubernetes集群巡檢,并在巡檢結(jié)果給出當(dāng)前集群存在的問題,問題分級(jí),問題類型,問題解決方法。 示例巡檢數(shù)據(jù)結(jié)構(gòu)如下
    的頭像 發(fā)表于 09-15 16:56 ?427次閱讀
    借助京東AI言犀提升<b class='flag-5'>Kubernetes</b>集群巡檢的效率和準(zhǔn)確性

    高效管理Kubernetes集群的實(shí)用技巧

    作為一名經(jīng)驗(yàn)豐富的運(yùn)維工程師,我深知日常的Kubernetes集群管理,熟練掌握kubectl命令是提升工作效率的關(guān)鍵。今天,我將分享15個(gè)經(jīng)過實(shí)戰(zhàn)檢驗(yàn)的kubectl實(shí)用技巧,幫助你像藝術(shù)家一樣優(yōu)雅地管理K8s集群。
    的頭像 發(fā)表于 08-13 15:57 ?587次閱讀

    錫膏的儲(chǔ)存及使用方法詳解

    錫膏是一種常用的焊接輔助材料,廣泛應(yīng)用于電子、電器、通訊、儀表等行業(yè)的焊接工藝。正確的儲(chǔ)存和使用方法對(duì)于保證錫膏的品質(zhì)和焊接效果至關(guān)重要。本文將就錫膏的儲(chǔ)存和使用方法進(jìn)行詳細(xì)介紹,希望能對(duì)廣大焊接工作者有所幫助。
    的頭像 發(fā)表于 07-18 17:36 ?1036次閱讀
    錫膏的儲(chǔ)存及<b class='flag-5'>使用方法</b>詳解

    生產(chǎn)環(huán)境Kubernetes容器安全的最佳實(shí)踐

    隨著容器化技術(shù)的快速發(fā)展,Kubernetes已成為企業(yè)級(jí)容器編排的首選平臺(tái)。然而,享受Kubernetes帶來的便利性和可擴(kuò)展性的同時(shí),安全問題也日益凸顯。本文將從運(yùn)維工程師的角度,深入探討生產(chǎn)環(huán)境
    的頭像 發(fā)表于 07-14 11:09 ?462次閱讀

    樹莓派部署 Kubernetes:通過 UDM Pro 實(shí)現(xiàn) BGP 負(fù)載均衡!

    最近,我將家庭實(shí)驗(yàn)室的架構(gòu)核心切換為一組樹莓派。盡管樹莓派上運(yùn)行的Kubernetes發(fā)行版眾多,但在資源受限的設(shè)備上運(yùn)行Kubernetes時(shí),控制平面的開銷是一個(gè)常見挑戰(zhàn)
    的頭像 發(fā)表于 06-25 18:00 ?719次閱讀
    樹莓派部署 <b class='flag-5'>Kubernetes</b>:通過 UDM Pro 實(shí)現(xiàn) BGP 負(fù)載均衡!

    詳解Kubernetes的Pod調(diào)度親和性

    Kubernetes(K8s),Pod 調(diào)度親和性(Affinity) 是一種高級(jí)調(diào)度策略,用于控制 Pod 與節(jié)點(diǎn)(Node)或其他 Pod 之間的關(guān)聯(lián)(親和)或反關(guān)聯(lián)(反親和)關(guān)系。通過親和性規(guī)則,管理員可以更精細(xì)地控
    的頭像 發(fā)表于 06-07 13:56 ?697次閱讀

    Kubernetes Helm入門指南

    Helm 是 Kubernetes 的包管理工具,它允許開發(fā)者和系統(tǒng)管理員通過定義、打包和部署應(yīng)用程序來簡化 Kubernetes 應(yīng)用的管理工作。Helm 的出現(xiàn)是為了解決 Kuberne
    的頭像 發(fā)表于 04-30 13:42 ?2883次閱讀
    <b class='flag-5'>Kubernetes</b> Helm入門指南

    Kubernetes負(fù)載均衡器MetalLB介紹

    Kubernetes中一個(gè)應(yīng)用服務(wù)會(huì)有一個(gè)或多個(gè)實(shí)例,每個(gè)實(shí)例(Pod)的IP地址由網(wǎng)絡(luò)插件動(dòng)態(tài)隨機(jī)分配(Pod重啟后IP地址會(huì)改變)。為屏蔽這些后端實(shí)例的動(dòng)態(tài)變化和對(duì)多實(shí)例的負(fù)載均衡,引入了 Service這個(gè)資源對(duì)象。
    的頭像 發(fā)表于 03-18 16:24 ?702次閱讀
    <b class='flag-5'>Kubernetes</b>負(fù)載均衡器MetalLB介紹

    PXI-8433/4的規(guī)范使用方法分享

    應(yīng)用,因兩線制接線配置不當(dāng)導(dǎo)致通訊障。本文將以此問題為入點(diǎn),系統(tǒng)講解PXI-8433/4的規(guī)范使用方法
    的頭像 發(fā)表于 03-14 10:38 ?1399次閱讀
    PXI-8433/4的規(guī)范<b class='flag-5'>使用方法</b>分享

    Kubernetes Pod常用管理命令詳解

    Kubernetes Pod常用管理命令詳解
    的頭像 發(fā)表于 02-17 14:06 ?961次閱讀
    <b class='flag-5'>Kubernetes</b> Pod常用管理命令詳解

    精密空調(diào)操作使用方法詳解

    精密空調(diào)操作使用方法詳解
    的頭像 發(fā)表于 02-10 14:44 ?1849次閱讀
    精密空調(diào)操作<b class='flag-5'>使用方法</b>詳解

    Kubernetes:構(gòu)建高效的容器化應(yīng)用平臺(tái)

    Kubernetes 作為容器編排的事實(shí)標(biāo)準(zhǔn),容器化應(yīng)用部署中發(fā)揮著關(guān)鍵作用。 搭建 Kubernetes 集群是應(yīng)用的基礎(chǔ)??梢允褂胟ubeadm工具快速搭建。
    的頭像 發(fā)表于 01-23 15:22 ?562次閱讀

    快速了解電源模塊的使用方法

    電源是整個(gè)電路可靠工作的核心部分。然而,由于電源電路的電流和發(fā)熱量較大,容易出現(xiàn)故障。今天我為大家介紹一下電源模塊的使用方法
    的頭像 發(fā)表于 01-21 15:24 ?1364次閱讀

    AB伺服軟件使用方法

    AB伺服軟件使用方法
    發(fā)表于 12-24 14:45 ?1次下載