k8s endpoint
目录
k8s endpoint
endpoint是什么
- endpoint是集群中的一个资源对象,储存在etcd中,用来记录一个service对应的pod的访问地址。
- service配置serlector,endpoint controler才会自动创建对应的endpoint对象;否则,则不会创建endpoint对象
service的serlector是什么
serlector是service里面的一个属性,对应的是app=console类似这样的标签
apiVersion: v1
kind: Service
metadata:
name: console
namespace: ${ENVIRONMENT_NAME}
spec:
type: NodePort
ports:
- name: consoleport
port: 8095
- name: debugport
port: 8088
selector:
app: console
service select
- service通过selector和pod建立关联
- k8s会根据service关联到pod的podip信息组成一个endpoint
- 若service定义中没有selector字段,service被创建时,endpoint controller不会创建endpoint。
service负载分发策略
service负载分发策略有两种:
- RoundRobin: 轮训模式,即轮序请求转发到后段的各个pod上。(默认模式)
- SessionAffinty: 基于客户端ip地址进行会话保持的模式,第一次客户端访问后段某个pod,之后的请求都会转发到这个pod上
k8s服务发现方式
DNS: 可以通过cluster add-on的方式轻松轻松的创建KubeDNS来对集群内的service进行服务发现,这也是官方强烈推荐的方式。为了让pod中的容器可以使用kube-dns来解析域名,k8s会修改容器的/etc/resolv.conf配置。
endpoint controlor
endpoint controlor是k8s集群的其中一个组件,其功能如下:
- 负责生成和维护所有的endpoint对象的控制器。
- 负责监听
从集群外部访问Service
3个Pod经由NodePort Service通过每个节点上的端口30050对外提供服务。
- 第①步,来自一个外部客户端的请求到达Node2的30050端口。
- 第②步,请求被转发至Service对象(即使Node2上压根没有运行该Service关联的Pod)。
- 第③步,与该Service对应的Endpoint对象维护了实时更新的与Label筛选器匹配的Pod列表。
- 第④步,请求被转发至Node1上的Pod1。
[10:35:43][root@tiaoban:bbb]# rancher kubectl get svc,ep -n zhengwb22082901
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/cicd-callback NodePort 10.43.208.184 <none> 8079:27709/TCP 21d
service/java-console NodePort 10.43.64.131 <none> 8095:27779/TCP 21d
service/java-ecs NodePort 10.43.95.136 <none> 8096:29796/TCP 21d
service/mysql NodePort 10.43.124.233 <none> 3306:22346/TCP 21d
service/nginx NodePort 10.43.221.38 <none> 8080:20246/TCP 21d
service/redis NodePort 10.43.247.98 <none> 6379:28649/TCP 21d
NAME ENDPOINTS AGE
endpoints/cicd-callback 10.42.1.131:8079 21d
endpoints/java-console 10.42.26.79:8095 21d
endpoints/java-ecs 10.42.8.190:8096 21d
endpoints/mysql 10.42.27.8:3306 21d
endpoints/nginx 10.42.26.137:8080 21d
endpoints/redis 10.42.33.157:6379 21d