#kubernetes-ingress #nginx-reverse-proxy
#кубернетес-вход #nginx-обратный прокси
Вопрос:
Я пытаюсь использовать правила входа в kubernetes для навигации моего трафика к различным микросервисам, разработанным с использованием asp.net ядро (ядро 5). Я протестировал эти микросервисы после развертывания в kubernetes (локальный кластер рабочего стола docker), и они работают должным образом (по крайней мере, пользовательский интерфейс swagger и связанные с ним действия через swagger).
Теперь мне нравится использовать правила входа в kubernetes для навигации по ним. каким-то образом для всех навигаций я получаю ошибку 404 «не найдено». Просто чтобы подтвердить, работают ли правила, я использовал hashicorp/http-echo (с яблоком и бананом), и они идут.
Я чувствую, что что-то не так с тем, как asp.net ядро (динамическая версия), обслуживающее запрос. что-то связанное с asp.net профиль, но я не слишком уверен, что не так.
Вот мои конфигурации (все находится в одном пространстве имен):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: shoppingcart-api-gateway-rules namespace: local-shoppingcart-v1 # annotations: # ingress.kubernetes.io/rewrite-target: / spec: ingressclassName: nginx rules: - host: localhost http: paths: - path: /webapp1 pathType: Prefix backend: service: name: webappsample1-service port: number: 30021 - path: /apple pathType: Prefix backend: service: name: my-apple-service port: number: 30101
вот мой запрос и ответ на завиток
request: curl http://localhost:31242/apple response: apple ## now the asp.net based routing testing..... request: curl http://localhost:31242/webapp1 response: lt;no responsegt; ## with curl -v or curl -i it gives status code 404 Not Found
asp.net файл запуска приложений.json
"WebAppSample1": { "commandName": "Project", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": "true", "applicationUrl": "http:// :5000" lt;lt;--- It was http://localhost:5000 previously. }
В файле startup.cs я также добавил
services.Configurelt;ForwardedHeadersOptionsgt;(options =gt; { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; });
On kubernetes deployment file, I have added environment variable too.
deployment.yaml
spec: containers: - name: webappsample1 image: webappsample1 env: - name: ASPNETCORE_URLS value: http:// :80 - name: ASPNETCORE_ENVIRONMENT value: Development ports: - name: http containerPort: 80
сервис.yaml
spec: type: NodePort selector: app: webappsample1 ports: - protocol: TCP nodePort: 30021 port: 30021 targetPort: http name: http-webappsample1
вручную, тестирование веб-приложения 1 с помощью http://localhost:30021 (Порт узла) и подтвердите, что приложение работает.
наконец, вход (как я использовал контроллер входа nginx) здесь-это служба, которая предоставляет доступ к ней за пределами кластера.
kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller NodePort 10.110.88.166 lt;nonegt; 80:31242/TCP,443:32353/TCP 6d20h ingress-nginx-controller-admission ClusterIP 10.102.222.57 lt;nonegt; 443/TCP 6d20h
Комментарии:
1. попробуйте указать имя входного класса ti в аннотации.
2. нет. никакой разницы. та же ошибка 404.