Невозможно использовать HTTP с изображением php в Kubernetes - PullRequest
0 голосов
/ 31 октября 2019

В настоящее время я занимаюсь докеризацией приложения Laravel и интеграцией его с Kubernetes. Я не очень разбираюсь в php, поэтому я мог упустить что-то очевидное. Мне удалось получить доступ к приложению через http через браузер, который запускает его через docker.

Но по какой-то причине, когда я получаю к нему доступ через мой кластер Kubernetes, независимо от того, если я набираю URL-адрес вручную, он перенаправляет меня на httpsверсия URL. И это приводит к нескольким Mixed Content: The page at '<URL>' was loaded over HTTPS, but requested an insecure script '<URL>' ошибкам.

Я попытался настроить Apache для использования самозаверяющего SSL, но мне не удалось заставить его работать, и кластер действительно работает на http с приложениями Angularв любом случае.

Мои файлы конфигурации Dockerfile, Kubernetes и файлы apache.conf выглядят так:

(обратите внимание, что я убрал значения env для безопасности и краткости)

Dockerfile

FROM php:7.2-apache
ENV APP_ENV=prod
ENV APACHE_DOCUMENT_ROOT /var/www/html

RUN docker-php-ext-install pdo pdo_mysql
RUN a2enmod rewrite
COPY ./apache.conf /etc/apache2/sites-available/000-default.conf
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"

WORKDIR /var/www/html/my-app
COPY . .
RUN apt-get update && apt-get install -y git zip unzip
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/bin --filename=composer
RUN /bin/composer install

apache.conf

<VirtualHost *:80>
    RewriteEngine On
    DocumentRoot ${APACHE_DOCUMENT_ROOT}

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /my-app "/var/www/html/my-app/public"
    <Directory "/var/www/html/my-app">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: in-check
        image: registry-url:5000/my-app
        ports:
          - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-app-cluster-ip
spec:
  type: ClusterIP
  selector:
    app: my-app
  ports:
  - port: 8082
    targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-app-ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /my-app/?(.*)
            backend:
              serviceName: my-app-cluster-ip
              servicePort: 8082

Любая идея, что может быть причиной этой проблемы?

Любая и вся помощь приветствуется.

Обновление: кажется, загружается правильно, используя http на моемКластер EKS, но все равно приводит к вышеприведенным ошибкам на моей копии minikube.

Редактировать: вот ссылка на конфигурацию контроллера Ingress. использование.

1 Ответ

1 голос
/ 01 ноября 2019

Так что мне не удалось заставить приложение работать на HTTP на моей локальной копии minikube, но после совета @Eduardo Baitello я изменил относительные пути всех ресурсов на полные URL-адреса с включенным протоколом HTTPS.

Это не идеально, так как при изменении имени домена или IP-адреса мне придется вручную обновить все URL ресурсов, но это единственный обходной путь, который я могу найти прямо сейчас.

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