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

AWS EKS中Knative/KServe gRPC与Nginx Ingress配置故障求助

解决Knative/KServe gRPC服务404/502错误的方案

以下是针对当前配置问题的具体修复步骤:

1. 调整Istio入口网关Service与Gateway配置,添加h2c支持

Istio网关需要明确暴露h2c(明文HTTP/2)端口以处理gRPC请求,修改istio-ingressgateway Service:

apiVersion: v1
kind: Service
metadata:
  annotations:
    alb.ingress.kubernetes.io/healthcheck-path: /healthz/ready
    alb.ingress.kubernetes.io/healthcheck-port: "15021"
  labels:
    app: istio-ingressgateway
    install.operator.istio.io/owning-resource: unknown
    istio: ingressgateway
    istio.io/rev: default
    operator.istio.io/component: IngressGateways
    release: istio
  name: istio-ingressgateway
  namespace: istio-system
spec:
  clusterIP: 172.17.17.19
  clusterIPs:
  - 172.17.17.19
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: status-port
    port: 15021
    protocol: TCP
    targetPort: 15021
  - name: http2
    port: 80
    protocol: TCP
    targetPort: 8080
  - name: https
    port: 443
    protocol: TCP
    targetPort: 8443
  # 新增h2c端口用于gRPC明文传输
  - name: h2c
    port: 9080
    protocol: TCP
    targetPort: 9080
  selector:
    app: istio-ingressgateway
    istio: ingressgateway
  sessionAffinity: None
  type: ClusterIP

同时更新Istio Gateway资源,添加h2c监听规则:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: knative-serving-gateway
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
    tls:
      httpsRedirect: true
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - "*"
    tls:
      mode: SIMPLE
      credentialName: cert-knative-wildcard
  # 新增h2c端口监听
  - port:
      number: 9080
      name: h2c
      protocol: HTTP2
    hosts:
    - "*"

2. 修正gRPC专用Ingress配置

当前gRPC Ingress指向Istio的80端口,需改为新添加的9080端口,并补充必要注解:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: default
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/backend-protocol: GRPC
    nginx.ingress.kubernetes.io/grpc-backend: "true"
    # 保留Host头,确保Knative能正确路由
    nginx.ingress.kubernetes.io/upstream-vhost: "$host"
  name: computing-grpc-ingress
  namespace: istio-system
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - '*.default.knative.company.com'
    secretName: cert-knative-wildcard
  rules:
  - host: '*.default.knative.company.com'
    http:
      paths:
      - backend:
          service:
            name: istio-ingressgateway
            port:
              number: 9080
        path: /
        pathType: Prefix

3. 启用Knative Serving的HTTP/2支持

检查并更新Knative Serving的config-network ConfigMap:

kubectl edit configmap config-network -n knative-serving

确保添加或修改以下配置:

data:
  http2-enabled: "true"

4. 优化InferenceService的gRPC标识

为InferenceService添加注解,明确标记为gRPC服务:

apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
  annotations:
    serving.knative.dev/protocol: grpc
    serving.knative.dev/visibility: "cluster-local"
  finalizers:
  - inferenceservice.finalizers
  name: triton-test
  namespace: default
spec:
  predictor:
    model:
      args:
      - --model-control-mode=poll
      - --repository-poll-secs=5
      - --allow-grpc=true
      - --grpc-port=9000
      - --log-verbose=0
      env:
      - name: CUDA_VISIBLE_DEVICES
        value: "0"
      - name: S3_DATA_PATH
        value: s3://mymodeldata/
      - name: S3_PARAMS
        value: --region us-east-2 --no-sign-request
      image: XXXXXXX.dkr.ecr.us-east-2.amazonaws.com/ml:mytriton
      modelFormat:
        name: triton
      name: kserve-container
      ports:
      - containerPort: 9000
        name: h2c
        protocol: TCP
      protocolVersion: v2
      resources:
        limits:
          cpu: "2"
          memory: 8Gi
          nvidia.com/gpu: "1"
        requests:
          cpu: "2"
          memory: 8Gi
          nvidia.com/gpu: "1"
      storageUri: s3://mymodeldata/
      volumeMounts:
      - mountPath: /dev/shm
        name: dshm
    nodeSelector:
      DedicatedFor: GPU
    volumes:
    - emptyDir:
        medium: Memory
        sizeLimit: 2Gi
      name: dshm

5. 测试验证

应用所有配置后,使用gRPC客户端测试服务连通性:

# 替换为实际模型名与域名
grpcurl -d '{"model_name": "your-model", "inputs": [...]}' triton-test.default.knative.company.com:443 inference.GRPCInferenceService/ModelInfer

# 测试服务反射
grpcurl triton-test.default.knative.company.com:443 list

内容的提问来源于stack exchange,提问作者dmitrii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:31:47