2016-12-05 23 views
0

我一直在與Kubernetes搞混,並且有一個小型的centos主機(3個節點,1個主節點)運行的實驗室集羣。Kube揭露,請求任何節點ip似乎擊中了正確的pod

$ kubectl get nodes 
NAME       STATUS AGE 
centos-kube-minion-1 Ready  2d 
centos-kube-minion-2 Ready  2d 
centos-kube-minion-3 Ready  2d 

我manged遵循互動教程在我的實驗室ENV(http://kubernetes.io/docs/tutorials/kubernetes-basics/expose-interactive/)。

我在您暴露演示程序外部(模塊4步驟1的3)的一部分抵:

$ kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 

Kubectl描述輸出如下:

$ kubectl describe services/kubernetes-bootcamp 
Name:     kubernetes-bootcamp 
Namespace:    default 
Labels:     run=kubernetes-bootcamp 
Selector:    run=kubernetes-bootcamp 
Type:     NodePort 
IP:      10.254.224.254 
Port:     <unset> 8080/TCP 
NodePort:    <unset> 31686/TCP 
Endpoints:    172.30.3.2:8080 
Session Affinity:  None 
No events. 

下一步在本教程中,需要在運行pod的節點dns名稱(或IP)和暴露的端口(我的情況爲31686)上捲曲。

我的/ etc/hosts文件看起來是這樣的:

$ cat etc/hosts 
... 
10.10.0.231 centos-kube-master 
10.10.0.236 centos-kube-minion-1 
10.10.0.232 centos-kube-minion-2 
10.10.0.237 centos-kube-minion-3 

和實際吊艙上,走狗-3上運行:

$ kubectl describe pod kubernetes-bootcamp-428840972-ukl15 
    Name:   kubernetes-bootcamp-428840972-ukl15 
    Namespace:  default 
    Node:   centos-kube-minion-3/10.10.0.237 

然而,(和這裏的實際問題),當我捲曲任何這些DNS條目和暴露的端口,我打了應用程序:

$ curl centos-kube-minion-1:31686 
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-428840972-ukl15 | v=1 

$ curl centos-kube-minion-2:31686 
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-428840972-ukl15 | v=1 

$ curl centos-kube-minion-3:31686 
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-428840972-ukl15 | v=1 

我也捲曲了實際的IP使sur DNS條目沒有發生任何瘋狂的事情。

$ curl 10.10.0.236:31686 
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-428840972-ukl15 | v=1 
$ curl 10.10.0.237:31686 
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-428840972-ukl15 | v=1 
$ curl 10.10.0.232:31686 
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-428840972-ukl15 | v=1 

所以我的問題是:這是按預期工作(我懷疑是)? (如果有的話,任何人都可以解釋/鏈接到對魔法的解釋嗎?)

回答

2

是的,它正在按預期工作:nodePort暴露同一端口上的所有節點上的服務。

基本上,服務是運行應用程序的Pod的代理。 KubeProxy在每個節點上運行,因此當您指定nodePort時,會通知每個節點將來自定義的端口的流量重定向到服務,該服務通過API知道Pod位於何處。

http://kubernetes.io/docs/user-guide/services/#type-nodeport