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

Python Knative func部署gRPC服务遇就绪探针失败问题求助

问题解决:Knative Func部署Python gRPC服务就绪探针失败

核心问题分析

报错显示就绪探针尝试访问http://127.0.0.1:8080/health/readiness但连接拒绝,根源在于:

  • 你的gRPC服务默认监听50051端口,而Knative(含Func)默认期望服务监听8080端口(由$PORT环境变量指定)
  • 即便设置了healthEndpoints: {},Knative仍会生成默认HTTP类型就绪探针,但你的服务未提供HTTP接口

分步解决方案

1. 修改gRPC服务监听端口适配Knative默认配置

更新func.py,让服务优先读取Knative提供的PORT环境变量,默认 fallback到8080:

import os  # 新增导入

# ... 其余代码保持不变 ...

if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)
    parser = argparse.ArgumentParser()
    # 从环境变量获取端口,默认值设为8080
    default_port = int(os.getenv("PORT", 8080))
    parser.add_argument('-p', '--port', type=int, default=default_port)
    args = parser.parse_args()
    serve(args.port)

2. 调整func.yaml配置,明确gRPC协议与端口

更新func.yaml,添加端口环境变量,并配置Knative识别gRPC所需的注解:

specVersion: 0.25.0
name: sample-grpc
namespace: default
runtime: python
registry: registry
image: registry:latest
imageDigest: 12345
buildpacks: []
builder: pack
volumes: []
buildEnvs: []
envs:
  - name: PORT
    value: "8080"  # 指定服务监听端口
annotations:
  networking.knative.dev/protocol: h2c  # 告知Knative使用HTTP/2明文协议(gRPC必需)
options: {}
labels: []
healthEndpoints: {}
created: 2024-04-17T09:20:37.358544819+02:00
invocation:
  format: grpc

3. 确认Procfile配置

你的Procfileweb: python func.py可保持不变,程序会自动读取PORT环境变量。

4. 配置gRPC类型就绪探针(可选但推荐)

若Knative仍默认使用HTTP探针,可通过注解强制切换为gRPC探针,在func.yaml的annotations中添加:

kubernetes.io/probe-readiness: |
  {
    "grpc": {
      "port": 8080
    },
    "initialDelaySeconds": 5,
    "periodSeconds": 10
  }

关于Knative Func的gRPC扩展支持

目前Knative Func官方无专门的gRPC扩展模板,但通过上述配置即可实现gRPC服务部署:

  • 无需替换Knative Serving,只需确保Func生成的Knative Service配置正确识别gRPC协议
  • invocation.format: grpc会告知Func生成适配gRPC的路由规则
  • Kourier网关原生支持gRPC(需确保Kourier版本≥v1.0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:42:42