运行helm version
或helm 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节点的元数据的一部分。
答案 0 :(得分:1)
问题可能与certicates有关。请检查上的部分
Q: On GKE (Google Container Engine) I get “No SSH tunnels currently open”
答案 1 :(得分:1)
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隧道。检查这些潜在原因:
要解决此问题,请resize your cluster至少拥有一个节点。
要修复此问题,delete the Pods处于终止状态已超过几分钟。然后,将旧节点从主机API中删除,并替换为新节点。
您的网络的防火墙规则不允许通过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。
您项目的“ ssh-keys”通用元数据条目已满。
如果项目的名为“ ssh-keys”的元数据条目接近32KiB大小限制,则GKE无法添加自己的SSH密钥以使其能够打开SSH隧道。您可以通过运行以下命令来查看项目的元数据:
gcloud compute project-info describe [--project=PROJECT]
然后检查ssh键列表的长度。
要修复它,delete some of the SSH keys不再需要。
您已经在群集中的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 新节点池进程将创建所有新的防火墙规则,我只是取消了第一个节点轮询并删除了第一个池。