常见问题#

常见问题 - 安装#

删除 AIBrix 失败#

aibrix-architecture-v1
aibrix-architecture-v1

在这种情况下,你只需找到模型适配器,编辑对象,然后删除 finalizer 对。pod 将自动删除。

网关错误消息#

  • 模型不存在

model-error
  • 路由策略不正确

  • 没有就绪的 pod

网关 ReferenceGrant 问题#

当使用 RayClusterFleet 进行多节点推理时(如多节点推理指南所述),通过 Envoy 网关访问模型时可能会遇到 500 错误,而通过端口转发直接访问则正常。

此问题发生的原因是网关(在 aibrix-system 命名空间中)需要显式权限才能访问其他命名空间(例如 default 命名空间)中的服务。要解决此问题,你需要创建一个 ReferenceGrant

apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
  name: allow-aibrix-gateway-to-access-services-route
  namespace: default
spec:
  from:
  - group: gateway.networking.k8s.io
    kind: HTTPRoute
    namespace: aibrix-system
  to:
  - group: ""
    kind: Service

应用此 ReferenceGrant 后,网关应能正确路由请求到你的模型服务。

注意:这通常仅适用于多节点部署。简单的模型部署通常无需此额外配置即可工作。

使用 NodePort 或 ClusterIP 暴露网关 API#

快速入门指南中,模型端点通常使用 kubectl port-forward 或通过 LoadBalancer 服务访问。然而,在某些环境(例如没有外部负载均衡器的本地集群)中,你可能更倾向于使用 NodePort 服务暴露 Envoy 网关,或者依赖默认的 ClusterIP 服务类型。

重要提示: 你不应直接修改 svc/envoy-aibrix-system-aibrix-eg-903790dc 服务,因为它由 EnvoyProxy 控制器管理。相反,请更新 EnvoyProxy 配置以设置服务类型。

选项 1:NodePort(暴露到集群外部)

将规范更新为 NodePort

...
spec:
  provider:
    kubernetes:
      envoyService:
        type: NodePort
      envoyDeployment:
...

应用更改后,网关服务将更新

$ kubectl get svc envoy-aibrix-system-aibrix-eg-903790dc -n envoy-gateway-system
NAME                                     TYPE       CLUSTER-IP        EXTERNAL-IP   PORT(S)        AGE
envoy-aibrix-system-aibrix-eg-903790dc   NodePort   192.168.194.158   <none>        80:32432/TCP   5h21m

然后你可以重新生成模型端点

$ NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}' | awk '{print $1}')
$ NODE_PORT=$(kubectl get svc envoy-aibrix-system-aibrix-eg-903790dc -n envoy-gateway-system -o=jsonpath='{.spec.ports[0].nodePort}')
$ ENDPOINT="${NODE_IP}:${NODE_PORT}"

你的模型端点现在可以通过 NodePort 从集群外部访问。

选项 2:ClusterIP(仅限内部访问)

默认情况下,Envoy 网关服务类型为 ClusterIP

...
spec:
  provider:
    kubernetes:
      envoyService:
        type: ClusterIP
      envoyDeployment:
...

网关服务看起来像这样

$ kubectl get svc envoy-aibrix-system-aibrix-eg-903790dc -n envoy-gateway-system
NAME                                     TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)   AGE
envoy-aibrix-system-aibrix-eg-903790dc   ClusterIP   192.168.194.158   <none>        80/TCP    18h

然后你可以重新生成模型端点(仅在集群内部可访问)

$ CLUSTER_IP=$(kubectl get svc envoy-aibrix-system-aibrix-eg-903790dc -n envoy-gateway-system -o=jsonpath='{.spec.clusterIP}')
$ CLUSTER_PORT=$(kubectl get svc envoy-aibrix-system-aibrix-eg-903790dc -n envoy-gateway-system -o=jsonpath='{.spec.ports[0].port}')
$ ENDPOINT="${CLUSTER_IP}:${CLUSTER_PORT}"

此端点仅在 Kubernetes 集群内部工作(例如,当其他服务与网关内部通信时)。

Envoy Gateway 文档中获取更多配置。