为何GKE显示后端实例不健康?Keycloak配置GCE Ingress后健康检查失败
你提到的NAG应为NEG(网络端点组),你的问题确实和防火墙规则、GKE Ingress健康检查配置缺失有关,按照以下步骤修复即可:
1. 配置GCP负载均衡&健康检查放行防火墙规则
GCP全局负载均衡的健康检查和流量请求来自固定官方IP段,需要在VPC防火墙中放行到GKE集群节点的对应端口:
- 放行源段:
130.211.0.0/22、35.191.0.0/16 - 放行端口:Keycloak服务端口(8443或8080)、健康检查端口9990
- 目标资源:GKE集群节点(通过节点标签匹配)
可直接使用gcloud命令创建规则,替换其中占位符即可:
gcloud compute firewall-rules create allow-gke-ingress-keycloak \ --direction=INGRESS \ --priority=1000 \ --network=<你的VPC名称> \ --action=ALLOW \ --rules=tcp:8443,tcp:9990 \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=gke-<你的GKE集群名>-<集群随机后缀>-node
集群节点标签可在GCE实例页面查看任意GKE节点的标签获取
2. 配置Ingress自定义健康检查
你当前未给Ingress配置自定义健康检查规则,GCP LB默认会请求服务端口的根路径/判断健康状态,和Keycloak实际的健康检查路径/health、端口9990不匹配,也是后端不健康的核心原因。
首先创建BackendConfig资源定义健康检查规则,保存为backendconfig.yaml:
apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: keycloak-backendconfig namespace: keycloak spec: healthCheck: checkIntervalSec: 10 timeoutSec: 5 healthyThreshold: 3 unhealthyThreshold: 3 type: HTTP requestPath: /health port: 9990
随后修改keycloak-service.yaml,添加注解关联BackendConfig:
metadata: name: keycloak-service namespace: keycloak annotations: cloud.google.com/neg: '{"ingress": true}' cloud.google.com/backend-config: '{"default": "keycloak-backendconfig"}' # 新增该注解
3. 验证Keycloak端口配置
你当前Keycloak Service的targetPort为8443,需确认Keycloak启动时已开启HTTPS监听8443端口;如果未配置HTTPS,可将targetPort改为8080(对应你之前LoadBalancer正常使用的端口),同时同步修改防火墙放行端口为8080即可。
所有配置修改完成后重新apply所有资源,等待5-10分钟待GCP Ingress和健康检查规则更新完成,后端实例即可恢复健康状态。
内容的提问来源于stack exchange,提问作者Kambei
相关产品推荐
相关产品推荐

