我在 GKE 上创建了一个私有集群,并且与集群一起配置了 NAT。我还设置了一个堡垒来访问私有集群。我试图通过 SSH 进入其中一个节点,但由于私有节点没有外部 IP,因此无法这样做。有什么方法可以做到这一点吗?
答案1
您可以使用“云端“假设 GCP 防火墙规则已到位,则命令通过 SSH 进入您的实例。
gcloud compute ssh example-instance --zone=us-central1-a
答案2
通过 ssh 进入 GKE 节点的方式与通过 ssh 进入 GCE 实例的方式没有什么不同 (AFAICT)。
基本上有两种方法(除非我遗漏了什么):
- SSH 密钥和元数据(权限)
- 操作系统登录(权限)
在第一种情况下您添加USER:$(cat ~/.ssh/id_rsa.pub)
到实例元数据(或者如果您想让自己访问所有项目虚拟机,则添加到项目元数据):
$ gcloud compute instances add-metadata INSTANCE \
--metadata="ssh-keys=me:`cat ~/.ssh/id_rsa.pub`" \
--zone ZONE --project PROJECT_ID
将源 IP 添加到防火墙规则:
$ gcloud compute firewall-rules create allow-ssh \
--source-ranges SOURCE_IP --allow tcp:22 \
--project PROJECT_ID
并连接到节点:
$ ssh me@EXTERNAL_IP
用于gcloud compute instances list --project PROJECT_ID --filter name:NAME
了解外部IP。
或者你可以连接:
$ gcloud compute ssh [USER@]INSTANCE \
--zone ZONE --project PROJECT_ID
它会自动将您的密钥添加到项目元数据中。要使其首先添加到实例元数据集block-project-ssh-keys = true
:
$ gcloud compute instances add-metadata INSTANCE \
--metadata=block-project-ssh-keys=true \
--zone ZONE --project PROJECT_ID
OS登录方式:
$ gcloud compute instances add-metadata INSTANCE \
--metadata=enable-oslogin=true \
--zone ZONE --project PROJECT_ID
$ gcloud compute ssh INSTANCE \
--zone ZONE --project PROJECT_ID
对于私有节点上述内容仍然适用,但你还需要通过节点子网中运行的 VPN 服务器进行连接,使用 IAP, 或者浏览器中的 SSH(使用 IAP)。
您可以从遵循要点(vpn.tf
,openvpn-server.sh
)。
如果是 IAP 和浏览器中的 SSH,您需要从以下位置添加对端口 22 的访问权限35.235.240.0/20
:
$ gcloud compute firewall-rules create allow-ssh \
--source-ranges 35.235.240.0/20 --allow tcp:22 \
--project PROJECT_ID
并添加--tunnel-through-iap
:
$ gcloud compute ssh INSTANCE --tunnel-through-iap \
--zone ZONE --project PROJECT_ID
这里是我尝试了这些方法的结果。