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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:01:01