Google compute engine GCE:如何创建从外部端口80到内部端口5555的转发规则

Google compute engine GCE:如何创建从外部端口80到内部端口5555的转发规则,google-compute-engine,Google Compute Engine,我第一次使用谷歌计算引擎。我想设置一个网络负载均衡器(带有静态ip),它监听端口80,但转发到监听端口5555的后端服务器。我发现的所有示例都显示了将80转发到80,这对我的情况没有帮助 参考: 多亏了目前,端口转发不是GCE负载平衡器(LBs)功能:LBs将新的传入请求转发到目标池(TPs),目标池分布在其实例之间。不执行IP或端口映射,因为只转发传入请求。LBs按原样暴露端口。因此,对于多个端口,您可以定义一个端口范围,或者为每个端口定义一个不同的LB 要实现类似的功能,您可以使用HAPro

我第一次使用谷歌计算引擎。我想设置一个网络负载均衡器(带有静态ip),它监听端口80,但转发到监听端口5555的后端服务器。我发现的所有示例都显示了将80转发到80,这对我的情况没有帮助

参考:


多亏了

目前,端口转发不是GCE负载平衡器(LBs)功能:LBs将新的传入请求转发到目标池(TPs),目标池分布在其实例之间。不执行IP或端口映射,因为只转发传入请求。LBs按原样暴露端口。因此,对于多个端口,您可以定义一个端口范围,或者为每个端口定义一个不同的LB

要实现类似的功能,您可以使用HAProxy的端口转发设置,实例级别的NAT,或者在软件级别将客户端从端口80重定向到端口5555


使用Kubernetes,您可以通过使用服务轻松实现端口转发。服务定义一个代理,该代理将自动执行端口转发所需的所有iptables魔术。希望这有帮助。

经过大量阅读和测试,我找到了一个解决方案,允许GCE将请求代理到不同端口上的内部端口。要转发到另一个端口,我必须设置代理、服务器池、UrlMaps等,因此设置要比基本的网络转发复杂得多

##############################
# Setting up API port forwarding from external 80 to internal 5555
export INTERNAL_PORT=5555    #The port number that api is running on. 
export EXTERNAL_PORT=80      #The port number that will be exposed externally by the proxy

export ZONE=us-central1-b
export NETWORK=mynetwork

export INSTANCE_GRP="api-us"
export HEALTH_CHECK="api-basic-check"
export HEALTH_CHECK_CHECKPATH="/isok"
export BK_SRV_SERVICE="api-srv"
export PROXY_NAME="api-proxy"
export URLMAP_NAME="api-urlmap"
export HTTP_FW_NAME="api-http-fw-rule"
export ADDRESS_NAME="api-external-ip"

export BACKEND_SRV01="apiserver01"

gcloud preview instance-groups --zone $ZONE create $INSTANCE_GRP  --network $NETWORK
gcloud preview instance-groups --zone $ZONE instances \
    --group $INSTANCE_GRP add $BACKEND_SRV01
#The load balancing service by default looks for a service with a key of http. 
gcloud preview instance-groups --zone $ZONE add-service $INSTANCE_GRP \
    --port $INTERNAL_PORT --service http

gcloud compute http-health-checks create $HEALTH_CHECK \
    --check-interval 5s --healthy-threshold 2 \
    --port $INTERNAL_PORT --timeout 3s --unhealthy-threshold 4 \
    --request-path $HEALTH_CHECK_CHECKPATH

gcloud compute backend-services create $BK_SRV_SERVICE \
        --http-health-check $HEALTH_CHECK
gcloud compute backend-services add-backend $BK_SRV_SERVICE \
    --group $INSTANCE_GRP --zone $ZONE

gcloud compute url-maps create $URLMAP_NAME --default-service $BK_SRV_SERVICE
gcloud compute target-http-proxies create $PROXY_NAME --url-map $URLMAP_NAME

#create a static address to expose externally so that we can keep it if we remove the proxy.
gcloud compute addresses create $ADDRESS_NAME --global
export IP=`gcloud compute addresses describe $ADDRESS_NAME --global --format json | jq --raw-output '.address'`

gcloud compute forwarding-rules create $HTTP_FW_NAME --global \
    --target-http-proxy $PROXY_NAME --port-range $EXTERNAL_PORT --address $IP 

echo $IP # This is the IP to use for DNS etc...

我执行端口转发,因为我在后端服务器上运行多个服务。我们还有一个kubernetes主机集群,可以运行许多docker容器,每个容器位于不同的端口上。顺便说一句,Im转发HTTPFYI:自从我创建了这个问题/答案后,GCE将http/https代理从alpha移动到beta,并处于已发布状态。我需要检查他们是否从那时起清理了安装过程…按天保存,无法想象转发规则(前端服务)需要目标http代理和url映射。我原以为前端服务可以直接指向后端服务