Обслуживание статического контента с использованием ядра Asp.net, размещенного в док-контейнере Linux и развернутого в Kubernetes - PullRequest
1 голос
/ 15 октября 2019

Я экспериментирую с API-интерфейсом Asp.net, размещенным в экземпляре AKS. До сих пор все шло отлично. Я настроил вход, и мой API отвечает на запросы. Но теперь мне нужно временно передать статический html-файл из API, чтобы мое имя хоста могло быть проверено службой нагрузочного тестирования. HTML отлично загружается, когда я запускаю локально (через IIS Express или мой локальный экземпляр Docker). Но он просто не загрузится с моего экземпляра AKS k8s. Я не знаю, куда идти.

Вот конфигурация моего приложения ...

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseRouting();
            app.UseStaticFiles();
            app.AddMonitorEndpoint("/heartbeat");
            app.AddPathReturnEndpoint();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

Вот запуск моей программы ...

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args )
            {
            var root = Path.Combine(Environment.CurrentDirectory, "wwwroot");
            Console.WriteLine($"New Web Root path: {root}");
            return WebHost.CreateDefaultBuilder(args)
                .UseWebRoot(root)
                .UseStartup<Startup>();
            }
    }

КакВы можете видеть выше, я пытаюсь заставить Kestrel использовать мою папку с веб-контентом (wwroot). Я думал, что это может все исправить, но это не так.

Наконец, вот мой входной yaml (извлеченный из моего экземпляра k8s) ...

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  creationTimestamp: "2019-10-11T21:58:57Z"
  generation: 6
  labels:
    app.kubernetes.io/instance: falcon-infrastructure
    app.kubernetes.io/managed-by: Tiller
    app.kubernetes.io/name: loader-api
    app.kubernetes.io/version: "1.0"
    helm.sh/chart: loader-api-1.0.0
  name: loader-api
  namespace: falcon
  resourceVersion: "1479507"
  selfLink: /apis/extensions/v1beta1/namespaces/falcon/ingresses/loader-api
  uid: 52eb3832-ec72-11e9-9dc5-de03a35245a0
spec:
  rules:
  - host: localhost
    http:
      paths:
      - backend:
          serviceName: loader-api
          servicePort: http
  - host: << host ommitted >>
    http:
      paths:
      - backend:
          serviceName: loader-api
          servicePort: http
status:
  loadBalancer:
    ingress:
    - {}

Наконец, наконец, вотпример из журналов pod, показывающий, что сердцебиение (маршрут asp.net) успешно выполняется, и запрос статического контента отвечает 404.

?[40m?[32minfo?[39m?[22m?[49m: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://<< host ommitted >>/heartbeat application/json 2
?[40m?[32minfo?[39m?[22m?[49m: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 1699.8789000000002ms 200 application.json
?[40m?[32minfo?[39m?[22m?[49m: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://<< host ommitted >>/loaderio-c45f11b35aa6a575339d918cf887cc52.html text/html 2
?[40m?[32minfo?[39m?[22m?[49m: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 36.2461ms 404

Я в полной растерянности, поэтому я надеюсь, что какая-то добрая душа сможетчтобы помочь мне.

Заранее спасибо!

...