You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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部署流程中出现两个问题:

  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:35:24