国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

k8s Service服務(wù)詳解

這篇具有很好參考價值的文章主要介紹了k8s Service服務(wù)詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. Service 的概念:

  • k8s中Service定義了這樣一種抽象:一個pod的邏輯分組,一種可以訪問他們的策略—通常稱為微服務(wù)。這一組pod能夠被Service訪問到,通常是通過Label Selector

k8s 查看service,kubernetes,代理模式,容器

  • Service能夠提供負載均衡的能力,但是在使用上有以下限制:

    • 只提供4層負載均衡能力,而沒有7層功能,但有時我們可能需要更多的匹配規(guī)則來轉(zhuǎn)發(fā)請求,這點上4層負載均衡不支持的。

2. Service的類型:

  • Service在k8s中有以下四種類型:

    • ClusterIp:默認類型,自動分配一個僅Cluster內(nèi)部可以訪問的虛擬IP。
    • NodePort:在ClusterIp基礎(chǔ)上為Service在每臺機器上綁定一個端口,這樣就可以通過 NodeIP:NodePort來訪問該服務(wù)。
    • LoadBalancer:在NodePort的基礎(chǔ)上,借助Cluster Provider創(chuàng)建一個外部負載均衡器,并將請求轉(zhuǎn)發(fā)到NodeIP:NodePort
    • ExternalName:把集群外部的服務(wù)引入到集群內(nèi)部來,在集群內(nèi)部直接使用,沒有任何類型代理被創(chuàng)建,這里只有k8s1.7或更高版本的kube-dns才支持。

k8s 查看service,kubernetes,代理模式,容器

3. Vip和Service代理

  • 在k8s集群中,每個Node運行一個kube-proxy進程。kube-proxy負責(zé)為service實現(xiàn)一種VIP(虛擬IP)的形式,而不是ExternalName的形式。在k8s V1.0版本,代理完全在userspace。在k8s V1.1版本,新增了Iptables代理 ,但不是默認的運行模式。從k8s V1.2版本起,默認就是Iptables代理,在k8s V1.8.0-beta.0中,添加了ipvs代理。在k8s V1.14版本開始模式使用ipvs代理。
  • 在k8s v1.0版本,Service是“4層”(TCP/UDP over IP)概念。在K8s v1.1版本,新增了Ingress API(beta版),用來表示“7層”(HTTP)服務(wù)

4. 代理模式的分類:

4.1. userspace代理模式:

k8s 查看service,kubernetes,代理模式,容器

4.2. iptables代理模式:

k8s 查看service,kubernetes,代理模式,容器

4.3. Ipvs代理模式

  • 這種模式,kube-proxy會監(jiān)視k8s service對象和Endpoints,調(diào)用netlink接口以相應(yīng)的創(chuàng)建ipvs規(guī)則并定期與k8s service對象和Endpoints對象同步ipvs規(guī)則,以確保ipvs狀態(tài)與期望一致。訪問服務(wù)時,流量將重定向到后端pod。

  • 與iptables類似,ipvs與netfilter的hook功能,但使用哈希表作為底層數(shù)據(jù)結(jié)構(gòu)并在內(nèi)核空間工作。這意味著ipvs可以更快的重定向流量,并且在同步代理規(guī)則時具有更好的性能。此外ipvs為負載均衡算法提供了更多選項,例如:

    • rr:輪詢調(diào)度
    • lc:最小連接數(shù)
    • dh:目標哈希
    • sh:源哈希
    • sed:最短期望延遲
    • nq:不排隊調(diào)度
  • 注意:ipvs模式假定在運行kube-proxy之前在節(jié)點上都已經(jīng)安裝了ipvs內(nèi)核模塊。當kube-proxy以ipvs代理模式啟動時,kube-proxy將驗證節(jié)點是否安裝ipvs模塊,如果未安裝,則kube-proxy 將退到iptables代理模式。
    k8s 查看service,kubernetes,代理模式,容器

5. ClusterlP

  • clusterlP主要在每個node節(jié)點使用iptables,將發(fā)向clusterlP對應(yīng)端口的數(shù)據(jù),轉(zhuǎn)發(fā)到kube-proxy中。然后kube-proxy自己內(nèi)部實現(xiàn)有負載均衡的方法,并可以查詢到這個service下對應(yīng)pod的地址和端口,進而把數(shù)據(jù)轉(zhuǎn)發(fā)給對應(yīng)的pod的地址和端口

k8s 查看service,kubernetes,代理模式,容器

  • 為了實現(xiàn)圖上的功能,主要需要以下幾個組件的協(xié)同工作:

    • apiserver用戶通過kubectl命令向apiserver發(fā)送創(chuàng)建service的命令,apiserver接收到情求后將數(shù)據(jù)存儲到etcd中
    • kube-proxy kubernetesl的每個節(jié)點中都有一個叫做kube-porxy的進程,這個進程負責(zé)感知service,pod的變化,并將變化的信息寫入本地的iptables規(guī)則中
    • iptables使用NAT等技術(shù)將virtuallP的流量轉(zhuǎn)至endpoint中

    5.1. 實例:

vim  nginx.yaml

apiVersion: apps/v1  #指定使用的API版本
kind: Deployment     #指定對象類型為Deployment
metadata:   #元數(shù)據(jù)部分,包含名稱和命名空間等信息
  name: nginx-deployment  #定義deployment的名稱為nginx-deployment
  namespace: default  #指定創(chuàng)建所在的命名空間
spec:    #指定 deployment 對象的配置信息
  selector:  #選擇器,用于選擇要部署的Pod
    matchLabels:  #匹配標簽,選擇具有指定標簽的Pod
      app: nginx  
      release: stabel  
  replicas: 3   #指定要創(chuàng)建的Pod副本數(shù)量
  template:    #Pod的模板,定義了要創(chuàng)建的Pod的規(guī)范
    metadata:  #Pod元數(shù)據(jù)部分,包含標簽等信息
      labels:  #Pod 標簽
        app: nginx
        release: stabel
    spec:   #Pod 配置信息
      containers:  #容器列表信息
      - name: nginx  #容器名稱
        image: nginx:latest  #指定容器的鏡像
        imagePullPolicy: IfNotPresent #指定容器拉取鏡像策略,本地不存在鏡像時才嘗試拉取新鏡像
        ports: #容器暴露的端口列表
        - name: http  #端口名稱
          containerPort: 80  #容器的端口號

---

apiVersion: v1    #指定使用的API版本 
kind: Service     #指定對象類型為Service
metadata:         #元數(shù)據(jù)部分,包含名稱和命名空間等信息
  name: nginx-service  #定義service的名稱為nginx-service
  namespace: default   #指定service創(chuàng)建所在的命名空間
spec:     #指定 service對象的配置信息
  type: ClusterIP  #指定Service類型為ClusterIP,即集群內(nèi)部訪問
  selector:    #選擇器,用于選擇要關(guān)聯(lián)的Pod
    app: nginx   #匹配具有指定標簽的Pod
    release: stabel  #匹配具有指定標簽的Pod
  ports:  #Service暴露的端口列表
    - name: http  #端口名稱
      protocol: TCP  #端口協(xié)議
      port: 80    #Service的端口號
      targetPort: 80  #將流量轉(zhuǎn)發(fā)到Pod的端口號

  • 這個示例中,Deployment創(chuàng)建了3個副本的nginx Pod,并將它們的標簽設(shè)置為app: nginx和release: stabel。Service使用相同的標簽選擇與這些Pod關(guān)聯(lián),并在集群內(nèi)部暴露端口80,以便其他Pod可以通過nginx-service:80的方式訪問這些Pod。

5.2. 創(chuàng)建

[root@master1 yaml]# kubectl apply -f nginx.yaml

[root@master1 yaml]# kubectl get svc
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.10.0.1       <none>        443/TCP   8h
nginx-service   ClusterIP   10.10.156.191   <none>        80/TCP    12s

[root@master1 yaml]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-77fd88977b-2rlkk   1/1     Running   0          3m3s
nginx-deployment-77fd88977b-979tp   1/1     Running   0          3m3s
nginx-deployment-77fd88977b-g57b5   1/1     Running   0          3m3s


[root@master1 yaml]# curl 10.10.156.191
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

6. Headless Service

  • 有時不需要或不想要負載均衡,以及單獨的Service IP。遇到這種情況,可以通過指定ClusterIP(spec.clusterlP)的值為"None"來創(chuàng)建Headless Service。這類Service并不會分配ClusterIP,kube-proxy不會處理它們,而且平臺也不會為它們進行負載均衡和路由
vim  nginx-service-headless.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-headless-service
  namespace: default
spec:
  selector:
    app: nginx
    release: stabel
  clusterIP: "None"
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80

6.1. 創(chuàng)建

      targetPort: 80
[root@master1 yaml]# kubectl apply -f nginx-service-headless.yaml
service/nginx-headless-service created
[root@master1 yaml]# kubectl get svc
NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes               ClusterIP   10.10.0.1       <none>        443/TCP   29h
nginx-headless-service   ClusterIP   None            <none>        80/TCP    8s    ---可以看的出來clusterIP是空的
nginx-service            ClusterIP   10.10.196.214   <none>        80/TCP    42m

6.2. 驗證:

[root@master1 yaml]# yum -y install bind-utils.x86_64
用dns服務(wù)解析nginx-headless-service.default.svc.cluster.local.這個域名下是不是有三個pod的IP地址
[root@master1 yaml]# dig -t A nginx-headless-service.default.svc.cluster.local. @10.244.0.6

k8s 查看service,kubernetes,代理模式,容器

7. NodePort

  • nodePort的原理在于在node上開了一個端口,將向該端口的流量導(dǎo)入到kube-proxy,然后由kube-proxy進一步到給對應(yīng)的pod
vim  nginx-service-nodeport.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-nodeport-service
  namespace: default
spec:
  type: NodePort
  selector:
    app: nginx
    release: stabel
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30080

7.1. 創(chuàng)建:

[root@master1 yaml]# kubectl apply -f nginx-service-nodeport.yaml
service/nginx-nodeport-service created
[root@master1 yaml]# kubectl get svc
NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes               ClusterIP   10.10.0.1       <none>        443/TCP        30h
nginx-headless-service   ClusterIP   None            <none>        80/TCP         26m
nginx-nodeport-service   NodePort    10.10.113.141   <none>        80:30080/TCP   7s
nginx-service            ClusterIP   10.10.196.214   <none>        80/TCP         68m

7.2. 驗證:

k8s 查看service,kubernetes,代理模式,容器

8. LoadBalancer

  • loadBalancer和nodePort其實是同一種方式。區(qū)別在于loadBalancer比nodePor片多了一步,就是可以調(diào)用cloud provider去創(chuàng)建LB來向節(jié)點導(dǎo)流

k8s 查看service,kubernetes,代理模式,容器

9. ExternalName

  • 這種類型的Service通過返回CNAME和它的值,可以將服務(wù)映射到externalName字段的內(nèi)容(例如:hub.atguigu.com)。ExternalName Service是Service的特例,它沒有selector,也沒有定義任何的端口和Endpoint。相反的,對于運行在集群外部的服務(wù),它通過返回該外部服務(wù)的別名這種方式來提供服務(wù)
vim  externalname-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-external-service
  namespace: default
spec:
  type: ExternalName
  externalName: example.com

9.1. 創(chuàng)建:

[root@master1 yaml]# kubectl apply -f externalname-service.yaml
service/my-external-service created
[root@master1 yaml]# kubectl get svc
NAME                     TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes               ClusterIP      10.10.0.1       <none>        443/TCP        31h
my-external-service      ExternalName   <none>          example.com   <none>         4s
nginx-headless-service   ClusterIP      None            <none>        80/TCP         86m
nginx-nodeport-service   NodePort       10.10.113.141   <none>        80:30080/TCP   60m
nginx-service            ClusterIP      10.10.196.214   <none>        80/TCP         129m

9.2. 驗證:

[root@master1 yaml]# dig -t A my-external-service.default.svc.cluster.local. @10.244.0.6

k8s 查看service,kubernetes,代理模式,容器文章來源地址http://www.zghlxwxcb.cn/news/detail-642935.html

  • 當查詢主機my-external-service.default.svc.cluster.local(SVC_NAME.NAMESPACE.svc.cluster.local)時,集群的DNS服務(wù)將返回一個值my.database.example.com的CNAME記錄。訪問這個服務(wù)的工作方式和其他的相同,唯一不同的是重定向發(fā)生在DNS層,而且不會進行代理或轉(zhuǎn)發(fā)

到了這里,關(guān)于k8s Service服務(wù)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • k8s服務(wù)發(fā)現(xiàn)之第二彈Service詳解

    k8s服務(wù)發(fā)現(xiàn)之第二彈Service詳解

    Kubernetes Servies 是一個 RESTFul 接口對象,可通過 yaml 文件創(chuàng)建。 例如,假設(shè)您有一組 Pod: 每個 Pod 都監(jiān)聽 9376 TCP 端口 每個 Pod 都有標簽 app=MyApp 上述 YAML 文件可用來創(chuàng)建一個 Service: 名字為 my-service 目標端口為 TCP 9376 選取所有包含標簽 app=MyApp 的 Pod 關(guān)于 Service,您還需要了解

    2024年02月16日
    瀏覽(19)
  • Kubernetes 啟動Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù)

    Kubernetes 啟動Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù)

    目錄 Pod 參考文檔:Pod | Kubernetes Pod配置文件:simple-pod.yaml 對master進行如下操作 Pod的狀態(tài)有: 參考文檔:(70條消息) Pod生命周期中的狀態(tài)解釋_pod狀態(tài)_鬧玩兒扣眼珠子的博客-CSDN博客 進入Pod內(nèi)的nginx容器: 當我們創(chuàng)建一個Pod,其中的步驟是什么?(啟動Pob的流程) 大概步驟:

    2024年02月13日
    瀏覽(100)
  • k8s service使用詳解

    在k8s里面,每個Pod都會被分配一個單獨的IP地址,但這個IP地址會隨著Pod的銷毀而消失,重啟pod的ip地址會發(fā)生變化,此時客戶如果訪問原先的ip地址則會報錯 ; Service (服務(wù))就是用來解決這個問題的, 對外服務(wù)的統(tǒng)一入口,防止pod失聯(lián),定義一組pod的訪問策略(服務(wù)發(fā)現(xiàn)、負載

    2024年01月16日
    瀏覽(33)
  • k8s之Service詳解

    k8s之Service詳解

    ? ? Kubernetes Serivce是一組具有相同label Pod集合的抽象(可以簡單的理解為集群內(nèi)的LB),集群內(nèi)外的各個服務(wù)可以通過Service進行互相通信。 Service創(chuàng)建 當用戶在kubernetes集群中創(chuàng)建了含有l(wèi)abel的Service之后,同時會在集群中創(chuàng)建出一個同名的Endpoints對象,用于存儲該Service下的Pod I

    2024年02月16日
    瀏覽(24)
  • 玩轉(zhuǎn)k8s:Service詳解

    玩轉(zhuǎn)k8s:Service詳解

    在kubernetes中,pod是應(yīng)用程序的載體,我們可以通過pod的ip來訪問應(yīng)用程序,但是pod的ip地址不是固定的,這也就意味著不方便直接采用pod的ip對服務(wù)進行訪問。 為了解決這個問題,kubernetes提供了Service資源,Service會對提供同一個服務(wù)的多個pod進行聚合,并且提供一個統(tǒng)一的入

    2024年02月05日
    瀏覽(27)
  • k8s&service服務(wù)發(fā)現(xiàn)

    k8s&service服務(wù)發(fā)現(xiàn)

    Service的功能::::::::::::::::::::: 服務(wù)發(fā)現(xiàn):發(fā)現(xiàn)pod的變化,宕機的不轉(zhuǎn)發(fā) 對外發(fā)布:讓外部訪問到內(nèi)部,穩(wěn)定的對外映射一個端口號nodeport Service有兩個ip,第一個是service內(nèi)部訪問用的 一個是向外提供服務(wù)的clusterip 定位dns,用dns解析? 實例文件:

    2024年02月03日
    瀏覽(50)
  • K8S | Service服務(wù)發(fā)現(xiàn)

    K8S | Service服務(wù)發(fā)現(xiàn)

    服務(wù)發(fā)現(xiàn)與負載均衡。 在微服務(wù)架構(gòu)中,這里以開發(fā)環(huán)境「Dev」為基礎(chǔ)來描述,在K8S集群中通常會開放:路由網(wǎng)關(guān)、注冊中心、配置中心等相關(guān)服務(wù),可以被集群外部訪問; 對于測試「Tes」環(huán)境或者生產(chǎn)「Pro」環(huán)境,出于安全或者環(huán)境隔離性來考慮,在正常情況下只會開放

    2024年02月14日
    瀏覽(20)
  • K8s Service網(wǎng)絡(luò)詳解(二)

    K8s Service網(wǎng)絡(luò)詳解(二)

    Kubernetes 在設(shè)計之初就充分考慮了針對容器的 服務(wù)發(fā)現(xiàn) 與 負載均衡 機制。 Service 資源,可以通過 kube-proxy 配合 cloud provider 來適應(yīng)不同的應(yīng)用場景。 Service相關(guān)的事情都由Node節(jié)點上的 kube-proxy處理。在Service創(chuàng)建時Kubernetes會分配IP給Service,同時通過API Server通知所有kube-proxy有新

    2024年02月15日
    瀏覽(31)
  • K8S之服務(wù)Service(十三)

    K8S之服務(wù)Service(十三)

    ?二,Pod與Service的關(guān)系 Service通過標簽關(guān)聯(lián)一組Pod Service為一組Pod提供負載均衡能力 ?三,定義與創(chuàng)建 創(chuàng)建service: kubectl apply -f service.yaml 查看service: kubectl get service ?四,服務(wù)類型 ? ClusterIP:集群內(nèi)部使用 ? NodePort:對外暴露應(yīng)用 ? LoadBalancer:對外暴露應(yīng)用,適用公有云

    2024年02月08日
    瀏覽(24)
  • 詳解K8S網(wǎng)絡(luò)模型(包含Service講解)

    詳解K8S網(wǎng)絡(luò)模型(包含Service講解)

    無意中翻閱官方文檔,看到了Kubernetes中的網(wǎng)絡(luò)模型, 于是,開始學(xué)習(xí),分享如下。 官方文檔: 網(wǎng)絡(luò)模型https://kubernetes.io/docs/concepts/services-networking/ Servicehttps://kubernetes.io/docs/concepts/services-networking/service/ 集群中的每個Pod會在集群范圍內(nèi)獲取自己唯一的IP地址。 因此,Pod間不需

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包