kubectl:来自服务器的错误:当前没有打开 SSH 隧道

2024-03-08

我正在 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 隧道。到 确定根本问题是什么,您应该检查这些潜在问题 原因:

  1. 该集群没有任何节点。

    如果您已将集群中的节点数减少到零,则 SSH 隧道不起作用。

    要解决这个问题,调整集群大小 http://kubernetes.io/docs/user-guide/resizing-a-replication-controller/至少有一个节点。

  2. 集群中的 Pod 陷入终止状态并阻止 不再存在的节点会被从集群中删除。

    这个问题应该只会影响 Kubernetes 版本 1.1,但也可能会影响 是由反复上下调整集群大小引起的。

    要解决这个问题,删除 Pod http://kubernetes.io/docs/user-guide/kubectl/kubectl_delete/处于终止状态超过几分钟。 然后旧节点将从主节点的 API 中删除并替换 通过新节点。

  3. 您的网络的防火墙规则不允许通过 SSH 访问主服务器。

    所有 Compute Engine 网络都是使用名为 “default-allow-ssh”允许从所有 IP 地址进行 SSH 访问(需要 当然是有效的私钥)。容器引擎还插入 SSH 规则 对于“gke---ssh”形式的每个集群 允许从集群的主 IP 进行 SSH 访问 集群的节点。如果这些规则都不存在,那么 master 将是 无法打开 SSH 隧道。

    要解决这个问题,重新添加防火墙规则 https://cloud.google.com/compute/docs/networking#addingafirewall允许访问具有所有集群节点上的标签的虚拟机 主站的IP地址。

  4. 您项目的 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不再需要的。

  5. 您已在 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(使用前将#替换为@)

kubectl:来自服务器的错误:当前没有打开 SSH 隧道 的相关文章

随机推荐