一些背景信息:我有一个使用gRPC与客户端应用程序通信的Go服务。 gRPC使用HTTP2,因此我无法使用Google App Engine或Google Cloud HTTP负载均衡器。 我需要从互联网到我的Go应用程序的原始TCP负载平衡。
我浏览了GKE教程并阅读了各种文档,但找不到任何方法来为我的应用程序提供静态IP地址。那么,如何在GKE中将静态IP地址附加到运行的内容上呢?
一些背景信息:我有一个使用gRPC与客户端应用程序通信的Go服务。 gRPC使用HTTP2,因此我无法使用Google App Engine或Google Cloud HTTP负载均衡器。 我需要从互联网到我的Go应用程序的原始TCP负载平衡。
我浏览了GKE教程并阅读了各种文档,但找不到任何方法来为我的应用程序提供静态IP地址。那么,如何在GKE中将静态IP地址附加到运行的内容上呢?
在kubernetes v1.0.x中不支持此功能,但在v1.1.x中将提供service.spec.loadBalancerIP
。只要您拥有该IP地址,我们就会使用它。
kubectl expose rc api-server --name=api-server --port=8080,8081 --create-external-load-balancer=true
--create-external-load-balancer=true
会更新Kubernetes服务的入口规则,设置目标池和网络负载均衡器,并添加防火墙规则。我们需要修复#1和#3。export TARGET_POOL_NAME=$(gcloud compute target-pools list | head -n 2 | tail -n 1 | cut -d " " -f 1)
export EXTERNAL_IP=$(gcloud compute addresses list | head -n 2 | tail -n 1 | cut -d " " -f 3)
将健康检查附加到目标池
gcloud compute http-health-checks create api-server-http-basic-check --port 8080 --request-path "/_health"
gcloud compute target-pools add-health-checks ${TARGET_POOL_NAME} --http-health-check api-server-http-basic-check
gcloud compute forwarding-rules create api-server \
--region us-central1 --port-range 8080-8081 \
--address ${EXTERNAL_IP} --target-pool ${TARGET_POOL_NAME}
gcloud compute forwarding-rules delete $(gcloud compute forwarding-rules list | head -n 2 | tail -n 1 | cut -d " " -f 1)
更新Kubernetes Service,允许从新IP进行入站:
kubectl patch services api-server -p "{\"status\":{\"loadBalancer\":{\"ingress\": [{\"ip\": \"${EXTERNAL_IP}\"} ]}}}"
应该就这样了!
小心复制粘贴,我的头部和尾部适用于我只运行一个应用程序的情况,但您可能会看到不同顺序的事情。
kubectl expose rc api-server-controller --name=api-server --port=8081 --create-external-load-balancer=true --public-ip="146.148.83.156"
命令行版本。当我运行kubectl get -o json services api-server
时,它在"deprecatedPublicIPs": ["146.148.83.156"]
中显示IP地址,但是gcloud compute addresses list
仍然显示该地址被保留,而没有使用。gcloud compute forwarding-rules list
显示它选择了一个临时地址。 - Zach Brock