Я использую Google Kubernetes Engine для размещения простого бэкэнда Express API в контейнере узлов и внешнего интерфейса React в контейнере Nginx.
Локальный запуск интерфейса в режиме разработки с npm start
отлично подходит для тестирования, все ресурсы загружаются надежно.Однако при развертывании моего внешнего интерфейса в моем кластере я сталкиваюсь с периодически возникающими проблемами с подключением.
И бэкэнд, и внешний интерфейс выставляются службой LoadBalancer, предоставляя 8080 для внутреннего интерфейса и 80 для внешнего интерфейса, оба на одном и том жеСтатический IP.
Когда я перехожу на мой статически обслуживаемый сайт, иногда каждый ресурс загружается нормально, и мое приложение работает, но иногда определенные ресурсы (каждый раз разные и кажущиеся произвольными) не загружаются из-за ошибки при отказе соединения.Иногда даже root /
или /index.html
терпит неудачу из-за сетевой ошибки.
Я пытался увеличить доступные ресурсы для моих узлов, плюс несколько nginx.conf
конфигураций.Кроме того, я попытался удалить и воссоздать мой кластер, играя с кэшированием файлов (что помогает, но только маскирует основную проблему) и используя сжатие gzip для уменьшения размера передаваемых ресурсов.Я проверил все журналы из nginx или любых сборок контейнера
Ниже приведены мои Dockerfile
и nginx.conf
, я также могу включить свои YAML для kubernetes для front, back и службы LoadBalancer, если это может помочь.
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
Спасибо за любые идеимогу предложить!