kube-proxy实现原理

1.service概念

  service是一组pod的服务抽象,至关于一组pod的LB,负责将请求分发给对应的pod。service会为这个LB提供一个IP,通常称为cluster IP。
kube-proxy的做用主要是负责service的实现,具体来讲,就是实现了内部从pod到service和外部的从node port向service的访问。node

  举个例子,如今有podA,podB,podC和serviceAB。serviceAB是podA,podB的服务抽象(service)。
那么kube-proxy的做用就是能够将pod(无论是podA,podB或者podC)向serviceAB的请求,进行转发到service所表明的一个具体pod(podA或者podB)上。
请求的分配方法通常分配是采用轮询方法进行分配。python

2.暴露node端口与service访问

另外,kubernetes还提供了一种在node节点上暴露一个端口,从而提供从外部访问service的方式。mysql

好比咱们使用这样的一个manifest来建立servicesql

apiVersion: v1
kind: Service
metadata:
  labels:
    name: mysql
    role: service
  name: mysql-service
spec:
  ports:
    - port: 3306
      targetPort: 3306
      nodePort: 30964
  type: NodePort
  selector:
    mysql-service: "true"

含义是在node上暴露出30964端口。当访问node上的30964端口时,其请求会转发到service对应的cluster IP的3306端口,并进一步转发到pod的3306端口。后端

3.kube-proxy实现方式

kuer-proxy目前有userspace和iptables两种实现方式。api

(1) userspace是在用户空间,经过kuber-proxy实现LB的代理服务。这个是kube-proxy的最初的版本,较为稳定,可是效率也天然不过高。spa

(2) iptables的方式。是纯采用iptables来实现LB。是目前通常kube默认的方式3d

4.service 和 ep(endpoint)是如何关联和相互影响的

(1)  api-server建立service对象,与service绑定的pod地址:称之为endpoints代理

(2)  服务发现方面:kube-proxy监控service后端endpoint的动态变化,而且维护service和endpoint的映射关系server

相关文章
相关标签/搜索