【问题标题】:Add health check for Nginx in docker file在 docker 文件中添加 Nginx 的健康检查
【发布时间】:2021-04-21 11:32:34
【问题描述】:

我有一个在本地运行的WebAssmebly Blazor 应用程序,我使用 Helm 将它部署到 Azure K8s 集群,

当我检查它抱怨健康检查丢失的日志时,应用程序 pod 不断重启

[21/Apr/2021:11:23:55 +0000] "GET /health/liveness HTTP/1.1" 404 153 "-" "kube-probe/1.17" "-"
2021/04/21 11:23:55 [error] 31#31: *3 open() "/usr/share/nginx/html/health/liveness" failed (2: No such file or directory), client: 10.244.0.1, server: localhost, request: "GET /health/liveness HTTP/1.1", host: "10.244.0.230:80"

由于WebAssmebly Blazor 在客户端运行,因此不需要运行状况。

所以,我尝试在 Nginx 级别编写一些静态健康检查。

这是 docker 文件:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /source

FROM build AS publish
WORKDIR /source/app.CustomerApplication/
RUN dotnet publish -c release

FROM nginx AS runtime

COPY --from=publish /source/app.CustomerApplication/bin/release/netstandard2.1/publish/wwwroot/. /usr/share/nginx/html/.
COPY ./app.CustomerApplication/nginx.conf /etc/nginx/nginx.conf
RUN rm /etc/nginx/conf.d/default.conf

和 Nginx 配置文件:

server {
    location / {
        root /usr/share/nginx/html;
    }

    location //health/liveness {
        return 200 'alive';
        add_header Content-Type text/plain;
    }
}

我不断收到此错误

cust-app       /docker-entrypoint.sh: Configuration complete; ready for start up
cust-app       | 2021/04/20 23:56:16 [emerg] 1#1: unknown directive "server" in /etc/nginx/nginx.conf:1
cust-app       | nginx: [emerg] unknown directive "server" in /etc/nginx/nginx.conf:1

【问题讨论】:

    标签: nginx dockerfile blazor-webassembly kubernetes-health-check health-check


    【解决方案1】:

    首先WebAssmebly Blazor 在客户端运行,因此为了破解 K8s 健康检查,我通过修改 Nginx 配置文件在 Nginx 中的特定路由上创建了静态回复。 为了进行有效的健康检查,我建议使用 Server Blazor 类型,因为它在服务器端运行,因此可以在 startup 类中添加实际的健康检查。

    关于Nginx config文件的发行者,我错了模板,更新到这个

    server {
      #listen                80;
      #root                 /usr/share/nginx;
    
      location / {
          root /usr/share/nginx/html; #sepecify Blazor app route
      }
    
      location /health/liveness {
        #access_log off;
        error_log   off;
        return 200 'ok';
      }
    
      location /health/readiness {
        #access_log off;
        error_log   off;
        return 200 'ok';
      }
    }
    

    Dockerfile 也需要更新:

    FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
    WORKDIR /source
    
    FROM build AS publish
    WORKDIR /source/app.CustomerApplication/
    RUN dotnet publish -c release
    
    FROM nginx AS runtime
    
    COPY --from=publish /source/app.CustomerApplication/bin/release/netstandard2.1/publish/wwwroot/. /usr/share/nginx/html/.
    ADD ./app.CustomerApplication/default.conf /etc/nginx/conf.d/default.conf
    

    更新 Nginx 后的 K8s 健康检查日志:

    10.244.0.1 - - [22/Apr/2021:07:15:43 +0000] "GET /health/liveness HTTP/1.1" 200 2 "-" "kube-probe/1.17" "-"
    10.244.0.1 - - [22/Apr/2021:07:15:58 +0000] "GET /health/liveness HTTP/1.1" 200 2 "-" "kube-probe/1.17" "-"
    

    【讨论】:

      猜你喜欢
      • 2020-09-19
      • 1970-01-01
      • 2021-04-20
      • 2019-05-01
      • 1970-01-01
      • 2018-06-14
      • 2022-06-13
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多