2016-04-02 60 views
1

我正在Google Container Engine上運行一些容器。 有一天一切都很好,第二天我不能再把attach放到我的容器裏。或exec或任何其他碼頭命令。kubectl:來自服務器的錯誤:目前沒有SSH隧道

我刪除了豆莢,讓新的實例,沒有幫助。 然後我刪除了節點,等待創建一個新的節點並部署了這個節點,也沒有任何幫助。

$ kubectl attach www-controller-dev-xxxxx 

Error from server: No SSH tunnels currently open. Were the targets able to accept an ssh-key for user "gke-xxxxxxxxxxxxxxxxxxxxxxxx"? 

我還能試試嗎?

在刪除羣集並重新創建羣集後,問題可能已經出現,但我無法確定。那之前做過,它從來都不是問題。

回答

4

與attach相似的命令依賴於羣集的主節點能夠與羣集中的節點 對話。但是,因爲主節點與您的羣集節點不在同一個引擎網絡中,所以我們依靠SSH隧道來啓用安全的 通信。

容器引擎在您的計算引擎項目中放入SSH公鑰 metadata。所有使用Google提供的圖像 的計算引擎虛擬機都會定期檢查項目的公共元數據 及其實例的SSH密鑰元數據,以將其添加到虛擬機的授權用戶列表 授權用戶列表中。容器引擎還爲您的計算引擎網絡添加了防火牆規則,允許從主站的IP地址到集羣中的每個節點 進行SSH訪問。

如果kubectl attach(或者logs,exec和port-forward)不起作用,很可能是因爲master無法打開SSH隧道到節點。爲了 確定潛在的問題是什麼,你應該檢查這些潛在 原因:

  1. 羣集沒有任何節點。

    如果您已將羣集中的節點數縮減爲零,則SSH 隧道將不起作用。

    要修復它, resize your cluster 有至少一個節點。

  2. 羣集中的節點已停止在終止狀態,並阻止 不再存在的節點從羣集中刪除。

    這是一個應該隻影響Kubernetes版本1.1的問題,但可能由於羣集重複調整大小而導致可能導致 。

    要修復它, delete the pods 已經處於終止狀態超過幾分鐘。 舊節點將從主設備的API中刪除,並由新節點替換 。

  3. 您網絡的防火牆規則不允許SSH訪問主站。

    所有計算引擎網絡都使用名爲 「default-allow-ssh」的防火牆規則創建,該規則允許從所有IP地址進行SSH訪問(當然,要求 爲有效私鑰)。容器引擎還爲形式爲「gke --- ssh」 的每個羣集插入一條SSH規則 ,該規則允許SSH從羣集的主IP到 羣集的節點專門訪問。如果這些規則都不存在,那麼主設備將是 無法打開SSH隧道。

    爲了解決這個問題, re-add a firewall rule 允許訪問虛擬機與這一切羣集的節點上,從 主的IP地址的標籤。

  4. 您項目的sshKeys公共元數據條目已滿。

    如果項目的名爲「sshKeys」的元數據條目接近32KiB大小 的限制,則Container Engine無法添加自己的SSH密鑰以使其打開SSH通道 。您可以通過運行 gcloud compute project-info describe [--project=PROJECT]來查看項目的元數據,然後檢查sshKeys列表的長度爲 。

    要修復它, delete some of the SSH keys 不再需要。

  5. 您已在 羣集中的虛擬機上使用密鑰「sshKeys」設置元數據字段。

    在VM上的節點代理喜歡每個實例sshKeys到項目範圍內的SSH密鑰, 所以如果你已經羣集的節點上設置任何SSH密鑰而言,然後在項目的元數據的 主的SSH密鑰不會受到節點的尊重。 要檢查,請運行gcloud compute instances describe <VM-name>並在元數據中查找 「sshKeys」字段。

    修復它, delete the per-instance SSH keys 從實例元數據。

值得注意的是,正確運行集羣的 不需要這些功能。如果您希望將羣集的網絡鎖定爲從外部訪問中鎖定 ,那就太好了。請注意, 這樣的功能將不起作用。

+0

1.羣集確實有運行節點和運行窗格。 2.沒有一個豆莢正在終止。 3.我沒有更改任何防火牆規則,默認的'default-allow-ssh'規則仍然存在。 4。我檢查了sshKeys列表的長度,它只包含2個鍵。 5.我還沒有用密鑰「sshKeys」手動設置元數據字段。 它剛剛停止工作。第一次刪除羣集沒有幫助。第二次刪除集羣(第二天)它幫助了我,現在我可以再次'kubectl attach'和'kubectl exec'。 – ScyDev

+0

如何找到主人的IP地址?它是否與羣集細節中的「端點」相同? –

+0

很好的回答!作爲小節點:如果主SSH-Key缺失/已從sshKeys-metadata中刪除,則在清理完SSH-Key後的一段時間後,它會自動重新添加。 – jayme

0

沒有一個很好的答案,但它是我的唯一的事情:

第一次刪除集羣並沒有幫助。第二次刪除羣集(第二天)它幫助,現在我可以再次kubectl attachkubectl exec

可能也只是Google Container平臺的暫時性問題,與我重新創建羣集完全沒有關係。