#kubernetes-ingress #azure-aks #azure-application-gateway
#kubernetes-вход #azure-aks #azure-application-gateway
Вопрос:
У меня настроен AKS с шлюзом приложений Azure в качестве входа.
Я пытаюсь развернуть приложение .net core Angular на пути внутри кластера. Я хотел бы получить доступ к приложению http://<cluster ip>/app1
. .
Мое развертывание kubernetes (включая настройки входа) выглядит следующим образом:
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
В самом приложении Angular я оставил <base href="/" />
index.html
. Тем не менее, я внес изменения в сборку, чтобы теперь ng build --base-href /app1/"
Проблема
Когда это будет развернуто, и я перейду к http://<cluster ip>/app1
нему, он загрузит index.html досье. Однако он возвращает 404 для всех дополнительных сценариев, например, 404 на http://<cluster ip>/app1/main-es2015.9ae13a2658e759db61f5.js
Проблема может быть в том, как я настроил Angular, но просмотр http://<cluster ip>/app1/index.html
возвращает 404, когда я знаю, что к нему можно получить доступ только с помощью /app1/
.
Я считаю, что проблема в том, что шлюз приложений не маршрутизирует запросы должным образом для чего-либо после /app1/
. Как я могу заставить его разрешить прохождение вложенных маршрутов (т.Е. Скриптов)?
Спасибо
Ответ №1:
Теперь это работает. Если я посмотрел на заголовки ответа 404, в нем говорится, что он был от kestrel, поэтому он попал в api ядра dotnet, поэтому его нужно настроить там. Все изменения, которые я внес, были:
Клиент:
- Оставьте базовую ссылку href как
/
, например - Добавьте базовую ссылку href в аргумент сборки, например, ng build —base-href /app1/»
- В
Configure
ofStartup.cs
, добавьтеapp.UsePathBase("/app1");
, что я делаю это вelse
ofenv.IsDevelopment()
.
Шлюз приложений:
- Измените путь для правил на
- path: /app1*
. У меня не было звездочки, поэтому я не маршрутизировал все последующие маршруты.
Ответ №2:
Вы также можете сделать что-то вроде этого
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/*
....
Где вы обновляете форму префикса маршрутизации «/» на «/ api / *» . В частности, эта аннотация
appgw.ingress.kubernetes.io/backend-path-prefix: "/"