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

k8s服務(wù)發(fā)現(xiàn)之第五彈--使用 Service 連接到應(yīng)用

這篇具有很好參考價(jià)值的文章主要介紹了k8s服務(wù)發(fā)現(xiàn)之第五彈--使用 Service 連接到應(yīng)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Kubernetes 的網(wǎng)絡(luò)模型

通過(guò)前面教程的學(xué)習(xí),我們已經(jīng)可以將容器化的應(yīng)用程序在 Kubernetes 中運(yùn)行起來(lái),并且發(fā)布到 Kubernetes 內(nèi)/外的網(wǎng)絡(luò)上。

通常,Docker 使用一種 host-private 的聯(lián)網(wǎng)方式,在此情況下,只有兩個(gè)容器都在同一個(gè)節(jié)點(diǎn)(主機(jī))上時(shí),一個(gè)容器才可以通過(guò)網(wǎng)絡(luò)連接另一個(gè)容器。為了使 Docker 容器可以跨節(jié)點(diǎn)通信,必須在宿主節(jié)點(diǎn)(主機(jī))的 IP 地址上分配端口,并將該端口接收到的網(wǎng)絡(luò)請(qǐng)求轉(zhuǎn)發(fā)(或代理)到容器中。這意味著,用戶必須非常小心地為容器分配宿主節(jié)點(diǎn)(主機(jī))的端口號(hào),或者端口號(hào)可以自動(dòng)分配。

在一個(gè)集群中,多個(gè)開(kāi)發(fā)者之間協(xié)調(diào)分配端口號(hào)是非常困難的。Kubernetes 認(rèn)為集群中的兩個(gè) Pod 應(yīng)該能夠互相通信,無(wú)論他們各自在哪個(gè)節(jié)點(diǎn)上。每一個(gè) Pod 都被分配自己的 “cluster-private-IP”,因此,您無(wú)需在 Pod 間建立連接,或者將容器的端口映射到宿主機(jī)的端口。因此:

  • Pod 中的任意容器可以使用 localhost 直連同 Pod 中另一個(gè)容器的端口
  • 集群中的任意 Pod 可以使用另一的 Pod 的 cluster-private-IP 直連對(duì)方的端口,(無(wú)需 NAT 映射)

在集群中部署nginx

創(chuàng)建文件 run-my-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
  • 部署 Pod
kubectl apply -f ./run-my-nginx.yaml
  • 檢查運(yùn)行情況:
kubectl get pods -l run=my-nginx -o wide

輸出結(jié)果:

NAME                        READY     STATUS    RESTARTS   AGE       IP            NODE
my-nginx-3800858182-jr4a2   1/1       Running   0          13s       10.244.3.4    kubernetes-minion-905m
my-nginx-3800858182-kna2y   1/1       Running   0          13s       10.244.2.5    kubernetes-minion-ljyd
  • 執(zhí)行命令 kubectl get pods -l run=my-nginx -o yaml | grep podIP, 檢查 Pod 的 IP 地址,輸出結(jié)果如下:
cni.projectcalico.org/podIP: 10.244.84.185/32
      cni.projectcalico.org/podIPs: 10.244.84.185/32
    podIP: 10.244.84.185
    podIPs:
      cni.projectcalico.org/podIP: 10.244.14.61/32
      cni.projectcalico.org/podIPs: 10.244.14.61/32
    podIP: 10.244.14.61
    podIPs:

在集群中的任意節(jié)點(diǎn)上,您可以執(zhí)行curl 10.244.84.185curl 10.244.14.61 獲得 nginx 的響應(yīng)。

  • 容器并沒(méi)有使用節(jié)點(diǎn)上的 80 端口
  • 沒(méi)有使用 NAT 規(guī)則對(duì)容器端口進(jìn)行映射

這意味著,您可以

  • 在同一節(jié)點(diǎn)上使用 80 端口運(yùn)行多個(gè) nginx Pod
  • 在集群的任意節(jié)點(diǎn)/Pod 上使用 nginx Pod 的 clusterIP 訪問(wèn) nginx 的 80 端口

同 Docker 一樣,Kubernets 中,仍然可以將 Pod 的端口映射到宿主節(jié)點(diǎn)的網(wǎng)絡(luò)地址上(使用 nodePort),但是使用 Kubernetes 的網(wǎng)絡(luò)模型時(shí),這類需求已經(jīng)大大減少了。

創(chuàng)建 Service

上面的步驟中,我們已經(jīng)創(chuàng)建了 nginx Pod,運(yùn)行在集群的 IP 地址空間。您可以直接通過(guò) Pod 的地址訪問(wèn)其端口,但是如果某一個(gè) Pod 終止了該怎么辦?Pod 因?yàn)楣收匣蚱渌蚪K止后,Deployment Controller 將創(chuàng)建一個(gè)新的 Pod 以替代該 Pod,但是 IP 地址將發(fā)生變化。Kubernetes Service 解決了這樣的問(wèn)題。

Kubernetes Service:

  • 定義了集群中一組 Pod 的邏輯集合,該集合中的 Pod 提供了相同的功能
  • 被創(chuàng)建后,獲得一個(gè)唯一的 IP 地址(ClusterIP)。直到該 Service 被刪除,此地址不會(huì)發(fā)生改變
  • Pod 可以直接連接 Service IP 地址上的端口,且發(fā)送到該 IP 地址的網(wǎng)絡(luò)請(qǐng)求被自動(dòng)負(fù)載均衡分發(fā)到 Service 所選取的 Pod 集合中

執(zhí)行命令 kubectl expose deployment/my-nginx 可以為上面的兩個(gè) nginx Pod 創(chuàng)建 Service,輸出結(jié)果如下所示:

service/my-nginx exposed

該命令等價(jià)于 kubectl apply -f nginx-svc.yaml,其中 nginx-svc.yaml 文件的內(nèi)容如下所示:

apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    run: my-nginx

該 yaml 文件將創(chuàng)建一個(gè) Service:

  • 該 Service 通過(guò) label selector 選取包含 run: my-nginx 標(biāo)簽的 Pod 作為后端 Pod
  • 該 Service 暴露一個(gè)端口 80(spec.ports[*].port
  • 該 Service 將 80 端口上接收到的網(wǎng)絡(luò)請(qǐng)求轉(zhuǎn)發(fā)到后端 Pod 的 80 (spec.ports[*].targetPort)端口上,支持負(fù)載均衡

執(zhí)行命令 kubectl get svc my-nginx,輸出結(jié)果如下

NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
my-nginx   ClusterIP   10.100.223.157   <none>        80/TCP    75s

Service 的后端 Pod 實(shí)際上通過(guò) Endpoints 來(lái)暴露。Kubernetes 會(huì)持續(xù)檢查 Service 的 label selector spec.selector,并將符合條件的 Pod 更新到與 Service 同名(my-nginx)的 Endpoints 對(duì)象。如果 Pod 終止了,該 Pod 將被自動(dòng)從 Endpoints 中移除,新建的 Pod 將自動(dòng)被添加到該 Endpoint。

執(zhí)行命令 kubectl describe svc my-nginx,輸出結(jié)果如下,請(qǐng)注意 Endpoints 中的 IP 地址與上面獲得的 Pod 地址相同:

Name:              my-nginx
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          run=my-nginx
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.100.223.157
IPs:               10.100.223.157
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.14.61:80,10.244.84.185:80
Session Affinity:  None
Events:            <none>

執(zhí)行命令 kubectl get ep my-nginx,輸出結(jié)果

NAME       ENDPOINTS                          AGE
my-nginx   10.244.14.61:80,10.244.84.185:80   8m37s

此時(shí),您可以在集群的任意節(jié)點(diǎn)上執(zhí)行curl 10.100.223.157:80,通過(guò) Service 的 ClusterIP:Port 訪問(wèn) nginx。

訪問(wèn) Service

Kubernetes 支持兩種方式發(fā)現(xiàn)服務(wù):

  • 環(huán)境變量
  • DNS 參考

環(huán)境變量

針對(duì)每一個(gè)有效的 Service,kubelet 在創(chuàng)建 Pod 時(shí),向 Pod 添加一組環(huán)境變量。這種做法引發(fā)了一個(gè) Pod 和 Service 的順序問(wèn)題。例如,

  • 執(zhí)行命令 kubectl exec my-nginx-df7bbf6f5-87hqg -- printenv | grep SERVICE (您的 Pod 名字可能不一樣),輸出結(jié)果如下
KUARD_SERVICE_PORT=80
KUBERNETES_SERVICE_PORT_HTTPS=443
KUARD_SERVICE_HOST=10.110.143.73
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443

DNS

Kubernetes 提供了一個(gè) DNS cluster addon,可自動(dòng)為 Service 分配 DNS name。

查看該 addon 在您的集群上是否可用

kubectl get services kube-dns --namespace=kube-system

輸出結(jié)果:

NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   140d

可以從集群中任何 Pod 中按 Service 的名稱訪問(wèn)該 Service。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-608098.html

  • 執(zhí)行命令 kubectl run curl --image=radial/busyboxplus:curl -i --tty 獲得 busyboxplus 容器的命令行終端,該命令輸出結(jié)果
If you don't see a command prompt, try pressing enter.
[ root@curl:/ ]$
  • 然后,單擊回車鍵,并執(zhí)行命令 nslookup my-nginx,輸出結(jié)果如下所示:
[ root@curl:/ ]$  nslookup my-nginx
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      my-nginx
Address 1: 10.100.223.157 my-nginx.default.svc.cluster.local
  • 執(zhí)行命令 curl my-nginx:80,可獲得 Nginx 的響應(yīng)。
[ root@curl:/ ]$ curl my-nginx:80
<!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 >nginx.org</a>.<br/>
Commercial support is available at
<a >nginx.com</a>.</p>

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

  • 執(zhí)行命令 exit 可推出該容器的命令行
  • 執(zhí)行命令 kubectl delete deployment curl 可刪除剛才創(chuàng)建的 curl 測(cè)試容器

到了這里,關(guān)于k8s服務(wù)發(fā)現(xiàn)之第五彈--使用 Service 連接到應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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)文章

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

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

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

    2024年02月14日
    瀏覽(20)
  • 持續(xù)集成部署-k8s-服務(wù)發(fā)現(xiàn)-Service

    在K8s中, Service 是一種可以暴露一個(gè)或多個(gè) Pod 的穩(wěn)定的網(wǎng)絡(luò)終點(diǎn),從而形成邏輯上的應(yīng)用服務(wù)單元,為服務(wù)發(fā)現(xiàn)、負(fù)載均衡、容錯(cuò)等提供了基礎(chǔ)設(shè)施支持。 Service 的主要作用包括以下幾個(gè)方面: 1. 實(shí)現(xiàn)內(nèi)部服務(wù)發(fā)現(xiàn) :在K8s中,往往會(huì)有多個(gè) Pod 運(yùn)行同一種應(yīng)用服務(wù), Servi

    2024年02月08日
    瀏覽(20)
  • k8s-服務(wù)發(fā)現(xiàn)service和ingress

    k8s-服務(wù)發(fā)現(xiàn)service和ingress

    回到目錄 service用于集群內(nèi)部應(yīng)用的網(wǎng)絡(luò)調(diào)用,處理東西流量 ingress用于集群外部用戶訪問(wèn)內(nèi)部服務(wù),處理南北流量 kubernetes集群中有三層網(wǎng)絡(luò),一類是真實(shí)存在的,例如Node Network、Pod Network,提供真實(shí)IP地址;一類是虛擬的,例如Cluster Network或Service Network,提供虛擬IP地址,不會(huì)

    2024年02月14日
    瀏覽(19)
  • Kubernetes(k8s)服務(wù)service:service的發(fā)現(xiàn)和service的發(fā)布

    目錄 一.系統(tǒng)環(huán)境 二.前言 三.Kubernetes service簡(jiǎn)介 四.使用hostPort向外界暴露應(yīng)用程序 4.1 創(chuàng)建deploy 4.2 使用hostPort向外界暴露pod的端口 五.使用service服務(wù)向外界暴露應(yīng)用程序 5.1 使用service服務(wù)向外界暴露pod 5.1.1 創(chuàng)建service服務(wù) 5.1.2 測(cè)試svc的負(fù)載均衡 六.service服務(wù)的發(fā)現(xiàn) 6.1 使用

    2024年02月08日
    瀏覽(21)
  • 【云原生】k8s Service 實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡

    【云原生】k8s Service 實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡

    在容器編排系統(tǒng)中,如 Kubernetes,Pod 是最小的部署單元。而一組 Pod 通常對(duì)外提供某種服務(wù)。在 Kubernetes 中,Service 就是用來(lái)對(duì)外暴露一組 Pod 的服務(wù)的資源對(duì)象。Service 可以通過(guò) IP 地址和端口號(hào)訪問(wèn),從而對(duì)外提供服務(wù)。 Service 是 Kubernetes 中一個(gè)非常重要的概念,它可以將一

    2023年04月16日
    瀏覽(18)
  • k8s控制器之DaemonSet--第五彈更新 DaemonSet

    DaemonSet 有兩種更新策略: OnDelete : 使用 OnDelete 更新策略時(shí),在更新 DaemonSet 模板后,只有當(dāng)你手動(dòng)刪除老的 DaemonSet pods 之后,新的 DaemonSet Pod 才會(huì) 被自動(dòng)創(chuàng)建。跟 Kubernetes 1.6 以前的版本類似。 RollingUpdate : 這是默認(rèn)的更新策略。使用 RollingUpdate 更新策略時(shí),在更新 DaemonSe

    2024年02月11日
    瀏覽(25)
  • k8s控制器之job--第五彈Job的自動(dòng)清理

    系統(tǒng)中已經(jīng)完成的 Job 通常是不在需要里的,長(zhǎng)期在系統(tǒng)中保留這些對(duì)象,將給 apiserver 帶來(lái)很大的壓力。如果通過(guò)更高級(jí)別的控制器(例如 CronJobs)來(lái)管理 Job,則 CronJob 可以根據(jù)其中定義的基于容量的清理策略(capacity-based cleanup policy)自動(dòng)清理Job。 除了 CronJob 之外,TTL 機(jī)

    2024年02月11日
    瀏覽(23)
  • 持續(xù)集成部署-k8s-服務(wù)發(fā)現(xiàn)-Service:Service、Endpoint、Pod之間的關(guān)系與原理

    在 Kubernetes 中, Service 是一種抽象的邏輯概念,用于將一組具有相同功能的 Pod 組合成一個(gè)邏輯服務(wù)。 Service 提供了一種穩(wěn)定的 IP 地址和 DNS 域名,供客戶端訪問(wèn)這個(gè)邏輯服務(wù)。同時(shí), Service 還提供了負(fù)載均衡、會(huì)話保持等功能,可以很方便地實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)與調(diào)用。 在 Kuber

    2024年02月06日
    瀏覽(35)
  • k8s服務(wù)發(fā)現(xiàn)(service discovery)常用的兩種方式Nodeport和ClusterIP

    k8s服務(wù)發(fā)現(xiàn)(service discovery)常用的兩種方式Nodeport和ClusterIP

    NodePort: 主要特點(diǎn): 為Service在每個(gè)節(jié)點(diǎn)上分配一個(gè)固定的端口(NodePort),允許外部流量通過(guò)節(jié)點(diǎn)的IP地址和NodePort訪問(wèn)Service。 NodePort將流量從集群外部引入到Service內(nèi)部。 Service類型為NodePort時(shí),還會(huì)創(chuàng)建一個(gè)ClusterIP,但它只是一個(gè)內(nèi)部的ClusterIP,通常不會(huì)直接使用。 使用場(chǎng)

    2024年02月05日
    瀏覽(26)
  • 阿里云使用SLB實(shí)現(xiàn)k8s的服務(wù)service

    阿里云使用SLB實(shí)現(xiàn)k8s的服務(wù)service

    k8s容器的服務(wù)service實(shí)現(xiàn)有以下常用方式: NodePort 用于為集群外部訪問(wèn)Service后面Pod提供訪問(wèn)接入端口。 開(kāi)發(fā)測(cè)試環(huán)境,可以使用這種方式,不依賴其他中間件。 好處是,可以訪問(wèn)Node節(jié)點(diǎn)的IP+${NodePort} 比如Node節(jié)點(diǎn)的IP地址是192.168.80.180,NodePort的端口是31767。那么外部訪問(wèn)地址

    2024年01月16日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包