我正在 Google Container Engine 上运行一些容器。
有一天一切都很好,第二天就不行了attach
不再到我的容器了。或者exec
,或任何其他 docker 命令。
我删除了 Pod 并让新的 Pod 实例化,但没有帮助。
然后我删除了该节点并等待创建新节点并部署 Pod,但也没有帮助。
$ 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"?
我还能尝试什么?
问题可能是在我删除集群并重新创建它之后开始的,但我不能确定。以前这样做过,从来都不是问题。
像attach这样的命令依赖于集群的master能够与节点通信
在集群中。但是,由于master不在同一个Compute中
引擎网络作为集群的节点,我们依靠 SSH 隧道来实现安全
沟通。
Container Engine 将 SSH 公钥放入您的 Compute Engine 项目中metadata https://cloud.google.com/compute/docs/metadata。所有使用的 Compute Engine 虚拟机
Google 提供的图像会定期检查其项目的通用元数据
及其实例的 SSH 密钥元数据,以添加到 VM 的列表中
授权用户。容器引擎还为您的计算添加了防火墙规则
引擎网络允许从主站的 IP 地址通过 SSH 访问每个节点
在集群中。
如果 kubectl Attach(或日志、exec 和端口转发)不起作用,很可能是因为主节点无法打开到节点的 SSH 隧道。到
确定根本问题是什么,您应该检查这些潜在问题
原因:
-
该集群没有任何节点。
如果您已将集群中的节点数减少到零,则 SSH
隧道不起作用。
要解决这个问题,调整集群大小 http://kubernetes.io/docs/user-guide/resizing-a-replication-controller/至少有一个节点。
-
集群中的 Pod 陷入终止状态并阻止
不再存在的节点会被从集群中删除。
这个问题应该只会影响 Kubernetes 版本 1.1,但也可能会影响
是由反复上下调整集群大小引起的。
要解决这个问题,删除 Pod http://kubernetes.io/docs/user-guide/kubectl/kubectl_delete/处于终止状态超过几分钟。
然后旧节点将从主节点的 API 中删除并替换
通过新节点。
-
您的网络的防火墙规则不允许通过 SSH 访问主服务器。
所有 Compute Engine 网络都是使用名为
“default-allow-ssh”允许从所有 IP 地址进行 SSH 访问(需要
当然是有效的私钥)。容器引擎还插入 SSH 规则
对于“gke---ssh”形式的每个集群
允许从集群的主 IP 进行 SSH 访问
集群的节点。如果这些规则都不存在,那么 master 将是
无法打开 SSH 隧道。
要解决这个问题,重新添加防火墙规则 https://cloud.google.com/compute/docs/networking#addingafirewall允许访问具有所有集群节点上的标签的虚拟机
主站的IP地址。
-
您项目的 sshKeys 公共元数据条目已满。
如果项目的名为“sshKeys”的元数据条目接近 32KiB 大小
限制,那么容器引擎无法添加自己的 SSH 密钥来让它
打开 SSH 隧道。您可以通过运行来查看项目的元数据gcloud compute project-info describe [--project=PROJECT]
,然后检查
sshKey 列表的长度。
要解决这个问题,删除一些 SSH 密钥 https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys#delete_project-wide_ssh_keys不再需要的。
-
您已在 VM 上设置了一个带有密钥“sshKeys”的元数据字段
簇。
VM 上的节点代理更喜欢每个实例的 sshKey,而不是项目范围的 SSH 密钥,
因此,如果您专门在集群节点上设置了任何 SSH 密钥,那么
节点不会尊重项目元数据中主节点的 SSH 密钥。
要检查,请运行gcloud compute instances describe <VM-name>
并寻找
元数据中的“sshKeys”字段。
要解决这个问题,删除每个实例的 SSH 密钥 https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys#delete_instance-only_ssh-keys_values来自实例元数据。
值得注意的是,这些功能并不是正确的所必需的。
集群的运行。如果您希望保持集群网络锁定
远离所有外部访问,这完全没问题。请注意
因此,诸如此类的功能将无法使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)