最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

K8S內(nèi)部pod之間相互調(diào)用案例以及詳解

 更新時間:2023年08月02日 15:59:48   作者:大洋百度  
這篇文章主要給大家介紹了關(guān)于K8S內(nèi)部pod之間相互調(diào)用案例的相關(guān)資料,Pod是Kubernetes中最小的可部署單元,它是一個或多個容器的集合,它們共享網(wǎng)絡(luò)和存儲資源,并在同一節(jié)點上運行,需要的朋友可以參考下

服務(wù)發(fā)現(xiàn)簡介:

1、service是用于K8S的服務(wù)發(fā)現(xiàn)的重要組件,pod作為運行業(yè)務(wù)的承載方式,要想被客戶端訪問或者集群內(nèi)部其它服務(wù)訪問,就需要提供一個訪問入口;

 2、傳統(tǒng)來說ip+端口是普適的訪問方式,但是pod是一種動態(tài)的資源,它會因故障被重建或重啟,因而pod ip會發(fā)生變化,所以使用ip作為pod的訪問入口并不合適;而K8S是通過service來充當pod與訪問端的中間代理,要訪問pod首先訪問pod對應(yīng)的service,再由service代理到對應(yīng)的pod

3、而pod采用了標簽來代替ip作為唯一標識,以供service篩選。service對應(yīng)的也有標簽選擇器用來篩選pod標簽

4、 而service本身是ipvs規(guī)則,是由kube-porxy組件生成的,這個規(guī)則只要不刪除就會一直存在,但是刪除了service ip也會發(fā)生變化,這樣一來客戶端仍有無法訪問到service ip的風險

 5、因此K8S使用了DNS來記錄service ip和service域名的記錄,客戶端使用域名就可以通過DNS中拿到對應(yīng)的service ip了,而當service ip發(fā)生變化時,DNS也會動態(tài)的即使跟新到記錄表中,這樣即使service ip發(fā)生改變,仍然可以通過service的域名拿到對應(yīng)的service ip,有了service ip就可以訪問到Service 而后service代理到對應(yīng)的pod上

service類型:(主要用兩種)

1、clusterIP:   在K8S集群內(nèi)部通信使用,無法接入集群外部流量

2、NodePort:  可以接入集群外部流量,在每個node節(jié)點監(jiān)聽一個和service定義的相同的端口,用于客戶端的訪問,把請求轉(zhuǎn)發(fā)到對應(yīng)的service,然后service再轉(zhuǎn)發(fā)給pod; 用于將K8S服務(wù)暴露給K8S以外的客戶端訪問

注:serviceIP=clusterIP

NodePort 訪問流程如下:

    客戶端client ------->node_IP+端口------->cluster_IP+端口-------->pod_IP+端口

上面的訪問流程可以看出NodePort類型還是需要借助clusterIP才能把集群外的訪問引入到集群內(nèi)

3、何為無頭服務(wù)?

service的不同模式都是在上一種模式的基礎(chǔ)上增強版,nodePort就是在clusterIP的基礎(chǔ)上新增了功能,并不是一種新的功能模式,因為nodePort模式下客戶端訪問過程中還是要經(jīng)過clusterIP的,這意味著clusterIP是service最基本要件,但也可以把這個clusterIP移除掉,而一旦No cluster,就稱為無頭服務(wù)了,無頭服務(wù)的主要作用在于可以把服務(wù)名稱(service_name)直接解析到后端的podIP;而本來只能解析到serviceIP 

NodePort 示例:

部署nginx和tomcat這兩個前后端服務(wù)pod,通過NodePort類型service 相互調(diào)用

一、部署nginx容器

1、編寫yaml文件

root@k8s-deploy:~# vim nginx.yaml
kind: Deployment
apiVersion: apps/v1       #可查詢它的api版本 kubectl explain deployment.apiVersion
metadata:               #定義pod元數(shù)據(jù)信息,可查詢它的下級子字段kubectl explain deployment.metadata
  labels:               #定義deployment控制器標簽
    app: nginx-deployment-label  #標簽名稱以鍵值形式定義,可以定義多個,這里標簽是app值為nginx-deployment-label
  name: nginx-deployment   #deployment資源的名字
  namespace: myserver          #deployment所屬的namespace,默認是defaule
spec:                   #定義Deployment中容器的詳細信息,可通過kubectl explain deployment.spec查詢
  replicas: 1           #定義創(chuàng)建出pod的副本數(shù),默認值是1個pod
  selector:             #定義標簽選擇器,它跟上面的Deployment標簽不是一回事,它是找下面template中定義的labels標簽
    matchLabels:        #定義匹配的標簽,必須要設(shè)置
      app: nginx-selector       #匹配的目標標簽,控制器會拿這個標簽匹配下面的pod
  template:             #定義模板,用來描述需要創(chuàng)建的pod作用
    metadata:           #定義模板元數(shù)據(jù)
      labels:             #這個labels會繼承給這個yaml文件Deployment控制器創(chuàng)建的所有pod
        app: nginx-selector   #這個labels的key是app,值是nginx-selector,它會繼承給下面的pod,和上面matchLabels.app: nginx-selector一樣
    spec:                  #定義pod的詳細信息
      containers:          #定義pod中容器列表,可以定義多個pod
      - name: nginx-container     #容器名稱
        image: nginx:1.20       #容器鏡像
        imagePullPolicy: Always                       #鏡像拉取策略
        ports:                    #定義容器端口列表
        - containerPort: 80     #定義一個端口
          protocol: TCP           #定義協(xié)議
          name: http              #端口名稱
        - containerPort: 443
          protocol: TCP
          name: https
        env:                      #給容器傳遞環(huán)境變量
        - name: "password"        #變量名稱,必須引號引起來
          value: "123"            #上面變量的值
        - name: "age"
          value: "18"---
 
kind: Service
apiVersion: v1
metadata:
  name: nginx-service
  labels:
    app: nginx-service-label   #service資源的標簽
  namespace: myserver          #所在的命名空間,與上面控制器必須在同一個命名空間
spec:
  type: NodePort          #service類型是NodePort  
  ports:                  #定義訪問端口,一個service可以定義多個端口的映射關(guān)系
  - name: http            #定義協(xié)議名稱
    port: 80              #定義service端口,它可以和pod,node端口都不同,它是K8S中一個獨立子網(wǎng)
    protocol: TCP         #定義類型
    targetPort: 80        #目標pod端口,當訪問宿主機30004端口時就會轉(zhuǎn)達到pod的80端口
    nodePort: 30004       #手動指定node節(jié)點暴露的端口,如果沒有指定端口,那service會隨機分配一個端口
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
    nodePort: 30443
  selector:
    app: nginx-selector   #這個標簽就是上面pod的標簽,service通過這個標簽來匹配對應(yīng)的pod

2、創(chuàng)建資源

創(chuàng)建資源
# kubectl apply -f nginx.yaml
 
查看nginx pod已經(jīng)啟動
root@k8s-deploy:~# kubectl get pod -A | grep nginx
myserver               nginx-deployment-766fc9dfdd-f488k            1/1     Running   0               8m11s
 
查看nginx-service已經(jīng)創(chuàng)建
root@k8s-deploy:~# kubectl get svc -A | grep nginx-service
default                nginx-service               NodePort    10.100.57.113   <none>        80:30004/TCP,443:30443/TCP   2m11s

3、訪問node節(jié)點的http協(xié)議的30004端口

因為service中定義了nodePort規(guī)則,因此要訪問nginx容器的80端口,直接訪問任意node節(jié)點的30004端口即可轉(zhuǎn)發(fā)到nginx容器的80端口

二、部署tomcat服務(wù)

1、編寫yaml文件

root@k8s-deploy:~# vim tomcat.yaml
 
kind: Deployment
apiVersion: apps/v1
metadata:
  name: tomcat-deployment
  namespace: myserver
  labels:
    app: tomcat-deployment-label
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat-selector
  template:
    metadata:
      labels:
        app: tomcat-selector
    spec:
      containers:
      - name: tomcat-container
        image: tomcat:7.0.109-jdk8-openjdk
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          protocol: TCP
          name: http
        env:
        - name: "password"
          value: "123"
        - name: "age"
          value: "18"
 
---
kind: Service
apiVersion: v1
metadata:
  name: tomcat-serivce
  namespace: myserver
  labels:
    app: tomcat-service-label
spec:
  type: NodePort  #service有四種類型,默認是cluser ip
  ports:
  - name: http
    port: 80
    protocol: TCP
    nodePort: 30005
    targetPort: 8080
  selector:
    app: tomcat-selector

2、創(chuàng)建資源

root@k8s-deploy:~# kubectl apply -f tomcat.yaml

3、訪問tomcat

可以訪問下node節(jié)點的30005端口,報404是因為還沒有頁面,下面進入tomcat容器中手動創(chuàng)建一個頁面

root@k8s-deploy:~# kubectl get pod -A | grep tomcat
myserver               tomcat-deployment-5576d59694-rv2sb           1/1     Running   0             7m16s
 
進入容器
root@k8s-deploy:~# kubectl exec -it nginx-deployment-7d7bd78b5c-v9mjs bash -n myserver
root@tomcat-deployment-5576d59694-rv2sb:/usr/local/tomcat# cd webapps
root@tomcat-deployment-5576d59694-rv2sb:/usr/local/tomcat/webapps# mkdir myapp
root@tomcat-deployment-5576d59694-rv2sb:/usr/local/tomcat/webapps# echo "myapp web magedu n70" > myapp/index.jsp

而后再來訪問這個頁面就有內(nèi)容了,說明現(xiàn)在tomcat服務(wù)是正常的

三、使用nginx代理tomcat服務(wù)

這個tomcat端口其實不是必須要暴露的,測試完后,我這里再把它注釋掉,去掉之后就沒有nodeport了,就是僅在K8S內(nèi)部的一個cluser ip了 ,僅能在K8S內(nèi)部訪問,下面用nginx代理tomcat服務(wù),實現(xiàn)在K8S內(nèi)部兩個服務(wù)之間通過service相互轉(zhuǎn)發(fā)

1、注釋

2、 注釋后再執(zhí)行下apply,可以看見tomcat-deployment是不變的,tomcat-serivce配置了

 3、 查看tomcat service的名稱,下面配置nginx代理tomcat文件要用

4、修改nginx容器的配置文件

下面用nginx作為代理訪問tomcat,進入nginx容器中進行配置

root@k8s-deploy:~# kubectl get pod -A | grep nginx
myserver               nginx-deployment-766fc9dfdd-f488k            1/1     Running   0               8m11s
 
進入nginx容器
root@k8s-deploy:~# kubectl exec -it nginx-deployment-766fc9dfdd-f488k bash -n myserver
root@nginx-deployment-766fc9dfdd-f488k:/etc/nginx# vim conf.d/default.conf

 修改nginx容器的配置文件/etc/nginx/conf.d/default.conf  (這是在nginx容器里配置的,配置如下圖),添加完配置后nginx -s reload重置下再curl訪問

 全路徑訪問如下:

這里cluster.local是當時創(chuàng)建集群時候在hosts文件里定義的

可以看下當時定義的K8S集群域名

四、測試

訪問nginx的30004端口,就可以代理到tomcat服務(wù)了

可以看下nginx的日志,每當請求/myapp/index.jsp文件就由nginx通過tomcat service轉(zhuǎn)發(fā)給tomcat  service后面的pod了

root@k8s-deploy:~# kubectl logs -f nginx-deployment-766fc9dfdd-nq4ck -n myserver
10.200.166.128 - - [18/Nov/2022:07:50:45 +0000] "GET /myapp/ HTTP/1.1" 200 21 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0" "-"
10.200.166.128 - - [18/Nov/2022:07:50:53 +0000] "GET /myapp/index.jsp HTTP/1.1" 200 21 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0" "-"
10.200.166.128 - - [18/Nov/2022:07:52:09 +0000] "GET /myapp/index.jsp HTTP/1.1" 200 21 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0" "-"
10.200.166.128 - - [18/Nov/2022:07:52:10 +0000] "GET /myapp/index.jsp HTTP/1.1" 200 21 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0" "-"

注意:

上面使用curl訪問的是tomcat-service,是因為nginx和tomcat都在同一個namesapce中,所以可以之間訪問名稱簡寫

如果不在一個namespace中需要名字全稱,如果不在一個namespace就需要把nginx容器里的配置文件修改  ,其中80端口可以不寫,因為這里調(diào)用的是service,而tomcat service的端口定義的就是80

 因為在tomcat.yaml文件中定義的service 端口是80,所以在nignx配置文件中調(diào)用這個端口,這個80端口會轉(zhuǎn)給pod的8080端口

總結(jié):

客戶端訪問node節(jié)點的30004端口,而后轉(zhuǎn)發(fā)到nginx-service, 如果nginx-pod是多副本的,再由nginx-service根據(jù)算法轉(zhuǎn)發(fā)給某個nginx-pod;  然后nginx-pod把請求轉(zhuǎn)發(fā)給tomcat-service,最后再由tomcat-service根據(jù)算法轉(zhuǎn)發(fā)給tomcat-pod進行處理

總結(jié)

到此這篇關(guān)于K8S內(nèi)部pod之間相互調(diào)用案例的文章就介紹到這了,更多相關(guān)K8S內(nèi)部pod相互調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Kubernetes安裝Jenkins的思路詳解

    Kubernetes安裝Jenkins的思路詳解

    這篇文章主要介紹了Kubernetes安裝Jenkins,Jenkins插件可以在Kubernetes集群中運行動態(tài)jenkins-slave代理,基于Kubernetes的docker,自動化在Kubernetes中運行的Jenkins-slave代理的縮放,需要的朋友可以參考下
    2022-06-06
  • k8s:pod has unbound PersistentVolumeClaims問題及解決方案

    k8s:pod has unbound PersistentVolumeClaims問題及

    部署redis-ha時,Pod因PVC未綁定報錯,原因在于value.yaml中storageClassName為空,且未啟用DefaultDefaultStorageClass,解決方法是手動指定PVC的StorageClassName為現(xiàn)有存儲類,確保PV分配成功
    2025-07-07
  • ES業(yè)務(wù)數(shù)據(jù)遷移遇到的精度問題BUG

    ES業(yè)務(wù)數(shù)據(jù)遷移遇到的精度問題BUG

    這篇文章主要為大家介紹了ES業(yè)務(wù)數(shù)據(jù)遷移遇到的BUG精度問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • K8s創(chuàng)建資源的兩種方法實例

    K8s創(chuàng)建資源的兩種方法實例

    而在我看來,在學習K8S之前,有必要對K8S的資源對象有個全局的概念,下面這篇文章主要給大家介紹了關(guān)于K8s創(chuàng)建資源的兩種方法,需要的朋友可以參考下
    2022-05-05
  • K8s Service服務(wù)發(fā)布方式

    K8s Service服務(wù)發(fā)布方式

    文章介紹了Kubernetes中標簽(Label)用于資源分組,標簽選擇器(Selector)用于精準匹配;Service作為服務(wù)抽象,通過標簽選擇器關(guān)聯(lián)Pod,提供穩(wěn)定訪問入口(ClusterIP/NodePort);Endpoint記錄Pod網(wǎng)絡(luò)信息,實現(xiàn)服務(wù)發(fā)現(xiàn)與流量分發(fā)
    2025-08-08
  • k8s之yaml文件的使用及說明

    k8s之yaml文件的使用及說明

    這篇文章主要介紹了YAML文件在Kubernetes中的使用,包括YAML文件的格式、創(chuàng)建資源對象、創(chuàng)建Service服務(wù)、查看和測試Service、解釋Kubernetes中的port概念以及如何使用`kubectl`命令生成和修改YAML模板,同時,文章也簡要介紹了如何編寫和訪問MySQL的YAML文件
    2025-11-11
  • K8s Token過期問題及解決(Kubeadm)

    K8s Token過期問題及解決(Kubeadm)

    本文介紹了Kubernetes中Token的生成、管理和使用方法,包括生成默認24小時Token和永久有效Token,以及查看、刪除Token和獲取CA證書Hash值,此外,還提供了Node節(jié)點加入K8s集群的完整命令
    2026-01-01
  • K8S加入新的node節(jié)點實現(xiàn)方式

    K8S加入新的node節(jié)點實現(xiàn)方式

    文章主要介紹了基于kubeadm安裝的k8s集群加入新的節(jié)點的過程,包括初始化節(jié)點、安裝Docker和相關(guān)組件、配置鏡像下載加速器、添加軟件源、安裝組件、上傳和解壓鏡像、加入新的節(jié)點并查看節(jié)點狀態(tài)等步驟
    2026-04-04
  • Centos?8.2?升級內(nèi)核通過elrepo源的方法

    Centos?8.2?升級內(nèi)核通過elrepo源的方法

    這篇文章主要介紹了Centos?8.2?升級內(nèi)核通過elrepo源,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • k8s查看pod日志的幾種實用方法匯總

    k8s查看pod日志的幾種實用方法匯總

    Pod是Kubernetes中能夠創(chuàng)建和部署的最小單元,是Kubernetes集群中的一個應(yīng)用實例,總是部署在同一個節(jié)點Node上,下面這篇文章主要給大家介紹了k8s查看pod日志的幾種實用方法,需要的朋友可以參考下
    2022-07-07

最新評論

北碚区| 紫云| 平和县| 大洼县| 若尔盖县| 太和县| 稻城县| 乐清市| 阳山县| 昆山市| 烟台市| 邹平县| 色达县| 九寨沟县| 石嘴山市| 时尚| 道孚县| 陇川县| 沙坪坝区| 大足县| 上犹县| 廉江市| 南召县| 金乡县| 连江县| 苏尼特左旗| 金沙县| 鹰潭市| 怀仁县| 福贡县| 石城县| 久治县| 沙雅县| 郓城县| 大埔区| 广汉市| 桦川县| 营山县| 漳平市| 石河子市| 德保县|