Zac*_*ock 7 google-cloud-platform kubernetes google-kubernetes-engine
一点背景:我有一个使用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,我们就会使用它.
我最终明白了这一点。为此,您要求 GKE 为您设置一个外部负载均衡器,然后您有选择地替换堆栈的各个部分。好消息是,在此过程中您还可以设置 HTTP 运行状况检查,而 GKE 默认情况下不会执行此操作。
确保您拥有 Google Cloud Platform 提供的静态 IP。您可以在控制台中请求。
使用以下命令启动并运行您的服务:
kubectl expose rc api-server --name=api-server --port=8080,8081 --create-external-load-balancer=true
Run Code Online (Sandbox Code Playgroud)
(我使用端口 8080 进行 HTTP 运行状况检查,使用 8081 来服务 gRPC 请求)。
--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)
Run Code Online (Sandbox Code Playgroud)
将健康检查附加到目标池
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
Run Code Online (Sandbox Code Playgroud)
创建一个新的转发规则来替换 GKE 生成的规则
gcloud compute forwarding-rules create api-server \
--region us-central1 --port-range 8080-8081 \
--address ${EXTERNAL_IP} --target-pool ${TARGET_POOL_NAME}
Run Code Online (Sandbox Code Playgroud)
删除原GKE转发规则
gcloud compute forwarding-rules delete $(gcloud compute forwarding-rules list | head -n 2 | tail -n 1 | cut -d " " -f 1)
Run Code Online (Sandbox Code Playgroud)
更新 Kubernetes 服务以允许从新 IP 进入:
kubectl patch services api-server -p "{\"status\":{\"loadBalancer\":{\"ingress\": [{\"ip\": \"${EXTERNAL_IP}\"} ]}}}"
Run Code Online (Sandbox Code Playgroud)
应该这样做!
复制粘贴时要小心,我的头和尾对我有用,因为我只运行一个应用程序,但您可能会以不同的顺序看到事物。
| 归档时间: |
|
| 查看次数: |
5016 次 |
| 最近记录: |