GCloud 中带有 koops 的 Kubernetes 集群:public 密钥被拒绝

Kubernetes cluster in GCloud with koops: public key denied

我正在使用 kops 和以下命令在 GCloud 上部署一个 2 节点 Kubernetes 集群:

kops create cluster part1.k8s.local --zones europe-west3-a --node-count 2 --node-image ubuntu-os-cloud/ubuntu-2004-focal-v20210129 --node-size "e2-standard-2" --ssh-public-key ~/.ssh/id_rsa.pub --state ${KOPS_STATE_STORE}/ --project=${PROJECT}
kops update cluster --name part1.k8s.local --yes --admin

然后我等待集群准备就绪并使用以下方法获取其中一个节点的外部 IP:

kubectl get nodes -o wide

然而,当我尝试登录节点时,我得到:

ssh -i ~/.ssh/id_rsa admin@<PUBLIC_IP>
admin@<PUBLIC_IP>: Permission denied (publickey).

检查节点应该能够接受 SSH 连接的权限,我可以使用 GCloud UI 连接到 VM。

我做错了什么?谢谢!

答案可以在这里找到:https://github.com/kubernetes/kops/issues/10770

我在使用 SSH keys(添加、删除、覆盖等)测试某些场景时遇到了这个问题。

当您登录到 GKE 控制台时,您的 ssh keys 存储在 ~/.ssh 中。如果文件夹为空,将在您连接到 VM 时创建这些密钥(google_compute_engine 和 google_compute_engine.pub)。

$ ls ~/.ssh
google_compute_engine  google_compute_engine.pub  google_compute_known_hosts  known_hosts

关于 SSH Key 的信息也存储在您的项目中。您可以在 Navigation Menu > Compute Engine > Metadata 中找到它。接下来 select SSH Keys 选项卡 查看实例 SSH keys.

有关 SSH Keys 的其他信息可以在 Managing SSH keys in metadata 指南中找到。

如果你会遇到这种问题,你可以从UI中删除SSH key,删除google_compute_enginegoogle_compute_engine.pub。当您想 SSH 机器时,GKE 会要求您创建新的 SSH 密钥并解决 Permission denied (publickey) 的问题。

应该用于 sshGCE vm 的命令是 gcloud ssh

gcloud compute ssh <instance-name> --zone <zone>

为什么?

gcloud compute ssh is a thin wrapper around the ssh(1) command that takes care of authentication and the translation of the instance name into an IP address.

此外,如果您在 GKE 上遇到其他 SSH 问题,您可以查看 Troubleshooting SSH 指南。