kubernetes網絡模型分析

以kubernetes的helloworld爲例,分析kubernetes的網絡模型php

kubernetes版本:1.3.7node

 

拓撲:docker

kube-apiserverapi

192.168.1.200網絡

 

node1負載均衡

192.168.1.202 frontend

docker0:  10.0.1.1/24dom

 

node2ide

192.168.1.203spa

docker0: 10.1.2.1/24

 

不一樣node上的容器之間的鏈路,已用quagga打通

 

helloworld

wKiom1h7j6eSnFZCAAHAwzoq9Pg964.png

 

wKiom1h7j8LyXVuOAAI-z_C53Eo234.png

 

 

kubernetes網絡模型的簡單描述:

1. pod之間經過service進行相互訪問

①service的ip地址爲與之關聯的全部pod的公共虛擬ip

②全部pod能夠經過訪問service的ip地址,自動調度到service關聯的任意一個pod上

 

2. 外部client訪問pod

①經過配置service的nodePort在全部node上映射一個指定端口

②外部client能夠經過訪問任意一個node的指定端口,自動調度到service關聯的任意一個pod上

 

以上的兩大功能是由kube-proxy修改iptables的nat表的規則來實現的

 

 

查看iptables信息:

iptables -t nat -L -n   

//查看每一個node節點的nat表的信息,kube-proxy根據從kube-apiserver上獲取的service以及pod信息,修改nat表的規則。所以每一個node節點上看到的nat表的信息相同

 

wKioL1h7j-HQFwR_AAI6k4ETjjA500.png

 

查找30001端口相關規則

wKiom1h7j_ugU9O1AADg12BS20Y904.png

 

查找frontend的serviceip的相關規則(10.254.73.7)

wKioL1h7kBazXFznAAEwLRsQsEc135.png

結論:

不管是外部客戶端經過noded節點的30001訪問php-frontend仍是pod經過service的虛擬ip訪問php-frontend,最終都會被轉移到相同的自定義鏈上。

 

查看這個自定義鏈

wKiom1h7kC7jIR5RAACVcJtIRMY525.png

 

wKiom1h7kEXxBpC_AADrSuVXfnc387.png

 

wKioL1h7kFuyW-vqAADL02ljFZc920.png

 

 

關於動態調度的實現方法

wKioL1h7kHXCzFmWAAEL-kjisbE035.png

 

 

總結:

  1. 一個service會引用一個自定義鏈用於維護與之關聯的pod

  2. 不管是經過service定義的nodePort仍是service的ip地址訪問service,相應的數據包都會傳遞到維護pod的自定義鏈上,最終使用DNAT修改目標地址爲被訪問容器的ip地址,並結合iptables的statistic模塊中的random模式,實現各個容器的負載均衡

相關文章
相關標籤/搜索