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

在MacOS主机的Multipass+MicroK8S环境部署KNative服务失败求助

问题排查:MicroK8S部署KNative创建服务时Webhook连接失败

在MacOS主机的Multipass(采用hyperkit虚拟化方案)中部署MicroK8S+KNative,已启用DNS插件、使用metallb作为Ingress控制器,尝试创建KNative服务时出现以下错误:

ubuntu@uncommon-javelin:~/sandbox/sessions/serverless_k8s/yaml$ kn service create nginx --image nginx --port 80
Error: Internal error occurred: failed calling webhook "webhook.serving.knative.dev": failed to call webhook: Post "https://webhook.knative-serving.svc:443/defaulting?timeout=10s": dial tcp 10.152.183.167:443: connect: connection refused
Run 'kn --help' for usage

ping报错中的IP地址10.152.183.167超时,推测该IP存在访问限制或未正确绑定服务,以下是相关配置文件:

相关配置文件

ingress-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: ingress
  namespace: ingress
spec:
  selector:
    name: nginx-ingress-microk8s
  type: LoadBalancer
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
    - name: https
      protocol: TCP
      port: 443
      targetPort: 443

metallb测试服务(test-service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: test-service
  annotations:
    metallb.univers.tf/address-pool: custom-addresspool
spec:
  selector:
    name: nginx
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

metallb地址池(address-pool.yaml)

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: custom-addresspool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.1.1-192.168.1.100

排查步骤

  1. 检查KNative Serving组件状态
    运行命令查看knative-serving命名空间下的Pod是否正常启动:

    kubectl get pods -n knative-serving
    

    如果webhook相关Pod处于Pending、CrashLoopBackOff状态,优先修复Pod异常(比如镜像拉取失败、资源配额不足)。

  2. 验证Webhook Service的合法性
    检查webhook服务是否存在:

    kubectl get svc webhook -n knative-serving
    

    确认输出的ClusterIP是否为报错中的10.152.183.167,如果服务不存在,需重新部署KNative Serving组件。

  3. 测试集群内部DNS解析
    确认CoreDNS组件正常运行:

    kubectl get pods -n kube-system -l k8s-app=kube-dns
    

    在临时Pod中测试webhook服务的DNS解析:

    kubectl run -it --rm --image=busybox:1.28 dns-test -- nslookup webhook.knative-serving.svc.cluster.local
    

    如果解析失败,检查MicroK8S的DNS插件状态:microk8s status,未启用则执行microk8s enable dns。

  4. 排查Metallb配置与网络冲突

    • 确认Metallb控制器Pod正常运行:
      kubectl get pods -n metallb-system
      
    • 检查地址池是否被正确识别:
      kubectl describe ipaddresspools.metallb.io custom-addresspool -n metallb-system
      
    • 注意:Multipass的hyperkit默认采用NAT网络,192.168.1.1-192.168.1.100可能与主机局域网IP段冲突,建议改为Multipass虚拟机所在子网(可通过microk8s kubectl get nodes -o wide查看节点IP)。
  5. 确认Ingress控制器适配KNative要求
    KNative需要Ingress控制器支持HTTP/2,检查nginx-ingress的配置:

    kubectl get configmap nginx-config -n ingress -o yaml
    

    若data字段中无http2: "true",添加后重启nginx-ingress Pod:

    kubectl rollout restart deployment nginx-ingress-microk8s -n ingress
    
  6. 验证集群内部网络连通性
    在临时Pod中测试对webhook IP的连通性:

    kubectl run -it --rm --image=busybox:1.28 net-test -- ping 10.152.183.167
    

    如果不通,检查MicroK8S默认CNI(calico)的状态:

    kubectl get pods -n kube-system -l k8s-app=calico-node
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:01:55