一、kubeproxy random
kubeproxy支持不同的服務發現方式,其中的random模式是默認的方式。
在該模式下,kubeproxy隨機選擇一個健康的pod來作為服務代理。當有新的pod加入或是舊的pod退出時,kubeproxy會自動更新負載均衡規則。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
sessionAffinity: None // 關閉session粘連
二、kubeproxy主要功能是什麼
kubeproxy是一個獨立部署的服務,主要實現了如下的功能:
- 對外暴露kubernetes集群內的服務
- 實現服務的負載均衡
- 提供節點間的通信
三、kubeproxy原理
kubeproxy通過獲取kubernetes集群狀態來動態地維護和更新iptables規則,來實現服務的負載均衡和代理。他可以根據監聽的service埠和容器埠來創建對應的iptables規則。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j KUBE-SERVICES
iptables -t nat -A KUBE-SERVICES -d 10.0.0.10/32 -p tcp -m comment --comment "my-service: http" -j KUBE-MARK-MASQ
iptables -t nat -A KUBE-SERVICES -d 10.0.0.10/32 -p tcp -m comment --comment "my-service: http" -j KUBE-SVC-MYAPP
四、kubeproxy替代方案
替代kubeproxy的主要方案是採用Service Mesh的解決方案,如Istio。Service Mesh主要是通過sidecar代理來實現服務的負載均衡和流量控制,對於服務的細粒度控制更加易於管理。
五、kubeproxy運行機制分析
kubeproxy的運行機制如下:
- kubeproxy從apiserver獲取到pods、services、nodes等kubernetes集群的信息
- kubeproxy通過監控objects的變化來動態更新iptables規則,同時監聽apiserver的變化
- kubeproxy通過替換IP的方式實現容器之間的通信
//獲取集群信息
curl -s -H "Authorization: Bearer ${TOKEN}" https://$APISERVER/api/v1/nodes | jq .
//動態更新iptables規則
iptables -t nat -A KUBE-SERVICES -d 10.0.0.10/32 -p tcp --dport 80 -j KUBE-MARK-MASQ
iptables -t nat -A KUBE-SERVICES -d 10.0.0.10/32 -p tcp --dport 80 -m comment --comment "my-service: http" -j KUBE-SVC-MYAPP
六、kubeproxy工作模式概述
kubeproxy的工作模式主要有如下幾種:
- User-Space代理模式: kubeproxy在linux用戶空間中運行,監聽service的事件,實現負載均衡和代理
- Iptable代理模式: kubeproxy以iptables規則的形式實現負載均衡和代理
- IPVS代理模式: kubeproxy以IPVS規則的形式實現負載均衡和代理
//User-Space模式
iptables -t nat -L KUBE-SERVICES
//IPtable模式
ipvsadm -Ln
//IPVS模式
ipvsadm -ln
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/285939.html