Я перемещаю приложение PHP в Kubernetes и запускаю «Bad Gateway» после выполнения некоторых действий.
Я думаю, что ошибка связана с одной из двух вещей:
- Программа PHP отправляет
GET
на http://192.168.39.129/admin/a_merge_xls_db.php?tmp_tbl=_imp_companies_20200329_160813
- Или из самой загрузки
Я сомневаюсь, что это последний, потому что это Файл Excel всего 14kb.
У пользователя есть шаблон Excel для импорта новых учетных записей. Они go на административный портал /admin
, выбирают для импорта, он анализирует файл Excel и импортирует в Postgres.
Несмотря на эту ошибку, данные попадают в базу данных. После успешного импорта GET
отправляется на a_merge_xls_db.php?tmp_tbl=_imp_companies_20200329_160813
. Вот когда через 7 секунд появляется «Плохой шлюз».
Похоже, это может быть проблемой в моих ingress.yaml
для ingress-nginx
и обработки ?=_
или чего-то еще. Я попробовал несколько вещей, но все еще не смог решить проблему.
Вот что у меня есть в ingress.yaml
:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/add-base-url: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/proxy-body-size: 500mb
name: ingress-service
namespace: default
spec:
rules:
- http:
paths:
- path: /?(.*)
backend:
serviceName: client-cluster-ip-service-dev
servicePort: 3000
- path: /admin/?(.*)
backend:
serviceName: admin-cluster-ip-service-dev
servicePort: 4000
- path: /api/?(.*)
backend:
serviceName: api-cluster-ip-service-dev
servicePort: 5000
Есть предложения?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ 3/30/20
Я включаю Dockerfile.dev
и admin.yaml
, поскольку у меня все еще есть проблемы:
# Dockerfile.dev
FROM php:7.3-fpm
EXPOSE 4000
RUN apt-get update \
&& apt-get install -y libpq-dev zlib1g-dev libzip-dev \
&& docker-php-ext-install pgsql zip
COPY . /app
WORKDIR /app/src
CMD ["php", "-S", "0.0.0.0:4000"]
# admin.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: admin-deployment-dev
spec:
replicas: 1
selector:
matchLabels:
component: admin
template:
metadata:
labels:
component: admin
spec:
containers:
- name: admin
image: testappacr.azurecr.io/test-app-admin
ports:
- containerPort: 4000
env:
- name: PGUSER
valueFrom:
secretKeyRef:
name: test-app-dev-secrets
key: PGUSER
- name: PGHOST
value: postgres-cluster-ip-service-dev
- name: PGPORT
value: "1423"
- name: PGDATABASE
valueFrom:
secretKeyRef:
name: test-app-dev-secrets
key: PGDATABASE
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: test-app-dev-secrets
key: PGPASSWORD
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: test-app-dev-secrets
key: SECRET_KEY
- name: SENDGRID_API_KEY
valueFrom:
secretKeyRef:
name: test-app-dev-secrets
key: SENDGRID_API_KEY
- name: DOMAIN
valueFrom:
secretKeyRef:
name: test-app-dev-secrets
key: DOMAIN
- name: DEBUG
valueFrom:
secretKeyRef:
name: test-app-dev-secrets
key: DEBUG
volumeMounts:
- mountPath: "/docs/"
name: file-storage
volumes:
- name: file-storage
persistentVolumeClaim:
claimName: file-storage
---
apiVersion: v1
kind: Service
metadata:
name: admin-cluster-ip-service-dev
spec:
type: ClusterIP
selector:
component: admin
ports:
- port: 4000
targetPort: 4000
Если у меня просто есть - path: /admin
, у меня есть проблема, когда активы не обслуживаются. .css
и .js
возвращаются как 200
, но к приложению ничего не применяется. Если я перехожу к URL-адресу ресурса, например, http://192.168.39.129/admin/css/portal.css
, он просто показывает страницу, которую вы получаете, когда вы go - /admin
.
Эта проблема решается путем возврата обратно к - path: /admin/?(.*)
, но потом я сталкиваюсь с проблемой, о которой я поначалу писал.
Большую часть утра я играл с различными регулярными выражениями, но все же получаю те же результаты, когда дело доходит до "Bad Domain".
Скорее всего, я что-то упускаю из виду, изучая Kubernetes. Похоже, что это должно работать с учетом предложения Coderanger, а также этой проблемы, которая повторяет одно и то же:
https://github.com/kubernetes/ingress-nginx/issues/3380