GCP单VM实例:将80/443端口转发至Streamlit的8501端口
单GCP VM实例实现80/443到8501端口转发(gcloud方案)
1. 配置GCP防火墙规则(允许外部访问80/443)
先通过gcloud创建允许HTTP/HTTPS流量的防火墙规则,并给目标VM打标签:
# 创建防火墙规则 gcloud compute firewall-rules create allow-http-https \ --direction=INGRESS \ --priority=1000 \ --network=default \ --action=ALLOW \ --rules=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=streamlit-server # 给VM实例添加对应标签(替换实例名和区域) gcloud compute instances add-tags YOUR_VM_NAME \ --tags=streamlit-server \ --zone=YOUR_VM_ZONE
2. 在VM内部配置端口转发(iptables)
直接在VM实例内用iptables实现端口映射,无需额外GCP组件:
# 临时启用IP转发(重启后失效) sudo sysctl -w net.ipv4.ip_forward=1 # 永久启用IP转发(编辑配置文件) sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf sudo sysctl -p # 添加80→8501转发规则 sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8501 # 添加443→8501转发规则 sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8501
3. 保存iptables规则(防止重启丢失)
根据VM的操作系统选择对应命令:
- Debian/Ubuntu:
sudo apt update && sudo apt install -y iptables-persistent sudo netfilter-persistent save
- RHEL/CentOS:
sudo yum install -y iptables-services sudo service iptables save
注意事项
- 如果需要HTTPS正常访问(浏览器不提示不安全),你需要给Streamlit配置SSL证书,或者用Nginx等反向代理处理SSL终结后再转发到8501。仅端口转发的话,443流量会直接转到未配置SSL的8501端口,导致HTTPS访问失败。
- 验证配置:访问
http://YOUR_VM_PUBLIC_IP和https://YOUR_VM_PUBLIC_IP,检查是否能正常打开Streamlit应用。
内容的提问来源于stack exchange,提问作者Fred Zimmerman
相关产品推荐
相关产品推荐

