NGINX - PHP-FPM несколько приложений K8s / Ingress - PullRequest
0 голосов
/ 27 августа 2018

У меня есть приложение k8s с Ingress, которое я хотел бы использовать для обслуживания различных приложений, использующих поддомен.

Это моя полная конфигурация:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: symfony-nginx
  namespace: default
  labels:
    app: symfony-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: symfony-nginx
  template:
    metadata:
      labels:
        app: symfony-nginx
    spec:
      volumes:
        - name: symfony-nginx
          configMap:
            name: symfony-nginx-configmap
      containers:
      - name: symfony-nginx
        image: nginx:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /etc/nginx/conf.d
          name: symfony-nginx
        resources:
          requests:
            memory: 32Mi
            cpu: 10m
          limits:
            memory: 64Mi
            cpu: 30m
        readinessProbe:
          httpGet:
            path: /nginx-health
            port: 80
          initialDelaySeconds: 15
          timeoutSeconds: 1
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /nginx-health
            port: 80
          initialDelaySeconds: 15
          timeoutSeconds: 1
          periodSeconds: 10
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: symfony-nginx-configmap
  namespace: default
data:
  default.conf: |
      server {
          server_name php-docker.local;
          error_log  /var/log/nginx/error.log;
          access_log /var/log/nginx/access.log;
          root /var/www/html/symfony/public;

          proxy_buffering off;

          location = /nginx-health {
              access_log off;
              return 200 "healthy\n";
          }

          location / {
              try_files $uri /index.php$is_args$args;
          }

          location ~ \.php {
              fastcgi_split_path_info ^(.+\.php)(/.+)$;
              fastcgi_pass symfony:9000;
              include fastcgi_params;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              fastcgi_param DOCUMENT_ROOT $document_root;
              internal;
          }
          location ~ \.php$ {
                  return 404;
          }
      }
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: symfony-nginx-hpa
  namespace: default
  labels:
    app: symfony-nginx
spec:
  scaleTargetRef:
    kind: Deployment
    name: symfony-nginx
    apiVersion: apps/v1
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 70
---
apiVersion: v1
kind: Service
metadata:
  name: symfony-nginx-np
  namespace: default
  labels:
    app: symfony-nginx
spec:
  ports:
  - protocol: TCP
    port: 80
  selector:
    app: symfony-nginx
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: symfony-nginx-ingress
spec:
  rules:
  - http:
      paths:
      - path: /symfony
        backend:
          serviceName: symfony-nginx-np
          servicePort: 80

И я получаю только 'Не найдено ни одного маршрута для "GET / symfony"' , потому что uri, поступающий в php-fpm, поддерживает префикс "symfony".

Как я могу заставить NGINX отправить php-fpm только часть uri после 'symfony' ??

[UPDATE]

Может быть, это проблема приложения Symfony, потому что я получаю ответ index.php на http://mydomanin.com/symfony с 'Не найден маршрут для "GET / symfony"' ? Или это ответственность NGINX?

Спасибо, с уважением

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

В конце концов я нашел решение.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: symfony-nginx-ingress
spec:
  rules:
  - http:
      paths:
      - path: /symfony
        backend:
          serviceName: symfony-nginx-np
          servicePort: 80

эта конфигурация Ingress соответствует только маршруту / symfony, поэтому для ее завершения необходимо также добавить / symfony / * ... На мой взгляд, это не очень элегантно ...

0 голосов
/ 28 августа 2018

Лучшим решением было бы установить префикс /symphony для всех маршрутов в самой симфонии.

Другой способ - использовать rewrite в nginx:

rewrite ^/symphony/(.*)$ /$1 last;

Но будьте осторожны с последствиями! Symphony вернет URL изображения с «/myImage.jpg», то же самое для js / css / ... Ссылка будет «» и т. Д., Эти страницы не будут сопоставлены с вашим приложением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...