GKE中受Cloud Armor保护的gRPC Web服务可行配置咨询
解决方案:为GKE中的gRPC Web服务配置Cloud Armor保护
方案1:基于Global HTTP(S) Load Balancer(推荐)
该方案完美适配gRPC的HTTP/2特性,同时原生支持Cloud Armor,还能直接复用你服务已有的两种健康检查能力。
1. 部署ClusterIP类型的Service
将原LoadBalancer Service替换为ClusterIP(更安全,仅集群内部可访问),指向gRPC服务端口:
apiVersion: v1 kind: Service metadata: name: grpc-service spec: type: ClusterIP ports: - name: grpc port: 443 # 若在负载均衡器终止TLS,可改用80;服务自终止则保留443 targetPort: 50051 # 你的gRPC服务监听端口 selector: app: grpc-app
2. 配置GKE Ingress
指定现代版GCE Ingress,关联Cloud Armor策略,并通过BackendConfig定义健康检查规则:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: grpc-ingress annotations: kubernetes.io/ingress.class: gce cloud.google.com/backend-config: '{"default": "grpc-backend-config"}' # 关联已创建的Cloud Armor安全策略 cloud.google.com/security-policy: "your-cloud-armor-policy-name" spec: tls: - hosts: - your-service-domain.com secretName: your-tls-secret # 若在LB终止TLS,需提前将CA证书存入K8s Secret rules: - host: your-service-domain.com http: paths: - path: /* pathType: Prefix backend: service: name: grpc-service port: number: 443
3. 定义BackendConfig配置健康检查
根据你的服务特性二选一:
选项A:复用HTTP(1)根路径健康检查
apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: grpc-backend-config spec: healthCheck: checkIntervalSec: 10 timeoutSec: 5 healthyThreshold: 2 unhealthyThreshold: 3 type: HTTP requestPath: "/" port: 50051 proxyHeader: NONE
选项B:使用gRPC健康协议检查
apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: grpc-backend-config spec: healthCheck: type: GRPC grpcServiceName: "grpc.health.v1.Health" # 你的gRPC健康服务全名 port: 50051 checkIntervalSec: 10 timeoutSec: 5
4. 验证配置
- 等待Ingress创建完成,获取负载均衡器外部IP
- 测试gRPC调用:
grpcurl -d '{}' your-service-domain.com:443 your.grpc.service.Method - 在GCP控制台查看Cloud Armor日志,确认策略规则生效
方案2:基于External TCP代理负载均衡器
若需保持TCP层透明性(比如服务自终止TLS),可采用该方案:
1. 部署NodePort类型的Service
apiVersion: v1 kind: Service metadata: name: grpc-nodeport spec: type: NodePort ports: - port: 443 targetPort: 50051 nodePort: 30007 # 指定固定NodePort,方便后续LB配置 selector: app: grpc-app
2. 在GCP控制台配置TCP代理LB
- 创建TCP代理负载均衡器,后端指向GKE节点池,端口为指定的NodePort
- 配置健康检查:可选HTTP类型(路径
/,端口50051)或TCP类型(仅检查端口连通性) - 将Cloud Armor安全策略关联至LB前端
- 配置静态IP与SSL证书(若需在LB终止TLS,或直接透传TCP流量至服务)
关键注意事项
- TLS终止策略:若在LB终止TLS,需确保LB证书为CA签名且被gRPC客户端信任;若服务自终止TLS,TCP代理LB需配置为流量透传,HTTP(S) LB则需在BackendConfig中启用
sslPolicy配置后端加密。 - 健康检查匹配:GCP LB健康检查规则必须与服务实际响应逻辑一致,你的服务两种健康检查方式均可直接适配。
- Cloud Armor规则:针对gRPC流量配置规则时,可基于HTTP/2请求头、gRPC方法路径等维度设置拦截策略。
内容的提问来源于stack exchange,提问作者Jeff Christy
相关产品推荐
相关产品推荐

