2015-09-30 58 views
2

據我瞭解,KUBE-代理每Kubernetes節點上運行Kubernetes:鏈接莢KUBE-代理

如果我理解正確的(它是在法師和工作節點上啓動),它也是'推薦'的方式來訪問該API(請參閱:https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/user-guide/accessing-the-cluster.md#accessing-the-api-from-a-pod

因此,由於kube-proxy已經在每個節點上運行,因此是使用新kube代理容器啓動每個pod的「推薦」方式,或者有可能以某種方式'鏈接'到正在運行的kube-proxy容器?

我原來是用與$ KUBERNETES_SERVICE_HOST的URL和一個祕密傳遞,對GKE的憑據, 調用

curl https://$USER:[email protected]${KUBERNETES_SERVICE_HOST}/api/v1/namespaces/${NAMESPACE}/endpoints/${SELECTOR} 

和分析的結果,但K8S部署CoreOS集羣上我似乎只能夠通過TLS和證書進行身份驗證,並且鏈接代理似乎是更好的方式。

所以,我在尋找最有效的/最簡單的方法從吊艙連接到API來查找IP由服務提及的另一種吊艙。

任何建議/輸入?

回答

5

有一對夫婦選擇這裏,因爲在你所提供的文檔的鏈接注意。

的優選方法是使用Service Accounts訪問API:

的簡短說明的是,服務將讀出的服務賬戶的祕密,其安裝到所述料盒(令牌/ CA-CERT),然後注入令牌放入http頭中,並使用CA-cert驗證apiserver證書。這略微簡化了服務帳戶的描述,但上述鏈接可以提供更多細節。

例利用內幕莢捲曲和服務的帳戶數據:

curl -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt https://kubernetes/api/v1/namespaces 

另一種選擇,在你所提供的鏈接中提到,是運行運行在同一莢「kubectl代理」側面汽車集裝箱作爲你的申請。

的說明澄清了:「KUBE-代理」和「kubectl代理」不是指同樣的事情。該KUBE-代理負責路由「服務」的要求,kubectl代理是打開的本地代理的Kubernetes API一個CLI CMD。

在運行kubectl proxy時發生的情況是,kubectl命令已經知道如何使用服務帳戶數據,所以它會提取令牌/ CA-cert併爲您建立到API服務器的連接,然後暴露在盒局部的界面(它可以不用任何AUTH/TLS使用)。

這可能是一個更簡單的方法,因爲它可能不需要對現有應用程序進行更改,而不必將其指向在同一個窗格中運行的本地kubectl代理容器。

另一個側面說明:我不確定您的確切用例,但通常最好使用服務IP /服務DNS名稱,並允許Kubernetes處理服務發現,而不是提取Pod IP本身(如果吊艙被安排到不同的機器上,吊艙IP將會改變)。

+0

感謝Aaron, 我對於如何使用kubectl代理感到困惑:它在本地主機上可用,但對我來說,kubectl是一個命令行工具,我該如何使用側面汽車的容器? 這個'示例'https://github.com/kubernetes/kubernetes/tree/release-1.0/examples/kubectl-container解釋了一下,我希望我的理解正確:kubectl與'-p proxy 8001'參數基本相同作爲通過 通過連接的pod使用wget到localhost和8001端口,這意味着kubectl實際上接收HTTP請求並將其轉發給api服務器。那是對的嗎? – MrE

+0

btw:我知道我可以使用服務名稱並利用DNS,但是像HBase這樣的服務似乎是通過主機名來引用節點。有一個關於DNS的整個問題線程,它只是被推送,但同時我需要一個替代方案。 – MrE

+0

@MrE這幾乎是發生了什麼事情。一個容器中的所有容器將基本上共享相同的網絡。因此,在一個容器中,您通過長命令cli命令('kubectl proxy')運行代理,並在您的應用程序容器中通過本地主機連接到該代理。 –