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

【云原生 | Kubernetes 系列】—K8s-Service 的概念

這篇具有很好參考價(jià)值的文章主要介紹了【云原生 | Kubernetes 系列】—K8s-Service 的概念。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

版權(quán) 本文為云錄原創(chuàng)文章,轉(zhuǎn)載無需和我聯(lián)系,但請(qǐng)注明來自云錄 https://www.yunzhuan.site

?? Service 的概念

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

【云原生 | Kubernetes 系列】—K8s-Service 的概念,k8s,云原生,云原生,kubernetes,容器

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

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

?? Service 類型

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

??VIP 和 Service 代理

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

??ipvs 代理模式

這種模式,kube-proxy 會(huì)監(jiān)視 Kubernetes Service 對(duì)象和 Endpoints ,調(diào)用 netlink 接口以相應(yīng)地創(chuàng)建
ipvs 規(guī)則并定期與 Kubernetes Service 對(duì)象和 Endpoints 對(duì)象同步 ipvs 規(guī)則,以確保 ipvs 狀態(tài)與期望一
致。訪問服務(wù)時(shí),流量將被重定向到其中一個(gè)后端 Pod
與 iptables 類似,ipvs 于 netfilter 的 hook 功能,但使用哈希表作為底層數(shù)據(jù)結(jié)構(gòu)并在內(nèi)核空間中工作。這意
味著 ipvs 可以更快地重定向流量,并且在同步代理規(guī)則時(shí)具有更好的性能。此外,ipvs 為負(fù)載均衡算法提供了更
多選項(xiàng),例如:
rr :輪詢調(diào)度
lc :最小連接數(shù)
dh :目標(biāo)哈希
sh :源哈希
sed :最短期望延遲
nq : 不排隊(duì)調(diào)度

【云原生 | Kubernetes 系列】—K8s-Service 的概念,k8s,云原生,云原生,kubernetes,容器

?? ClusterIP

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

apiserver 用戶通過kubectl命令向apiserver發(fā)送創(chuàng)建service的命令,apiserver接收到請(qǐng)求后將數(shù)據(jù)存儲(chǔ)
到etcd中

kube-proxy kubernetes的每個(gè)節(jié)點(diǎn)中都有一個(gè)叫做kube-porxy的進(jìn)程,這個(gè)進(jìn)程負(fù)責(zé)感知service,pod
的變化,并將變化的信息寫入本地的iptables規(guī)則中

iptables 使用NAT等技術(shù)將virtualIP的流量轉(zhuǎn)至endpoint中文章來源地址http://www.zghlxwxcb.cn/news/detail-818558.html

創(chuàng)建 SvcClusterIP.yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      release: stabel
  template:
    metadata:
      labels:
        app: myapp
        release: stabel
        env: test
    spec:
      containers:
        - name: myapp
          image: nginx:latest
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 80
---
# svc
apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  type: ClusterIP
  selector:
    app: myapp
    release: stabel
  ports:
    - name: http
      port: 80
      targetPort: 80

[root@k8s-master01 k8sservice]# kubectl  apply  -f  SvcClusterIP.yaml 
deployment.apps/myapp-deploy created
service/myapp created
[root@k8s-master01 k8sservice]# kubectl get po 
NAME                                    READY   STATUS    RESTARTS   AGE
myapp-deploy-547fddf58-sf566            1/1     Running   0          4s
myapp-deploy-547fddf58-skrw2            1/1     Running   0          4s
myapp-deploy-547fddf58-vtkzz            1/1     Running   0          4s
nfs-client-provisioner-876986df-vlrmv   1/1     Running   0          31h
[root@k8s-master01 k8sservice]# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP   10d
myapp        ClusterIP   10.98.113.5   <none>        80/TCP    41s
[root@k8s-master01 k8sservice]# curl  10.98.113.5
<!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>

?? Headless Service (無頭服務(wù))

有時(shí)不需要或不想要負(fù)載均衡,以及單獨(dú)的 Service IP 。遇到這種情況,可以通過指定 Cluster
IP(spec.clusterIP) 的值為 “None” 來創(chuàng)建 Headless Service 。這類 Service 并不會(huì)分配 Cluster IP, kube-
proxy 不會(huì)處理它們,而且平臺(tái)也不會(huì)為它們進(jìn)行負(fù)載均衡和路由

第一種:自主選擇權(quán),有時(shí)候client想自己決定使用哪個(gè)Real Server,可以通過查詢DNS來獲取Real Server的信息

第二種:headless service關(guān)聯(lián)的每個(gè)endpoint(也就是Pod),都會(huì)有對(duì)應(yīng)的DNS域名;這樣Pod之間就可以互相訪問
       headless services一般結(jié)合StatefulSet來部署有狀態(tài)的應(yīng)用,比如kafka集群,mysql集群,zk集群等

創(chuàng)建 SvcHeadless.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      release: stabel
  template:
    metadata:
      labels:
        app: myapp
        release: stabel
        env: test
    spec:
      containers:
        - name: myapp
          image: nginx:latest
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 80
---
# svc
apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  selector:
    app: myapp
    release: stabel
  clusterIP: "None"
  ports:
    - name: http
      port: 80
      targetPort: 80

[root@k8s-master01 k8sservice]# kubectl  apply   -f  SvcHeadless.yaml 
deployment.apps/myapp-deploy created
service/myapp created
[root@k8s-master01 k8sservice]# kubectl  get  po 
NAME                                    READY   STATUS    RESTARTS   AGE
myapp-deploy-547fddf58-clmhn            1/1     Running   0          4s
myapp-deploy-547fddf58-hwqm9            1/1     Running   0          4s
myapp-deploy-547fddf58-xkzfg            1/1     Running   0          4s
nfs-client-provisioner-876986df-vlrmv   1/1     Running   0          31h
[root@k8s-master01 k8sservice]# kubectl  get  svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   10d
myapp        ClusterIP   None         <none>        80/TCP    8s

?? NodePort

nodePort 的原理在于在 node 上開了一個(gè)端口,將向該端口的流量導(dǎo)入到 kube-proxy,然后由 kube-proxy 進(jìn)
一步到給對(duì)應(yīng)的 pod

創(chuàng)建SvcNodeport.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      release: stabel
  template:
    metadata:
      labels:
        app: myapp
        release: stabel
        env: test
    spec:
      containers:
        - name: myapp
          image: nginx:latest
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 80
---
# svc
apiVersion: v1
kind: Service
metadata:
  name: myapp
  namespace: default
spec:
  type: NodePort
  selector:
    app: myapp
    release: stabel
  ports:
    - name: http
      port: 80
      targetPort: 80
      nodePort: 30001
[root@k8s-master01 k8sservice]# kubectl  apply   -f  SvcNodeport.yaml 
deployment.apps/myapp-deploy created
service/myapp created
[root@k8s-master01 k8sservice]# kubectl  get  svc 
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        10d
myapp        NodePort    10.109.139.103   <none>        80:30001/TCP   7s

?? LoadBalancer

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

??ExternalName

把集群外部的服務(wù)引入到集群內(nèi)部來,在集群內(nèi)部直接使用。沒有任何類型代理被創(chuàng)建,這只有 Kubernetes 1.7或更高版本的kube-dns才支持。
這種類型的 Service 通過返回 CNAME 和它的值,可以將服務(wù)映射到 externalName 字段的內(nèi)容。
ExternalName Service 是 Service 的特例,它沒有 selector,也沒有定義任何的端口和Endpoint。
相反的,對(duì)于運(yùn)行在集群外部的服務(wù),它通過返回該外部服務(wù)的別名這種方式來提供服務(wù)

kind: Service
apiVersion: v1
metadata:
  name: my-service
  namespace: default
spec:
  type: ExternalName
  externalName: yunzhuan.site
當(dāng)查詢主機(jī) my-service.defalut.svc.cluster.local ( SVC_NAME.NAMESPACE.svc.cluster.local )時(shí),集群的
DNS 服務(wù)將返回一個(gè)值 yunzhuan.site 的 CNAME 記錄。訪問這個(gè)服務(wù)的工作方式和其他的相
同,唯一不同的是重定向發(fā)生在 DNS 層,而且不會(huì)進(jìn)行代理或轉(zhuǎn)發(fā)
版權(quán) 本文為云錄原創(chuàng)文章,轉(zhuǎn)載無需和我聯(lián)系,但請(qǐng)注明來自云錄 https://www.yunzhuan.site

到了這里,關(guān)于【云原生 | Kubernetes 系列】—K8s-Service 的概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【云原生 | Kubernetes 系列】K8s 實(shí)戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù)

    【云原生 | Kubernetes 系列】K8s 實(shí)戰(zhàn) 如何給應(yīng)用注入數(shù)據(jù)

    前面我們已經(jīng)一起學(xué)習(xí)了很多的東西了,本篇文章,我們將一起學(xué)習(xí),如何給應(yīng)用注入數(shù)據(jù),當(dāng)然,本篇文章不會(huì)講解全部知識(shí)點(diǎn),而是帶領(lǐng)大家,一起學(xué)習(xí)如何對(duì)我們的項(xiàng)目進(jìn)行相關(guān)的配置和設(shè)置。 創(chuàng)建 Pod 時(shí),可以為其下的容器設(shè)置啟動(dòng)時(shí)要執(zhí)行的命令及其參數(shù)。如果要

    2024年02月02日
    瀏覽(95)
  • 【云原生|K8s系列第1篇】:K8s的基礎(chǔ)概念、組件架構(gòu)及實(shí)戰(zhàn)安裝

    【云原生|K8s系列第1篇】:K8s的基礎(chǔ)概念、組件架構(gòu)及實(shí)戰(zhàn)安裝

    首先,K8s并不是一個(gè)傳統(tǒng)意義上的 PaaS平臺(tái)即服務(wù)的工具,它充分給使用者提供了很多很多選擇的空間。 不限制支持的應(yīng)用程序類型,K8s并不插手應(yīng)用程序框架, 也不限制支持的語(yǔ)言 (如 Java, Python, Ruby 等),只要應(yīng)用符合 12 因素即可。也就是說,只需要應(yīng)用可以在容器中運(yùn)行

    2024年02月03日
    瀏覽(101)
  • Kubernetes(K8s)從入門到精通系列之七:K8s的基本概念和術(shù)語(yǔ)之安全類

    開發(fā)的Pod應(yīng)用需要通過API Server查詢、創(chuàng)建及管理其他相關(guān)資源對(duì)象,所以這類用戶才是K8s的關(guān)鍵用戶。K8s設(shè)計(jì)了Service Account這個(gè)特殊的資源對(duì)象,代表Pod應(yīng)用的賬號(hào),為Pod提供必要的身份驗(yàn)證。在此基礎(chǔ)上,K8s實(shí)現(xiàn)和完善了基于角色的訪問控制權(quán)限系統(tǒng)——RBAC(Role-Based Acce

    2024年02月15日
    瀏覽(92)
  • Kubernetes(K8s)從入門到精通系列之五:K8s的基本概念和術(shù)語(yǔ)之應(yīng)用類

    Service: Service指的是無狀態(tài)服務(wù),通常多個(gè)程序副本提供服務(wù),在特殊情況下也可以是有狀態(tài)的單實(shí)例服務(wù),比如MySQL這種數(shù)據(jù)存儲(chǔ)類的服務(wù)。 K8s里的Service具有一個(gè)全局唯一的虛擬ClusterIP地址,客戶端可以通過這個(gè)虛擬IP地址+服務(wù)的端口直接訪問該服務(wù),再通過部署K8s集群的

    2024年02月14日
    瀏覽(92)
  • Kubernetes(K8s)從入門到精通系列之四:K8s的基本概念和術(shù)語(yǔ)之集群類

    集群表示一個(gè)由Master和Node組成的K8s集群。 Master指的是集群的控制節(jié)點(diǎn)。 在每個(gè)K8s集群都需要有一個(gè)或一組被稱為Master的節(jié)點(diǎn),來負(fù)責(zé)整個(gè)集群的管理和控制。 Master通常占據(jù)一個(gè)獨(dú)立的服務(wù)器(在高可用部署中建議至少使用3臺(tái)服務(wù)器),是整個(gè)集群的大腦。 在Master上運(yùn)行以下

    2024年02月15日
    瀏覽(27)
  • Kubernetes(K8s)從入門到精通系列之三:K8s的基本概念和術(shù)語(yǔ)之資源對(duì)象概述

    K8s中的基本概念和術(shù)語(yǔ)大多是圍繞資源對(duì)象(Resource Object)來說的,而資源對(duì)象在總體上可分為以下兩類: 某種資源的對(duì)象,例如節(jié)點(diǎn)(Node)、Pod、服務(wù)(Service)、存儲(chǔ)卷(Volume)。 與資源對(duì)象相關(guān)的事物與動(dòng)作,例如標(biāo)簽(Label)、注解(Annotation)、命名空間(Namespace)、部署(Deployment)、

    2024年02月14日
    瀏覽(110)
  • 【云原生 | Kubernetes 系列】K8s 實(shí)戰(zhàn) 使用 Kustomize 對(duì) Kubernetes 對(duì)象進(jìn)行聲明式管理

    【云原生 | Kubernetes 系列】K8s 實(shí)戰(zhàn) 使用 Kustomize 對(duì) Kubernetes 對(duì)象進(jìn)行聲明式管理

    Kustomize 是一個(gè)用來定制 Kubernetes 配置的工具。它提供以下功能特性來管理應(yīng)用配置文件: 從其他來源生成資源 為資源設(shè)置貫穿性(Cross-Cutting)字段 組織和定制資源集合 ConfigMap 和 Secret 包含其他 Kubernetes 對(duì)象(如 Pod)所需要的配置或敏感數(shù)據(jù)。 ConfigMap 或 Secret 中數(shù)據(jù)的來

    2024年01月17日
    瀏覽(102)
  • 【云原生 | Kubernetes 系列】—K8S部署RocketMQ集群(雙主雙從+同步模式)

    rocketMQ高可用有很多種方式,比如:?jiǎn)螜C(jī)部署,多主集群,雙主雙從同步部署,雙主雙從異步部署,以及多主多從部署。部署集群可按照自己公司的實(shí)際情況進(jìn)行部署。 單機(jī)部署:只啟動(dòng)一個(gè)rocketMQ實(shí)例就可以了,一般常用來本機(jī)測(cè)試使用。原因:一旦rocketMQ因某些原因掛掉,

    2024年02月04日
    瀏覽(122)
  • 【云原生 | Kubernetes 系列】— 部署K8S 1.28版本集群部署(基于Containerd容器運(yùn)行)

    主機(jī)名 IP地址 備注 k8s-master01 192.168.0.109 master k8s-node1 192.168.0.108 node1 k8s-node2 192.168.0.107 node1 k8s-node3 192.168.0.105 node1 1、主機(jī)配置 2、升級(jí)內(nèi)核 3、配置內(nèi)核轉(zhuǎn)發(fā)以及過濾 4、安裝ipset ipvsadm,IPVS(IP Virtual Server)是一個(gè)用于負(fù)載均衡的 Linux 內(nèi)核模塊,它可以用來替代 kube-proxy 默認(rèn)的

    2024年02月20日
    瀏覽(101)
  • 【云原生 | Kubernetes 系列】K8s 實(shí)戰(zhàn) Kubernetes 對(duì)象管理之指令式命令管理和配置文件命令式管理

    【云原生 | Kubernetes 系列】K8s 實(shí)戰(zhàn) Kubernetes 對(duì)象管理之指令式命令管理和配置文件命令式管理

    kubectl 工具能夠支持三種對(duì)象管理方式: 聲明式對(duì)象配置 指令式命令 指令式對(duì)象配置 前面我使用了兩篇文章講解了 使用配置文件對(duì) Kubernetes 對(duì)象進(jìn)行聲明式管理 的相關(guān)知識(shí)點(diǎn),本篇文章我將帶領(lǐng)大家一起學(xué)習(xí)剩下的兩個(gè)Kubernetes 對(duì)象管理的指令式命令管理和配置文件命令式

    2023年04月15日
    瀏覽(89)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包