如何 运行 本地 Jupyter,仅使用内部 IP 地址连接到 Google 云虚拟机?
How to run Jupyter, locally, connecting to Google Cloud VM using only internal IP address?
我配置了一个只有内部 IP (10.X.X.10) 的 Compute Engine 实例。我可以通过带有隧道的 IAP 通过 gcloud ssh 进入它,通过私有访问和复制文件存储 Google 访问和 VPC 设置没有冲突的 IP 范围:
gcloud compute ssh --zone "us-central1-c" "vm_name" --tunnel-through-iap --project "projectXXX"
现在我想在不在虚拟机中创建外部 IP 的情况下打开 Jupyter notebook。
Identity-Aware Proxy (IAP) 运行良好,Private Google Access 也很好。之后我启用了 NAT 网关,生成了一个外部 IP (35.X.X.155).
我通过 运行ning jupyter notebook --generate-config
配置了 Jupyter,设置了密码 "sha"
现在我 运行 Jupyter 通过在 gcloud SSH 上输入这个:
python /usr/local/bin/jupyter-notebook --ip=0.0.0.0 --port=8080 --no-browser &
正在替换:http://instance-XXX/?token=abcd
作者:http://35.X.X.155/?token=abcd
但是外网IP访问不到,浏览器访问不了,http访问不了,https访问也访问不了。请注意,我不考虑使用网络负载平衡,因为没有必要。
Ping 35.X.X.155 完美运行
我也试过了jupyter notebook --gateway-url=http://NAT-gateway:8888
没有成功
将此视为堡垒(具有外部 IP 的 VM)的替代方案
关于如何解决这个问题有什么想法吗?
更新:看来我必须找到一种通过 SSH 进入 NAT 网关的方法。
你想做的事情都可以完成using IAP for TCP forwarding,这种情况下根本不需要使用NAT。以下是要遵循的步骤:
- 确保项目防火墙允许端口 22 和 8080:
gcloud compute firewall-rules list
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
allow-8080-ingress-from-iap default INGRESS 1000 tcp:8080 False
allow-ssh-ingress-from-iap default INGRESS 1000 tcp:22 False
- 在您端点的 gcloud CLI 上,登录 GCP 并将项目设置为实例所在的位置 运行:
gcloud config set project $GCP_PROJECT_NAME
- 检查您的系统中是否已经生成了 SSH 密钥:
ls -1 ~/.ssh/*
#=>
/. . ./id_rsa
/. . ./id_rsa.pub
如果没有,可以使用以下命令生成它们:ssh-keygen -t rsa -f ~/.ssh/id_rsa -C id_rsa
- 将 SSH 密钥添加到项目的元数据中:
gcloud compute project-info add-metadata \
--metadata ssh-keys="$(gcloud compute project-info describe \
--format="value(commonInstanceMetadata.items.filter(key:ssh-keys).firstof(value))")
$(whoami):$(cat ~/.ssh/id_rsa.pub)"
#=>
Updated [https://www.googleapis.com/compute/v1/projects/$GCP_PROJECT_NAME].
- 将
iap.tunnelResourceAccessor
角色分配给用户:
gcloud projects add-iam-policy-binding $GCP_PROJECT_NAME \
--member=user:$USER_ID \
--role=roles/iap.tunnelResourceAccessor
- 启动指向您的 instance:port 的 IAP 隧道并将其绑定到您想要的本地主机端口(在本例中为 9000):
gcloud compute start-iap-tunnel $INSTANCE_NAME 8080 \
--local-host-port=localhost:9000
Testing if tunnel connection works.
Listening on port [9000].
此时,您应该可以在 http://127.0.0.1:9000?token=abcd 中访问您的 Jupyter Notebook。
注意:start-iap-tunnel
命令不是 one-time 运行 命令,每次要访问 Jupyter Notebook 实现时都应发出并保留 运行。
我配置了一个只有内部 IP (10.X.X.10) 的 Compute Engine 实例。我可以通过带有隧道的 IAP 通过 gcloud ssh 进入它,通过私有访问和复制文件存储 Google 访问和 VPC 设置没有冲突的 IP 范围:
gcloud compute ssh --zone "us-central1-c" "vm_name" --tunnel-through-iap --project "projectXXX"
现在我想在不在虚拟机中创建外部 IP 的情况下打开 Jupyter notebook。
Identity-Aware Proxy (IAP) 运行良好,Private Google Access 也很好。之后我启用了 NAT 网关,生成了一个外部 IP (35.X.X.155).
我通过 运行ning jupyter notebook --generate-config
配置了 Jupyter,设置了密码 "sha"
现在我 运行 Jupyter 通过在 gcloud SSH 上输入这个:
python /usr/local/bin/jupyter-notebook --ip=0.0.0.0 --port=8080 --no-browser &
正在替换:http://instance-XXX/?token=abcd
作者:http://35.X.X.155/?token=abcd
但是外网IP访问不到,浏览器访问不了,http访问不了,https访问也访问不了。请注意,我不考虑使用网络负载平衡,因为没有必要。
Ping 35.X.X.155 完美运行
我也试过了jupyter notebook --gateway-url=http://NAT-gateway:8888
没有成功
将此视为堡垒(具有外部 IP 的 VM)的替代方案
关于如何解决这个问题有什么想法吗?
更新:看来我必须找到一种通过 SSH 进入 NAT 网关的方法。
你想做的事情都可以完成using IAP for TCP forwarding,这种情况下根本不需要使用NAT。以下是要遵循的步骤:
- 确保项目防火墙允许端口 22 和 8080:
gcloud compute firewall-rules list
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
allow-8080-ingress-from-iap default INGRESS 1000 tcp:8080 False
allow-ssh-ingress-from-iap default INGRESS 1000 tcp:22 False
- 在您端点的 gcloud CLI 上,登录 GCP 并将项目设置为实例所在的位置 运行:
gcloud config set project $GCP_PROJECT_NAME
- 检查您的系统中是否已经生成了 SSH 密钥:
ls -1 ~/.ssh/*
#=>
/. . ./id_rsa
/. . ./id_rsa.pub
如果没有,可以使用以下命令生成它们:ssh-keygen -t rsa -f ~/.ssh/id_rsa -C id_rsa
- 将 SSH 密钥添加到项目的元数据中:
gcloud compute project-info add-metadata \
--metadata ssh-keys="$(gcloud compute project-info describe \
--format="value(commonInstanceMetadata.items.filter(key:ssh-keys).firstof(value))")
$(whoami):$(cat ~/.ssh/id_rsa.pub)"
#=>
Updated [https://www.googleapis.com/compute/v1/projects/$GCP_PROJECT_NAME].
- 将
iap.tunnelResourceAccessor
角色分配给用户:
gcloud projects add-iam-policy-binding $GCP_PROJECT_NAME \
--member=user:$USER_ID \
--role=roles/iap.tunnelResourceAccessor
- 启动指向您的 instance:port 的 IAP 隧道并将其绑定到您想要的本地主机端口(在本例中为 9000):
gcloud compute start-iap-tunnel $INSTANCE_NAME 8080 \
--local-host-port=localhost:9000
Testing if tunnel connection works.
Listening on port [9000].
此时,您应该可以在 http://127.0.0.1:9000?token=abcd 中访问您的 Jupyter Notebook。
注意:start-iap-tunnel
命令不是 one-time 运行 命令,每次要访问 Jupyter Notebook 实现时都应发出并保留 运行。