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

Kong外部服务路由匹配失败:Minikube环境请求报错no Route matched

摘要

严格按照Kong官方External Service教程步骤,在本地Minikube Kubernetes集群部署Kong Gateway后,向http://localhost/httpbin/anything发送HTTP请求时,收到“no Route matched with those values”错误。请问教程是否过时或缺失步骤?

详细说明

Kong部署步骤

在本地Minikube集群中部署Kong Gateway,操作如下:

minikube start --driver=docker
# 在另一个终端窗口/后台进程执行
minikube tunnel

安装Gateway API CRDs:

kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/standard-install.yaml
echo "
---
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
 name: kong
 annotations:
   konghq.com/gatewayclass-unmanaged: 'true'

spec:
 controllerName: konghq.com/kic-gateway-controller
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
 name: kong
spec:
 gatewayClassName: kong
 listeners:
 - name: proxy
   port: 80
   protocol: HTTP
" | kubectl apply -f -

通过Helm安装Kong:

helm repo add kong https://charts.konghq.com
helm repo update
helm install kong kong/ingress -n kong --create-namespace 

测试连通性:

export PROXY_IP=$(kubectl get svc --namespace kong kong-gateway-proxy -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo $PROXY_IP
curl -i $PROXY_IP

外部服务配置

将Service与HTTPRoute合并到同一个YAML文件中:

---
# Service
kind: Service
apiVersion: v1
metadata:
  name: proxy-to-httpbin
spec:
  ports:
  - protocol: TCP
    port: 80
  type: ExternalName
  externalName: httpbin.org

---
# Route /httpbin
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: proxy-from-k8s-to-httpbin
  annotations:
    konghq.com/strip-path: 'true'
spec:
  parentRefs:
  - name: kong
  rules:
  - matches:
    - path:
        type: 
        value: /httpbin
    backendRefs:
    - name: proxy-to-httpbin
      kind: Service
      port: 80

应用该配置:

$ kubectl apply -f ./external-service.yaml
service/proxy-to-httpbin created
httproute.gateway.networking.k8s.io/proxy-from-k8s-to-httpbin created

执行结果:

$ kubectl get services
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
proxy-to-httpbin   ExternalName   <none>          httpbin.org   80/TCP                       8m1s

$ kubectl get httproutes
NAME                        HOSTNAMES   AGE
proxy-from-k8s-to-httpbin               8m51s

问题现象

教程说明完成上述步骤后,测试服务时应得到与httpbin.org/anything类似的响应。但向gateway-proxy/httpbin/anything发送请求时,收到路由匹配错误:

$ curl -s -i $PROXY_IP/httpbin/anything
HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8
Content-Length: 52
Connection: keep-alive
Date: Wed, 15 Nov 2023 15:58:39 GMT
X-Kong-Response-Latency: 0
Server: kong/3.4.2
X-Kong-Upstream-Latency: 9
X-Kong-Proxy-Latency: 1
Via: kong/3.4.2

{
  "message":"no Route matched with those values"
}

求助问题

如何配置才能让Kong Gateway正确将HTTP请求转发至外部服务?

更新说明

使用相同配置在AKS上部署Kong后,外部服务httpbin可正常工作:

curl -s -i 4.232.X.X/httpbin/anything
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 480
Connection: keep-alive
X-Cache-Key: c48fe84b97bba1516dd96c93604fc907de95cf449284992594d1325998236ffb
X-Cache-Status: Bypass
Date: Fri, 01 Dec 2023 10:22:10 GMT
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
X-Kong-Upstream-Latency: 504
X-Kong-Proxy-Latency: 1
Via: kong/3.4.2

{
  "args": {},
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Host": "4.232.X.X",
    "User-Agent": "curl/8.2.1",
    "X-Amzn-Trace-Id": "Root=1-6569b3d1-7a71e89914522ebe73d9d548",
    "X-Forwarded-Host": "4.232.X.X",
    "X-Forwarded-Path": "/httpbin/anything",
    "X-Forwarded-Prefix": "/httpbin/"
  },
  "json": null,
  "method": "GET",
  "origin": "10.224.0.4, 4.232.X.Y",
  "url": "http://4.232.X.X/anything"
}

推测该问题可能与Minikube环境有关。


解决方案

针对Minikube环境下的路由匹配问题,可通过以下步骤修复:

1. 补全HTTPRoute的Path匹配类型

Gateway API v1版本要求明确指定路径匹配类型,你的HTTPRoute配置中path.type字段为空,这会导致Kong无法正确识别路由规则。修改HTTPRoute的path部分为:

matches:
- path:
    type: Prefix
    value: /httpbin

Prefix类型会匹配所有以/httpbin开头的请求,包括/httpbin/anything这类子路径。

2. 明确指定Gateway的Namespace

你通过Helm将Kong安装在kong命名空间,但HTTPRoute默认创建在default命名空间,parentRefs中未指定命名空间可能导致路由无法关联到正确的Gateway。修改parentRefs部分:

parentRefs:
- name: kong
  namespace: kong

3. 验证Minikube Tunnel状态

确保minikube tunnel进程持续运行,它负责将Minikube的负载均衡服务暴露到本地网络。可以通过以下命令检查Gateway的负载均衡IP是否正常:

kubectl get gateway kong -n kong

确认ADDRESS字段有有效IP地址,且与你导出的PROXY_IP一致。

4. 重新应用配置

修改YAML文件后,重新应用配置:

kubectl apply -f ./external-service.yaml

等待几秒让Kong同步路由规则,再次测试请求:

curl -i $PROXY_IP/httpbin/anything

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:39:50