You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无公网IP的本地Kubernetes集群部署Knative Serving后无法访问服务求助

无公网IP的本地Kubernetes集群部署Knative Serving后无法访问服务求助

Hi Waqar,我看到你在无公网IP的本地K8s集群上部署Knative Serving后遇到了服务访问的问题,结合你的集群配置和操作步骤,我给你几个可行的解决思路:

先理清核心问题

你看到的服务URL http://fibonacci-single.knative-server-serverless.svc.cluster.local 是Knative生成的集群内部域名,这个域名只能在Kubernetes集群内部被解析和访问,所以直接从集群外(比如你的本地电脑)访问肯定会失败,接下来的方案都是围绕打通集群内外的访问路径来的。


方案1:集群内部直接验证服务可用性(最快方式)

如果只是想确认服务本身是否正常运行,最简单的方式是在集群内部的节点或者容器里访问:

  • 在任意集群节点上执行:
    curl http://fibonacci-single.knative-serverless.svc.cluster.local
    
  • 或者临时启动一个测试容器,进入后访问:
    kubectl run -it --rm --image=curlimages/curl curl-test -n knative-serverless
    # 进入容器后执行
    curl http://fibonacci-single.knative-serverless.svc.cluster.local
    
    如果能正常返回结果,说明服务本身没问题,只是外部访问的路径没打通。

方案2:用kubectl端口转发直接映射到本地

这是本地开发最常用的快捷方式,不需要额外配置:

  1. 先找到你之前创建的Knative私有ClusterIP服务:
    kubectl get svc -n knative-serverless
    
    你应该能看到类似fibonacci-single-private的服务,类型为ClusterIP。
  2. 执行端口转发命令,把集群内服务的80端口映射到本地的8080端口:
    kubectl port-forward svc/fibonacci-single-private 8080:80 -n knative-serverless
    
  3. 然后在你的本地电脑上访问http://localhost:8080就能调用服务了。

方案3:配置本地Hosts+端口转发,用原域名访问

如果想保留服务的域名访问方式,可以这么做:

  1. 先获取私有服务的ClusterIP:
    kubectl get svc fibonacci-single-private -n knative-serverless -o jsonpath='{.spec.clusterIP}'
    
  2. 打开本地电脑的hosts文件(Windows路径:C:\Windows\System32\drivers\etc\hosts;Mac/Linux路径:/etc/hosts),添加一条记录:
    192.168.x.x  fibonacci-single.knative-serverless.svc.cluster.local
    
    192.168.x.x替换成你刚才获取到的ClusterIP。
  3. 同样执行端口转发命令:
    kubectl port-forward svc/fibonacci-single-private 8080:80 -n knative-serverless
    
  4. 现在你可以用http://fibonacci-single.knative-serverless.svc.cluster.local:8080在本地访问服务了。

方案4:使用Knative Local Gateway(推荐长期本地开发场景)

Knative专门提供了Local Gateway组件,针对无公网IP的本地集群场景做了优化,步骤如下:

  1. 从Knative官方发布渠道获取对应v1.13版本的serving-local-gateway.yaml配置文件,然后执行安装:
    kubectl apply -f serving-local-gateway.yaml
    
  2. 配置Knative Serving启用Local Gateway:
    kubectl patch configmap/config-network \
      -n knative-serving \
      --type merge \
      -p '{"data":{"local-gateway":"knative-serving/local-gateway"}}'
    
  3. 给你的Knative服务添加注解,指定使用Local Gateway:
    kubectl patch kservice fibonacci-single -n knative-serverless \
      --type merge \
      -p '{"metadata":{"annotations":{"networking.knative.dev/local-gateway":"true"}}}'
    
  4. 端口转发Local Gateway的服务:
    kubectl port-forward svc/local-gateway 8080:80 -n knative-serving
    
  5. 最后通过指定Host头在本地访问:
    curl -H "Host: fibonacci-single.knative-serverless.svc.cluster.local" http://localhost:8080
    
    这种方式的好处是可以同时访问多个Knative服务,只需要修改Host头就行,不用每次都转发不同的服务。

备注:内容来源于stack exchange,提问作者Waqar Alamgir

火山引擎 最新活动