kubernetes里有三張不同的網(wǎng)絡(luò)喂链,每種IP地址,就代表一個不同的尋址空間
- Node IP:Node節(jié)點的IP地址
- Pod IP:Pod的IP地址
- Cluster IP:Service的IP地址
首先策肝,Node IP是kubernetes集群中每個節(jié)點的物理網(wǎng)卡的IP地址(包括虛擬機(jī)的網(wǎng)卡)肛捍,這是一個真實存在的物理網(wǎng)絡(luò),所有屬于這個網(wǎng)絡(luò)的服務(wù)器之間都能通過這個網(wǎng)絡(luò)進(jìn)行通信之众,不管他們中是否有部分節(jié)點不屬于這個kebernetes集群拙毫。這也表明了Kubenetes集群之外的節(jié)點訪問Kubernetes之內(nèi)的某個節(jié)點或者TCP/IP服務(wù)時,必須要通過Node IP進(jìn)行通信棺禾。
其次缀蹄,Pod IP是每個Pod的IP地址,它是Docker Engine根據(jù)docker0網(wǎng)橋的IP地址段進(jìn)行分配的膘婶,通常是一個虛擬的二層網(wǎng)絡(luò)缺前,前面我們說過,Kubernetes要求位于不同Node上的Pod能夠彼此直接通信悬襟,所以Kuberntes里一個Pod里的容器訪問另外一個Pod里的容器衅码,就是通過Pod IP所在的虛擬二層網(wǎng)絡(luò)進(jìn)行通信的,而真實的TCP/IP流量則是通過Node IP所在的物理網(wǎng)卡流出的脊岳。
最后逝段,我們說說Service的Cluster IP垛玻,它也是一個虛擬的IP,但更像一個“偽造”的IP網(wǎng)絡(luò)奶躯,原因有一下幾點帚桩。
- Cluster IP僅僅作用于kubernetes Service這個對象,并由Kubernetes管理和分配IP地址(來源于Cluster IP地址池)
- Cluster IP無法被ping嘹黔,因為沒有一個“實體網(wǎng)絡(luò)對象”來響應(yīng)
- Cluster IP只能結(jié)合Service Port組成一個具體的通信端口朗儒,單獨的Cluster IP不具備TCP/IP通信的基礎(chǔ),并且它們屬于Kubernetes集群這樣一個封閉的空間参淹,集群之外的節(jié)點如果要訪問這個通信端口醉锄,則需要做一些額外的工作。
- 在Kubernetes集群之內(nèi)浙值,Node IP網(wǎng)恳不,Pod IP網(wǎng)與Cluster IP網(wǎng)之間的通信,采用的是Kubernetes自己設(shè)計的一種編程方式的特殊的路由規(guī)則开呐,與我們所熟知的IP路由有很大的不同烟勋。
根據(jù)上面的分析和總結(jié),我們基本明白了:Service的Cluster IP屬于Kubernetes集群內(nèi)部的地址筐付,無法在集群外部直接使用這個地址卵惦。那么矛盾來了:實際上我們開發(fā)的業(yè)務(wù)系統(tǒng)中肯定多少有一部分要提供給Kubernetes集群外部的應(yīng)用或者用戶來使用的,NodePort是解決上述問題最直接瓦戚、最有效沮尿、最常用的做法,這個主題以后再說较解。
來源:Kubernetes權(quán)威指南(紀(jì)念版)