Kubernetes php-fpm отсутствует входная конфигурация nginx с мини-кубом - PullRequest
0 голосов
/ 18 марта 2019

Мне не хватает конфигурации kubernetes ingress-nginx, чтобы запустить приложение php-fpm на k8s в minikube.

Файлы конфигурации k8s:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: server-cluster-ip-service
              servicePort: 5000

---
apiVersion: v1
kind: Service
metadata:
  name: server-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: server
  ports:
    - port: 5000
      targetPort: 5000
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      component: server
  template:
    metadata:
      labels:
        component: server
    spec:
      containers:
        - name: server
          image: xxx/phpfpm
          ports:
            - containerPort: 5000
          env:
            - name: APP_ENV
              value: dev
            - name: APP_DEBUG
              value: '1'
            - name: APP_SECRET
              value: 74bd83726749616f29166ef53c5f0557
            - name: MYSQL_HOST
              value: mysql-cluster-ip-service
            - name: MYSQL_ROOT_PASSWORD
              value: root
            - name: MYSQL_DATABASE
              value: db
            - name: MYSQL_DATABASE_TEST
              value: test
            - name: MYSQL_USER
              value: user
            - name: MYSQL_PASSWORD
              value: secret
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: mysql
  ports:
    - port: 3306
      targetPort: 3306
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: mysql
  template:
    metadata:
      labels:
        component: mysql
    spec:
      volumes:
        - name: mysql-storage
          persistentVolumeClaim:
            claimName: database-persistent-volume-claim
      containers:
        - name: mysql
          image: mysql:5.7.22
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mysql-storage
              mountPath: /var/lib/mysql
              subPath: mysql
          env:
            - name: MYSQL_HOST
              value: mysql-cluster-ip-service
            - name: MYSQL_ROOT_PASSWORD
              value: root
            - name: MYSQL_DATABASE
              value: db
            - name: MYSQL_USER
              value: user
            - name: MYSQL_PASSWORD
              value: secret
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: database-persistent-volume-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

Сервер Nginx рабочий файл конфигурации, используемый в образе докера nginx для предыдущей среды разработки докера (nginx находится в docker, в отдельном контейнере от контейнера php):

server {

    listen 443 default_server ssl;

    root   /opt/app/public;
    index  index.php;

    ...

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

    location /healthcheck {
        return 200 'ok';
        add_header Content-Type text/plain;
    }

    error_page 404 /index.php;

    location ~ ^/(index)\.php(/|$) {

        fastcgi_pass php:9000;
        fastcgi_index index.php;

        include fastcgi_params;
    }
}

при доступе к ip миникуба в браузере я получаю 502ошибка.

Я установил ingress-nginx , выполняющий следующие команды (как описано в их руководстве по установке )

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
$ minikube addons enable ingress
$ make dev-env

Я предполагаю, что янужно как-то сопоставить корень (nginx conf) с / opt / app / public и каким-то образом настроить fastcgi_pass в ingress-nginx, который я до сих пор честно говоря немного растерялся из-за того, как все работает вместе.

1 Ответ

1 голос
/ 19 марта 2019

Это может быть одной из следующих проблем. Ваш вход выглядит нормально.

  • Вы хотели запустить контейнер nginx в том же модуле, что и контейнер php?Если у вас запущен nginx в том же модуле, вам придется заменить «php» в вашем fastci_pass на «127.0.0.1».

  • Проверьте журналы вашего модуля, если выполучение connection refused это проблема с вашим php-контейнером, это неправильно отображает порты.Попробуйте сделать port-forward ing на вашем php-модуле и посмотрите, сможете ли вы получить доступ к 5000 через localhost.

  • Я вижу, у вас есть fastcgi_pass на php: 9000, это должно быть 5000?

...