GKE部署LoadBalancer Service未分配临时IP,求排查方案
问题排查:GKE中LoadBalancer Service无Ingress IP + Pod权限拒绝报错
问题详情
我尝试部署如下Kubernetes Service配置:
apiVersion: v1 kind: Service metadata: annotations: appName: {{ include "common.fullname" . }} componentName: config-service labels: io.kompose.service: config-service name: config-service spec: ports: - name: "{{ .Values.app.ports.configService.port }}" port: {{ .Values.app.ports.configService.port }} targetPort: {{ .Values.app.ports.configService.port }} type: LoadBalancer selector: io.kompose.service: config-service status: loadBalancer: {}
在新项目CI/CD部署流程中出现两个问题:
- Service部署报错:
Service does not have load balancer ingress IP address: test/config-service
根据资料,GKE默认应为LoadBalancer Service分配临时IP,但未生效。
2. 关联Pod启动失败,报错信息:
Injection of autowired dependencies failed; nested exception is com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Permission denied on resource project ${PROJECT_ID}.
整个项目部署使用同一个${PROJECT_ID},需排查解决。
排查与解决步骤
优先处理Pod权限拒绝问题(可能是LoadBalancer无IP的根源)
- 检查Pod关联的ServiceAccount:确认Pod使用的ServiceAccount是否绑定了正确的GCP IAM角色。GKE Pod默认使用
default服务账号,若应用需要访问GCP资源(如Secret Manager、Cloud Storage等),必须为对应ServiceAccount分配足够权限。 - 验证${PROJECT_ID}环境变量注入:确认Pod的Deployment/StatefulSet配置中,${PROJECT_ID}已被正确替换为实际项目ID,避免因变量未替换导致权限校验指向错误项目。
- 核对IAM权限绑定:用
gcloud projects get-iam-policy ${PROJECT_ID}命令查看目标ServiceAccount的IAM权限,确保其拥有访问所需GCP资源的权限(例如访问Secret Manager需roles/secretmanager.secretAccessor角色)。
解决LoadBalancer无Ingress IP问题
- 校验Service与Pod的标签匹配:确认Service的
selector: io.kompose.service: config-service与Pod的metadata.labels完全一致,标签不匹配会导致GKE无法找到后端Pod,进而不创建负载均衡器。 - 查看GCP负载均衡器状态:执行
gcloud compute forwarding-rules list,检查是否存在对应Service的转发规则。若不存在,说明GKE未触发负载均衡器创建,大概率是后端Pod未就绪(即前面的权限问题导致Pod启动失败)。 - 检查GCP资源配额:用
gcloud compute project-info describe --project ${PROJECT_ID}查看项目的Forwarding Rules、Static IPs等配额是否耗尽,配额不足会导致无法分配临时IP。 - 查看Service事件日志:执行
kubectl describe service config-service -n test,查看Events字段中的错误信息,定位负载均衡器创建失败的具体原因。
关联逻辑说明
Pod启动失败(权限问题)会导致Service的后端Endpoints为空,GKE不会为无就绪后端的LoadBalancer Service创建负载均衡器。因此优先解决Pod权限问题,待Pod正常运行后,LoadBalancer的Ingress IP通常会自动分配。
内容的提问来源于stack exchange,提问作者JackTheKnife
相关产品推荐
相关产品推荐

