kubernets kube-proxy原理分析
kube-proxy
service是一組pod的服務抽象,相當于一組pod的LB,負責將請求分發給對應的pod。service會為這個LB提供一個IP,一般稱為cluster IP。
kube-proxy的作用主要是負責service的實現,具體來說,就是實現了內部從pod到service和外部的從node port向service的訪問
cat?nginx.yaml????部署該deploment? apiVersion:?extensions/v1beta1 kind:?Deployment metadata:name:?apigw-test1 spec:replicas:?2template:metadata:labels:app:?test1spec:#hostNetwork:?truecontainers:-?name:?apigw1p_w_picpath:?apigw:696p_w_picpathPullPolicy:?IfNotPresentports:-?containerPort:?80resources:requests:cpu:?2memory:?2Gilimits:cpu:?2memory:?2Gi創建service
cat?nginx-svc.yaml? apiVersion:?v1 kind:?Service metadata:name:?apigw-test1labels:app:?test1 spec:type:?NodePortselector:app:?test1ports:-?port:?6666targetPort:?80nodePort:?30066kubectl?create?-f?nginx-svc.yaml前面創建了nginx的部署對象,那么別人如何使用nginx這個服務呢?首先要確定的是,這個nginx服務,是給內部使用的,還是外部。如果是內部使用,那就可以不用設置服務的類型(默認為ClusterIP),
否則,可以將服務類型設置為NodePort,通過node的端口暴露出來給外部使用;或者是LoadBalancer,由云服務商提供一個負載均衡直接掛在服務上。
這里我們使用NodePort,暴露出30066端口給外部使用。如果不指定nodePort,那么kubernetes會隨機生成一個
這里我們用1個service+2個pod來舉例說明
port和nodePort都是service的端口,前者暴露給集群內客戶訪問服務,后者暴露給集群外客戶訪問服務。從這兩個端口到來的數據都需要經過反向代理kube-proxy流入后端pod的targetPod,從而到達pod上的容器內。
apigw-test1-2790435668-xkt56 ?ip:192.168.64.130/32
apigw-test1-2790435668-r69sr ?ip: ?192.168.83.197/32
整體流程圖如下
-A KUBE-SVC-NPX46M4PTMTKRN6Y -m comment --comment "default/kubernetes:https" -m recent --rcheck --seconds 10800 --reap --name KUBE-SEP-FOCF455PUHPZHEKG --mask 255.255.255.255 --rsource -j KUBE-SEP-FOCF455PUHPZHEKG
?
實現了會話保持
?
-A KUBE-SEP-FOCF455PUHPZHEKG -p tcp -m comment --comment "default/kubernetes:https" -m recent --set --name KUBE-SEP-FOCF455PUHPZHEKG --mask 255.255.255.255 --rsource -m tcp -j DNAT --to-destination 172.16.18.124:6443
關鍵點解釋:
KUBE-NODEPORTS ? 鏈跳轉到如下兩條鏈
1、KUBE-MARK-MASQ ?--set-xmark 0x4000/0x4000 ?SANT
該鏈的作用主要是做數據標記,以及后續對這些標記的數據做SNAT
2、KUBE-SVC-4FIAYNHBEFBB6ATU ?會跳轉到如下兩條鏈
2、1 ?KUBE-SEP-ZMVIR553ITG5JAPJ ?(-m statistic --mode random --probability 0.50000000000)
該鏈主要兩個做個 一個SANT ?一個DNAT,請參考上圖說明
2、2 ?KUBE-SEP-S6UNEDQPTOJETSJC ?作用等同于2、1
?服務配置了session affinity,則會產生如下的規則 ?
-m recent --rcheck --seconds 10800 --reap 實現了會話保持
來自于default/kubernetes:https這個服務,流經KUBE-SVC-NPX46M4PTMTKRN6Y這個鏈的數據包會跳轉到自定義鏈KUBE-SEP-FOCF455PUHPZHEKG,且會在一段時間內保持session affinity,保持時間是10800秒
轉載于:https://blog.51cto.com/huaxin/1902725
總結
以上是生活随笔為你收集整理的kubernets kube-proxy原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 继承
- 下一篇: Eureka-zookeeper的服务发