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

相關文章
相關標籤/搜索