溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何體驗Service所提供的功能

發(fā)布時間:2021-11-24 16:32:20 來源:億速云 閱讀:143 作者:柒染 欄目:云計算

這篇文章給大家介紹如何體驗Service所提供的功能,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)建

創(chuàng)建Service對象時,Kubernetes會根據(jù)spec.selector來查找擁有指定標簽的Pod,查找到Pod就維護一組拓撲關系,如果查找不到也不會自動創(chuàng)建Pod(配置中沒有Pod模版),所以本例中用到的Pod對象需要單獨創(chuàng)建,在開始之前,假定我們已使用前面介紹Deployment時使用的配置創(chuàng)建了一組label為app: nginxPod對象,這些Pod通過端口80對外提供服務。

首先,我們將以下配置保存到名為service.yaml的文件中:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

然后,創(chuàng)建Service對象:

[root@ecs-d8b6 manifests]# kubectl create -f service.yaml 
service/nginx-service created

查看

接著查看剛剛創(chuàng)建的Service對象:

[root@ecs-d8b6 manifests]# kubectl get services nginx-service -o wide
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR
nginx-service   ClusterIP   10.0.0.83    <none>        80/TCP    56s   app=nginx

命令行輸出中各字段含義如下:

  • NAME:Service對象名稱,對應配置中的metadata.name;

  • TYPE:Service類型,默認為ClusterIP類型,更多的類型將在后面的章節(jié)中介紹;

  • CLUSTER-IP:自動分配的Cluster IP;

  • EXTERNAL-IP:外部IP地址,用于接收集群外部流量的地址,在后面介紹Service類型時詳細介紹;

  • PORT(S):Service對外暴露的端口列表,本例中只對外暴露一個端口,對應配置中的spec.ports;

  • AGE:創(chuàng)建至今經(jīng)歷的時間;

  • SELECTOR:標簽選擇器,Service根據(jù)此選擇器查看后端Pod,對應配置中的spec.selector

當前Kubernetes支持多種Service類型,來應對不同的使用場景:

  • ClusterIP:Service通過一個只能在集群內部訪問的 Cluster IP來暴露服務;

  • NodePort:Service通過Node上的某個端口來暴露服務;

  • LoadBalancer:Service通過具體云廠商提供的負載均衡器來暴露服務;

  • ExternalName:Service僅對外暴露一個域名;

查看Pod 拓撲

盡管Service會通過selector來查找Pod,但查找到的Pod信息并不直接記錄到Service對象中,而是記錄到一個Endpoints對象中,進一步說當創(chuàng)建Service對象時,Kubernetes還會創(chuàng)建一個同名的Endpoints對象,來記錄后端的Pod拓撲。 關于Endpoints,我們會在后續(xù)的章節(jié)中詳細介紹,此處僅做初步介紹。

查看隨Service一并創(chuàng)建的Endpoints對象:

[root@ecs-d8b6 manifests]# kubectl get endpoints nginx-service 
NAME            ENDPOINTS                                   AGE
nginx-service   172.17.0.4:80,172.17.0.5:80,172.17.0.6:80   20m

可以看到,該Endpoints對象記錄了Service匹配到的所有Pod地址。

訪問Service

在集群內部,可以直接訪問ServiceCluster IP,流量將會被自動轉發(fā)到后端的某個Pod中:

[root@ecs-d8b6 manifests]# curl 10.0.0.83
<!DOCTYPE html>
<html>
<head>
...
</head>
<body>
<h2>Welcome to nginx!</h2>
...
</body>
</html>

更新

當更新Servicespec.selector時,Kubernetes會自動按照新的spec.selector配置查找Pod,并更新Endpoints對象。

使用kubectl edit service nginx-service命令來修改Service,并指定一個無法匹配到任何Podspec.selector,可以看到 Endpoints對象中的Pod拓撲信息也會相應地消失掉,如下所示:

[root@ecs-d8b6 manifests]# kubectl get endpoints nginx-service 
NAME            ENDPOINTS   AGE
nginx-service   <none>      31m

刪除

當刪除Service對象時,隨Service對象創(chuàng)建而自動創(chuàng)建的Endpoints對象也會一并刪除,后端的Pod不會被刪除,它仍然受相應的Pod控制器管理。

[root@ecs-d8b6 manifests]# kubectl delete service nginx-service 
service "nginx-service" deleted
[root@ecs-d8b6 manifests]# kubectl get endpoints nginx-service
Error from server (NotFound): endpoints "nginx-service" not found
[root@ecs-d8b6 manifests]# kubectl get pods 
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-5f67bd6bb-9nspj   1/1     Running   0          37m
nginx-deployment-5f67bd6bb-hl8xw   1/1     Running   0          37m
nginx-deployment-5f67bd6bb-pkv7h   1/1     Running   0          37m

關于如何體驗Service所提供的功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI