头盔无法连接到GKE的分till

时间:2020-05-11 14:44:03

标签: kubernetes google-kubernetes-engine kubernetes-helm

运行helm versionhelm list时,我也遇到错误消息

kubectl port-forward -n kube-system tiller-deploy-xxxxxxxxxxxxxxx 44134
error: error upgrading connection: error dialing backend: No SSH tunnels currently open. Were the targets able to accept an ssh-key for user "gke-xxxxxxxxxxx"?

根本问题似乎与GKE端口转发有关。 ssh密钥可以在任何地方配置吗?我可以看到此密钥已添加到我的元数据中,但它不是GKE节点的元数据的一部分。

3 个答案:

答案 0 :(得分:1)

问题可能与certicates有关。请检查上的部分

Q: On GKE (Google Container Engine) I get “No SSH tunnels currently open”

答案 1 :(得分:1)

  • Under the hood掌舵人开始进行短暂的kubectl port-forward分till。

如果它不起作用,那是您的问题所在,而不是分till:

  • Kubectl端口转发依赖于集群的 master能够与集群中的节点进行通信。但是,由于主服务器与群集节点不在同一个Compute Engine网络中,因此我们依靠 SSH隧道启用安全通信。

  • GKE将SSH公钥文件保存在Compute Engine项目元数据中。使用Google提供的映像的所有Compute Engine VM都会定期检查其项目的通用元数据和实例的元数据中的SSH密钥,以添加到VM的授权用户列表中。 GKE还向您的Compute Engine网络添加了一个防火墙规则,允许从主机的IP地址到群集中的每个节点的SSH访问。

如果以上任何kubectl命令均未运行,则很可能是主服务器无法使用节点打开SSH隧道。检查这些潜在原因:

  1. 集群没有任何节点:
    如果您已将群集中的节点数缩减为零,则SSH隧道将无法工作。

要解决此问题,请resize your cluster至少拥有一个节点。

  1. 集群中的荚卡处于终止状态,并阻止了不再存在的节点从集群中删除:
    这个问题只会影响Kubernetes 1.1版,而可能是由于重复调整群集大小而引起的。

要修复此问题,delete the Pods处于终止状态已超过几分钟。然后,将旧节点从主机API中删除,并替换为新节点。

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

    所有Compute Engine网络都是使用称为“ default-allow-ssh”的防火墙规则创建的,该规则允许从所有IP地址进行SSH访问(当然需要有效的私钥)。 GKE还为gke-cluster-name-random-characters-ssh格式的每个集群插入一个SSH规则,该规则允许SSH从集群的主IP专门访问集群的节点。如果这两个规则都不存在,则主服务器将无法打开SSH隧道。

要解决此问题,re-add a firewall rule允许使用来自主IP地址的,位于群集所有节点上的标签访问VM。

  1. 您项目的“ ssh-keys”通用元数据条目已满。

    如果项目的名为“ ssh-keys”的元数据条目接近32KiB大小限制,则GKE无法添加自己的SSH密钥以使其能够打开SSH隧道。您可以通过运行以下命令来查看项目的元数据:

    gcloud compute project-info describe [--project=PROJECT]
    

    然后检查ssh键列表的长度。

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

  1. 您已经在群集中的VM上使用键“ ssh-keys”设置了元数据字段。

    VM上的节点代理更喜欢按实例使用ssh-key而不是项目范围的SSH密钥,因此,如果您专门在集群的节点上设置了任何SSH密钥,则项目元数据中主服务器的SSH密钥将不会受节点尊重。要进行检查,请运行gcloud compute instances describe <VM-name>并在元数据中查找“ ssh-keys”字段。

要修复此问题,请从实例元数据中delete the per-instance SSH keys

您还可以在GCP Kubernetes Engine Troubleshooting kubectl

中找到此故障排除步骤。

注意:作为补充说明,我也建议尝试Helm 3

它不再需要安装分耕机,具有许多新功能,并且在GKE上受支持。

答案 2 :(得分:0)

我今天遇到了同样的问题,我只是创建了一个新节点池,封锁了第一个池,因此 GKE 新节点池进程将创建所有新的防火墙规则,我只是取消了第一个节点轮询并删除了第一个池。