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实现的。

image

负载分发策略

对Service的访问被分发到了后端的Pod上去,目前kubernetes提供了两种负载分发策略:

  • 如果不定义,默认使用kube-proxy的策略,比如随机、轮询
  • 基于客户端地址的会话保持模式,即来自同一个客户端发起的所有请求都会转发到固定的一个Pod上,此模式可以使在spec中添加sessionAffinity:ClientIP选项

验证Endpoint

创建service和deploy


   
[root@master01 ~/ingress]# cat nginx-deploy.yaml
# service
apiVersion: v1
kind: Service
metadata:
namespace: default
name: nginx-svc-clusterip
spec:
type: ClusterIP
selector:
app: nginx
ports:
- name: clusterip-nginx
port: 80
targetPort: 80
protocol: TCP
---
# deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-nginx
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
name: pod-nginx
labels:
app: nginx
spec:
containers:
- name: container-nginx
image: nginx:1.14.1
restartPolicy: Always

查看创建成功对应的资源


   
# 查看pod
[root@master01 ~/ingress]# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
deployment-nginx-6d84458cd8-g8lkv 1/1 Running 0 35m 100.117.144.139 node01 <none> <none>
deployment-nginx-6d84458cd8-j8m6c 1/1 Running 0 35m 100.95.185.234 node02 <none> <none>
deployment-nginx-6d84458cd8-znr7t 1/1 Running 0 35m 100.117.144.140 node01 <none> <none>
# 查看svc详情,注意Endpoints列表是和pod的IP保持一致的
[root@master01 ~/ingress]# kubectl describe svc nginx-svc-clusterip
Name: nginx-svc-clusterip
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.96.1.52
IPs: 10.96.1.52
Port: clusterip-nginx 80/TCP
TargetPort: 80/TCP
Endpoints: 100.117.144.139:80,100.117.144.140:80,100.95.185.234:80
Session Affinity: None
Events: <none>
# 查看endpoints资源
[root@master01 ~/ingress]# kubectl get endpoints
NAME ENDPOINTS AGE
nginx-svc-clusterip 100.117.144.139:80,100.117.144.140:80,100.95.185.234:80 36m

当我们重启Pod之后看看Endpoints列表会发生什么

重启Pod


   
[root@master01 ~/ingress]# kubectl delete po deployment-nginx-6d84458cd8-g8lkv deployment-nginx-6d84458cd8-j8m6c deployment-nginx-6d84458cd8-znr7t
pod "deployment-nginx-6d84458cd8-g8lkv" deleted
pod "deployment-nginx-6d84458cd8-j8m6c" deleted
pod "deployment-nginx-6d84458cd8-znr7t" deleted

查看资源,发现对应的IP是会进行变化的


   
# 查看Pod
[root@master01 ~/ingress]# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
deployment-nginx-6d84458cd8-4z4cb 1/1 Running 0 7s 100.95.185.236 node02 <none> <none>
deployment-nginx-6d84458cd8-ht2z9 1/1 Running 0 7s 100.117.144.141 node01 <none> <none>
deployment-nginx-6d84458cd8-ns47j 1/1 Running 0 7s 100.95.185.238 node02 <none> <none>
# 查看service
[root@master01 ~/ingress]# kubectl describe svc nginx-svc-clusterip
Name: nginx-svc-clusterip
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.96.1.52
IPs: 10.96.1.52
Port: clusterip-nginx 80/TCP
TargetPort: 80/TCP
Endpoints: 100.117.144.141:80,100.95.185.236:80,100.95.185.238:80
Session Affinity: None
Events: <none>
#查看endpoints
[root@master01 ~/ingress]# kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 10.0.0.30:6443 78m
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的名称相同.

示例:


   
[root@master01 ~]# cat ep.yaml
# Endpoints资源
apiVersion: v1
kind: Endpoints
metadata:
name: harbor-huangxin
subsets:
- addresses:
- ip: 10.0.0.250
ports:
- port: 80
protocol: TCP
---
# Service资源
apiVersion: v1
kind: Service
metadata:
name: harbor-huangxin
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80

查看一下资源


   
# 查看service
[root@master01 ~]# kubectl describe svc endpoint-huangsir
Name: endpoint-huangsir
Namespace: default
Labels: <none>
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.96.1.127
IPs: 10.96.1.127
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.0.0.250:80
Session Affinity: None
Events: <none>
# 查看endpoint
[root@master01 ~]# kubectl get ep endpoint-huangsir
NAME ENDPOINTS AGE
endpoint-huangsir 10.0.0.250:80 51s
原创作者: huangSir-devops 转载于: https://www.cnblogs.com/huangSir-devops/p/18869685
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值