service是一組pod的服務抽象,至關於對於pod的LB,負責將請求分發給對應的pod。service會爲這個LB提供一個IP,通常稱爲cluster IP。node
kube-proxy做用主要是負責service的實現,實現了內部從pod到service和外部node port向service的訪問。mysql
如今有podA,podB,podC和serviceAB。serviceAB是podA和podB的抽象服務service。 因此kube-proxy的做用是將pod(無論是podA,podB,podC)向serviceAB的請求轉發到service所表明的一個具體pod(podA,podB)上。sql
通常採用輪詢方式進行分配。api
同時k8s還提供了一種在node節點上暴露一個端口,供外部訪問service。spa
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端口。代理
kuber-proxy目前有userspace和iptables兩種實現方式 userspace是在用戶空間,經過kuber-proxy實現LB的代理服務,較爲穩定,但效率不高。 iptables是kube默認的方式。code