Kubernetes 应用程序网关入口控制器仅适用于根路径/

Kubernetes 应用程序网关入口控制器仅适用于根路径/,kubernetes,kubernetes-ingress,azure-application-gateway,Kubernetes,Kubernetes Ingress,Azure Application Gateway,我已从以下YAML部署了Microsoft的标准aspnet应用程序: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: microservicesapp annotations: kubernetes.io/ingress.class: azure/application-gateway spec: rules: - http: paths: - path: /

我已从以下YAML部署了Microsoft的标准aspnet应用程序:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: microservicesapp
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: aspnetapp
          servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: aspnetapp
spec:
  selector:
    app: aspnetapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
---
apiVersion: v1
kind: Pod
metadata:
  name: aspnetapp
  labels:
    app: aspnetapp
spec:
  containers:
  - image: "mcr.microsoft.com/dotnet/core/samples:aspnetapp"
    name: aspnetapp-image
    ports:
    - containerPort: 80
      protocol: TCP
当我调用与我的AGW资源相关联的公共IP时,一切正常。但是,我想配置入口的路径,使其为
/test
。像这样:

  - http:
      paths:
      - path: /test
        backend:
          serviceName: aspnetapp
          servicePort: 80
当我尝试从集群外部调用端点时,这将导致502坏网关。控制器在上述YAML中部署资源后进行日志记录:

I0918 17:25:16.798265       1 health_probes.go:55] Created default HTTP probe defaultprobe-Http
I0918 17:25:16.798272       1 health_probes.go:56] Created default HTTPS probe defaultprobe-Http
I0918 17:25:16.798279       1 ingress_rules.go:148] Found backend:default/aspnetapp
I0918 17:25:16.798405       1 health_probes.go:70] Created probe pb-default-aspnetapp-80-microservicesapp for ingress default/microservicesapp at service default/aspnetapp
I0918 17:25:16.798613       1 backendhttpsettings.go:190] Created backend http settings bp-default-aspnetapp-80-80-microservicesapp for ingress default/microservicesapp and service default/aspnetapp
I0918 17:25:16.798671       1 backendaddresspools.go:37] Created default backend pool defaultaddresspool
I0918 17:25:16.798698       1 backendaddresspools.go:48] Created backend pool pool-default-aspnetapp-80-bp-80 for service default/aspnetapp
I0918 17:25:16.798709       1 frontend_listeners.go:121] Processing Rules for Ingress: default/microservicesapp
I0918 17:25:16.798828       1 requestroutingrules.go:349] Attached pool pool-default-aspnetapp-80-bp-80 and http setting bp-default-aspnetapp-80-80-microservicesapp to path rule: pr-default-microservicesapp-0
I0918 17:25:16.798861       1 requestroutingrules.go:107] Bound path-based rule: rr-e1903c8aa3446b7b3207aec6d6ecba8a to listener: fl-e1903c8aa3446b7b3207aec6d6ecba8a ([    ], 80) and url path map url-e1903c8aa3446b7b3207aec6d6ecba8a
I0918 17:25:16.808144       1 mutate_app_gateway.go:174] Generated config:
...

设置路径(如
/test
)的正确方法是什么,以便指向该路径的所有流量都指向aspnetapp服务?

添加路径前缀注释
appgw.ingres.kubernetes.io/backend-path-prefix:“/”
在入口资源中。注释告诉应用程序网关创建一个HTTP设置,该设置将为路径
/test
/

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: microservicesapp
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/backend-path-prefix: "/"
spec:
  rules:
  - http:
      paths:
      - path: /test
        backend:
          serviceName: aspnetapp
          servicePort: 80

是的。相同的结果。检查azure应用程序网关入口控制器podsI的日志,并使用日志更新OP。我也尝试了你在我的另一篇文章中建议的方法,但没有成功。@ArghyaSadhu同一个问题只适用于/如果你为多个服务添加了多个路径,如/front等,它就不起作用了@DevOpsGeek在加载时不使用HTML和CSS,因为应用程序配置为仅当请求来自
/
时才能成功响应。这就是应用程序的设计方式。AGIC在这里没有问题。要亲自确认这一点,请使用nginx构建一个定制docker映像,该映像在路径
/test
处提供请求。然后问题中发布的入口配置将起作用。如果您在此处使用了microsoft托管映像,您如何知道应用程序中存在路径
/test
。您是否已从某处确认,当发送路径为
/test
的请求时,应用程序将成功响应。如果是,您可以在这里发布该链接。通常,如果您提供路径/测试和链接,它后面的服务应该在我们输入appgw ip/测试时将请求转发到该服务或它后面的pod。我不明白您为什么要问应用程序配置/测试/测试是否在应用程序网关级别,对吗?请参考下面文档中的应用程序网关ing图像,如果我说错了,请告诉我@vishal.k有什么想法吗?@DevOpsGeek您需要更好地理解应用程序网关的作用以及502错误的含义。您已在appgw中将
/test
配置到所述后端池。现在,appgw将把请求转发到正确的后端,但是如果您的应用程序对这样的路径没有任何响应,那么它将不会返回任何响应,这将导致502。正如我在下面已经说过的,用一个html页面为
/test
构建您自己的简单nginx图像,然后尝试相同的情况,您将了解这里发生了什么。