如何解决在 docker 文件中添加 Nginx 的健康检查
我有一个在本地运行的 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
解决方法
首先 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" "-"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。