一個簡單的例子理解Kubernetes的三種IP地址型別

i042416發表於2018-11-20

很多Kubernetes的初學者對Kubernetes裡面三種不同的IP地址和工作機制理解得不是很清楚。

本文我們透過一個最簡單的例子來學習。

用如下命令列建立一個基於nginx的deployment:

kubectl run nginx --image=nginx:maxline

用kubectl get deploy檢視成功生成的名為nginx的deployment:

一個簡單的例子理解Kubernetes的三種IP地址型別

此時這個deployment裡的nginx pod還無法對外界提供服務。

我們建立一個service讓外界能夠消費。使用命令列建立這樣的一個service:

kubectl expose deployment nginx --type=LoadBalancer --port=80 --target-port=80

type的型別選擇為LoadBalancer, --port指定的是80埠,意思是這個service對外界暴露出來的服務埠是80,--target-port=80,這個埠是pod內部的nginx docker容器提供服務的工作埠,預設為80。這裡實際上建立了向外界開發的80埠同nginx容器內部埠的一個對映關係。

一個簡單的例子理解Kubernetes的三種IP地址型別

執行完畢後,我們呼叫下面的命令列,看到了建立的service的Cluster IP和External IP。

一個簡單的例子理解Kubernetes的三種IP地址型別

其中external IP很好理解,這個service透過external IP加上我們前面介紹的被對映到80埠向外界提供服務:

瀏覽器裡輸入External IP 能成功訪問nginx伺服器的index.html:

一個簡單的例子理解Kubernetes的三種IP地址型別

而我們透過Service的Cluster IP是無法訪問這個Service提供的功能的。

我們知道Kubernetes裡的所有pod都可以彼此通訊,而不需要透過網路地址轉換(Network Address Translation-NAT),所有的節點也可以與所有的pod通訊。而Service的Cluster IP,是一個內部的IP地址,專門用於同Cluster內部的節點或者pod通訊。同外界通訊,還是透過External IP進行。

NodePort

再試試NodePort。

kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80

注意看下圖的PORT欄下面顯示的型別為NodePort的埠:31375

這個埠號是Kubernetes expose命令自動生成的,範圍在30000到32767之間。如果需要修改,可以編輯api server的配置檔案:/etc/kubernetes/apiserver:

一個簡單的例子理解Kubernetes的三種IP地址型別

一個簡單的例子理解Kubernetes的三種IP地址型別

有了這個埠號,我們隨便使用一個node的IP地址,後面拼接上:31375即是外部可以消費的完整地址。

使用命令列kubectl get nodes -o wide, 在結果裡選擇任意節點的External-IP,後面加上:31375:

一個簡單的例子理解Kubernetes的三種IP地址型別

測試:

測試透過。

一個簡單的例子理解Kubernetes的三種IP地址型別

Pod的埠轉發功能

值得一提的是,有時我們出於測試的目的,需要一種簡單的辦法檢視一個pod是否能正常提供服務。如果每次透過kubectl的方式建立service就太麻煩了。

這裡介紹一種簡單的辦法:pod的埠轉發功能(port forward)。

比如我們想測試下圖get pods返回的第一個pod的功能,名稱為nginx-6f754dd4b9-74jdn:

一個簡單的例子理解Kubernetes的三種IP地址型別

執行命令列 kubectl port-forward pod/nginx-6f754dd4b9-74jdn 8080:80

看到提示資訊Forwarding from 127.0.0.1:8080 -> 80, 意思是把當前主機的8080埠對映到nginx pod的80工作埠:

一個簡單的例子理解Kubernetes的三種IP地址型別

最後,就能夠透過localhost:8080直接訪問nginx pod提供的服務了:

一個簡單的例子理解Kubernetes的三種IP地址型別

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

一個簡單的例子理解Kubernetes的三種IP地址型別


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2220813/,如需轉載,請註明出處,否則將追究法律責任。

相關文章