我在 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
作業系統登入方式:
$ 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 伺服器進行連接,使用應用程式內購買, 或者瀏覽器中的 SSH(使用 IAP)。
您可以從以下位置了解如何啟動 VPN 伺服器執行個體:以下要點( vpn.tf
, openvpn-server.sh
)。
如果是 IAP 和 SSH-in-browser,您需要新增對連接埠 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
這裡是我嘗試其中一些方法的結果。