简体   繁体   中英

Allow Azure Application Gateway to route all sub paths in AKS

I have AKS configured with Azure Application Gateway as my ingress.

I am trying to deploy a .net core Angular app to a path within the cluster. I would like to access the app on http://<cluster ip>/app1 .

My kube.netes deployment (including ingress settings) is as follows:

apiVersion: v1
kind: Pod
metadata:
  name: web-app-1
  labels:
    app: web-app-1
spec:
  containers:
  - image: "xxx.azurecr.io/web-app-1:latest"
    name: web-app-1
    imagePullPolicy: Always
    ports:
    - containerPort: 80
      protocol: TCP

---

apiVersion: v1
kind: Service
metadata:
  name: web-app-1
spec:
  selector:
    app: web-app-1
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web-app-1
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: /app1
        backend:
          serviceName: web-app-1
          servicePort: 80

In the Angular app itself, I have left <base href="/" /> in index.html . However, I have amended the build to now be ng build --base-href /app1/"


Issue

When this is deployed and I browse to http://<cluster ip>/app1 then it loads the index.html file. However it returns a 404 for all the additional scripts eg 404 on http://<cluster ip>/app1/main-es2015.9ae13a2658e759db61f5.js

The issue could be with how I've configured Angular, but browsing to http://<cluster ip>/app1/index.html returns a 404 when I know it can be accessed just using /app1/ .

I believe the issue is that Application Gateway is not routing requests properly for anything after /app1/ . How can I get it to allow sub routes through (ie the scripts)?

Thanks

Got this working now. If I looked at the 404 response headers it says it was from kestrel, so was hitting the dotnet core api, so it needs configuring there. All the changes I made were:

Client:

  • Leave the base href as / eg
  • Add the base href to the build argument eg ng build --base-href /app1/"
  • In Configure of Startup.cs , add app.UsePathBase("/app1"); I do this in the else of env.IsDevelopment() .

Application Gateway:

  • Change the path for the rules to - path: /app1* . I didn't have the asterisk so wasn't routing all subsequent routes.

You could also do something like this

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: appgw-ingress
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
    appgw.ingress.kubernetes.io/backend-path-prefix: "/"
spec:
  rules:
  - http:
      paths:
      - path: /api/*
    ....

Where you are updating the routing prefix form "/" to "/api/*". Specifically this annotation

appgw.ingress.kubernetes.io/backend-path-prefix: "/"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM