qidao123.com技术社区-IT企服评测·应用市场

标题: K8s新手系列之Endponit [打印本页]

作者: 祗疼妳一个    时间: 2025-5-10 20:17
标题: K8s新手系列之Endponit
概述

官方文档:https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/endpoints-v1/
Endpoint简称ep
Endpoint是kubernetes中的一个资源对象,存储在etcd中,用来记载一个service对应的所有pod的访问地址,它是根据service配置文件中selector描述产生的。
一个Service由一组Pod组成,这些Pod通过Endpoints袒露出来,Endpoints是实现现实服务的端点集合。换句话说,service和pod之间的联系是通过endpoints实现的。

负载分发策略

对Service的访问被分发到了后端的Pod上去,现在kubernetes提供了两种负载分发策略:
验证Endpoint

创建service和deploy
  1. [root@master01 ~/ingress]# cat nginx-deploy.yaml
  2. # service
  3. apiVersion: v1
  4. kind: Service
  5. metadata:
  6.   namespace: default
  7.   name: nginx-svc-clusterip
  8. spec:
  9.   type: ClusterIP
  10.   selector:
  11.     app: nginx
  12.   ports:
  13.   - name: clusterip-nginx
  14.     port: 80
  15.     targetPort: 80
  16.     protocol: TCP
  17. ---
  18. # deploy
  19. apiVersion: apps/v1
  20. kind: Deployment
  21. metadata:
  22.   name: deployment-nginx
  23.   namespace: default
  24. spec:
  25.   replicas: 3
  26.   selector:
  27.     matchLabels:
  28.       app: nginx
  29.   template:
  30.     metadata:
  31.       name: pod-nginx
  32.       labels:
  33.         app: nginx
  34.     spec:
  35.       containers:
  36.       - name: container-nginx
  37.         image: nginx:1.14.1
  38.       restartPolicy: Always
复制代码
查看创建成功对应的资源
  1. # 查看pod
  2. [root@master01 ~/ingress]# kubectl get po -o wide
  3. NAME                                READY   STATUS             RESTARTS         AGE    IP                NODE     NOMINATED NODE   READINESS GATES
  4. deployment-nginx-6d84458cd8-g8lkv   1/1     Running            0                35m    100.117.144.139   node01   <none>           <none>
  5. deployment-nginx-6d84458cd8-j8m6c   1/1     Running            0                35m    100.95.185.234    node02   <none>           <none>
  6. deployment-nginx-6d84458cd8-znr7t   1/1     Running            0                35m    100.117.144.140   node01   <none>           <none>
  7. # 查看svc详情,注意Endpoints列表是和pod的IP保持一致的
  8. [root@master01 ~/ingress]# kubectl describe svc nginx-svc-clusterip
  9. Name:              nginx-svc-clusterip
  10. Namespace:         default
  11. Labels:            <none>
  12. Annotations:       <none>
  13. Selector:          app=nginx
  14. Type:              ClusterIP
  15. IP Family Policy:  SingleStack
  16. IP Families:       IPv4
  17. IP:                10.96.1.52
  18. IPs:               10.96.1.52
  19. Port:              clusterip-nginx  80/TCP
  20. TargetPort:        80/TCP
  21. Endpoints:         100.117.144.139:80,100.117.144.140:80,100.95.185.234:80
  22. Session Affinity:  None
  23. Events:            <none>
  24. # 查看endpoints资源
  25. [root@master01 ~/ingress]# kubectl get endpoints
  26. NAME                  ENDPOINTS                                                 AGE
  27. nginx-svc-clusterip   100.117.144.139:80,100.117.144.140:80,100.95.185.234:80   36m
复制代码
当我们重启Pod之后看看Endpoints列表会发生什么

重启Pod
  1. [root@master01 ~/ingress]# kubectl delete po deployment-nginx-6d84458cd8-g8lkv deployment-nginx-6d84458cd8-j8m6c deployment-nginx-6d84458cd8-znr7t
  2. pod "deployment-nginx-6d84458cd8-g8lkv" deleted
  3. pod "deployment-nginx-6d84458cd8-j8m6c" deleted
  4. pod "deployment-nginx-6d84458cd8-znr7t" deleted
复制代码
查看资源,发现对应的IP是会进行变化的
  1. # 查看Pod
  2. [root@master01 ~/ingress]# kubectl get po -o wide
  3. NAME                                READY   STATUS             RESTARTS         AGE    IP                NODE     NOMINATED NODE   READINESS GATES
  4. deployment-nginx-6d84458cd8-4z4cb   1/1     Running            0                7s     100.95.185.236    node02   <none>           <none>
  5. deployment-nginx-6d84458cd8-ht2z9   1/1     Running            0                7s     100.117.144.141   node01   <none>           <none>
  6. deployment-nginx-6d84458cd8-ns47j   1/1     Running            0                7s     100.95.185.238    node02   <none>           <none>
  7. # 查看service
  8. [root@master01 ~/ingress]# kubectl describe svc nginx-svc-clusterip
  9. Name:              nginx-svc-clusterip
  10. Namespace:         default
  11. Labels:            <none>
  12. Annotations:       <none>
  13. Selector:          app=nginx
  14. Type:              ClusterIP
  15. IP Family Policy:  SingleStack
  16. IP Families:       IPv4
  17. IP:                10.96.1.52
  18. IPs:               10.96.1.52
  19. Port:              clusterip-nginx  80/TCP
  20. TargetPort:        80/TCP
  21. Endpoints:         100.117.144.141:80,100.95.185.236:80,100.95.185.238:80
  22. Session Affinity:  None
  23. Events:            <none>
  24. #查看endpoints
  25. [root@master01 ~/ingress]# kubectl get endpoints
  26. NAME                  ENDPOINTS                                                AGE
  27. kubernetes            10.0.0.30:6443                                           78m
  28. nginx-svc-clusterip   100.117.144.141:80,100.95.185.236:80,100.95.185.238:80   39m
复制代码
编写一个属于自己Endpoints

Endpoints资源是通过name和namespace两个字段与Service进行关联的,所以Endpoints的名称和Service的名称相同.
示例:
  1. [root@master01 ~]# cat ep.yaml
  2. # Endpoints资源
  3. apiVersion: v1
  4. kind: Endpoints
  5. metadata:
  6.     name: harbor-huangxin
  7. subsets:
  8.     - addresses:
  9.       - ip: 10.0.0.250
  10.       ports:
  11.       - port: 80
  12.         protocol: TCP
  13. ---
  14. # Service资源
  15. apiVersion: v1
  16. kind: Service
  17. metadata:
  18.     name: harbor-huangxin
  19. spec:
  20.     type: ClusterIP
  21.     ports:
  22.         - port: 80
  23.           targetPort: 80
复制代码
查看一下资源
  1. # 查看service
  2. [root@master01 ~]# kubectl describe svc endpoint-huangsir
  3. Name:              endpoint-huangsir
  4. Namespace:         default
  5. Labels:            <none>
  6. Annotations:       <none>
  7. Selector:          <none>
  8. Type:              ClusterIP
  9. IP Family Policy:  SingleStack
  10. IP Families:       IPv4
  11. IP:                10.96.1.127
  12. IPs:               10.96.1.127
  13. Port:              <unset>  80/TCP
  14. TargetPort:        80/TCP
  15. Endpoints:         10.0.0.250:80
  16. Session Affinity:  None
  17. Events:            <none>
  18. # 查看endpoint
  19. [root@master01 ~]# kubectl get ep endpoint-huangsir
  20. NAME              ENDPOINTS       AGE
  21. endpoint-huangsir   10.0.0.250:80   51s
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4