我正在使用Google Kubernetes Engine在节点容器中托管一个简单的Express API后端,在Nginx容器中托管一个React前端。
使用npm start
在开发模式下本地运行前端可以很好地进行测试,所有资源都可以可靠地加载。但是,当我将前端部署到群集时,会遇到间歇性的连接问题。
LoadBalancer服务公开了后端和前端,在同一静态IP上公开了8080(后端)和80(前端)。
当我导航到静态服务的站点时,有时每个资源都可以正常加载并且我的应用程序可以正常工作,但是有时某些资源(每次都不同,看似任意)由于连接拒绝错误而无法加载。有时甚至根/
或/index.html
也由于网络错误而失败。
我尝试增加节点的可用资源,以及一些nginx.conf
配置。另外,我尝试删除并重新创建群集,使用文件缓存进行播放(这有助于但仅掩盖了潜在的问题),并使用gzip压缩来减小传输资源的大小。我已经检查了Nginx或所有容器构建中的所有日志
下面是我的Dockerfile
和nginx.conf
,如果可以的话,我还可以包括用于前台,后台和LoadBalancer服务的kubernetes YAML。
Dockerfile
FROM node:8 as react-build
WORKDIR /app
COPY . .
RUN npm install && npm run-script build
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=react-build /app/build /var/www
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
nginx.conf
worker_processes auto;
error_log stderr;
events {
worker_connections 4000;
use epoll;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log off;
send_timeout 2;
client_body_timeout 10;
keepalive_timeout 30;
keepalive_requests 100000;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
gzip on;
gzip_min_length 10240;
gzip_comp_level 1;
gzip_vary on;
gzip_disable msie6;
gzip_proxied expired no-cache no-store private auth;
gzip_types
text/css
text/javascript
text/xml
text/plain
text/x-component
application/javascript
application/x-javascript
application/json
application/xml
application/rss+xml
application/atom+xml
font/truetype
font/opentype
application/vnd.ms-fontobject
image/svg+xml;
server {
listen 80;
server_name REDACTED;
index index.html index.htm;
root /var/www;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}
# Javascript and CSS files
location ~* \.(?:css|js)$ {
try_files $uri =404;
expires 1y;
access_log off;
add_header Cache-Control "public";
}
}
}
我没有要求的10个声誉,因此很遗憾,我无法嵌入屏幕截图,但是下面链接了屏幕。
如果一切正常加载,它应该看起来与链接的图像相似,所有资源都已下载(我已经缓存以进行测试):
https://i.imgur.com/8lMQlGb.png
但是,通常,一个或多个资源无法加载而连接被拒绝(如您所见,该站点也无法呈现,仅显示白屏):
https://i.imgur.com/Q9oL2BC.png
感谢任何人都可以提供的见解!