Изображения на сайте работают локально на Minikube, но не удаленно на GKE - PullRequest
1 голос
/ 01 июля 2019

У меня есть сайт, на котором я недавно написал развертывание для использования kubernetes. При развертывании на моей локальной машине с minikube и просмотре с minikube service srv-website все работает нормально. Однако после развертывания на GKE и экспонирования через Ingress изображения не загружаются. При наведении указателя мыши на путь к изображению в Insepct Element появляется сообщение «Не удалось загрузить изображение».

Я пытался изменить пути к изображениям, но это не устранило проблему.

<img src="./Images/A.png" class="img">

<img src="Images/A.png" class="img">

<img src="/usr/share/nginx/html/Images/A.png" class="img">

Первые два работают локально, а не третий с абсолютным контейнерным путем. Ни один из них не работает в GKE, хотя оба работают под одним и тем же образом.

Вот мое развертывание:

apiVersion: v1
kind: ConfigMap
metadata:
  name: cfg-website
data:
  custom.nginx.conf: |
    server {
      listen 80 default_server;
      listen [::]:80 default_server ipv6only=on;

      root /usr/share/nginx/html;
      index index.html;

      location / {
        try_files $uri $uri/ =404;
      }

      error_page 404 /404.html;
        location = /404.html {
        root /usr/share/nginx/html;
        internal;
      }

      error_page 401 /401.html;
        location = /401.html {
        root /usr/share/nginx/html;
        internal;
      }

      # gzip compression
      gzip_vary on;
      gzip_proxied any;
      gzip_comp_level 6;
      gzip_buffers 16 8k;
      gzip_http_version 1.1;
      gzip_min_length 256;
      gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
      # gzip compression

    }
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dep-website
  labels:
    app: website
spec:
  selector:
    matchLabels:
      app: website
  template:
    metadata:
      labels: 
        app: website
    spec:
      volumes:
      - name: nginx-conf
        configMap:
          name: cfg-website
      containers:
      - name: cnt-website
        image: link/to/registry
        volumeMounts:
        - name: nginx-conf
          mountPath: /etc/nginx/conf.d
          readOnly: true
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: srv-website
  labels:
    app: website
spec:
  type: NodePort
  selector:
    app: website
  ports:
  - port: 8080
    targetPort: 80

Мой вход:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: website-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: website-ingress
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: srv-website
          servicePort: 8080

1 Ответ

0 голосов
/ 02 июля 2019

Проблема была не в путях к изображениям моего сайта, а во входе.Вход только отображал путь «/» к моему веб-сайту, означая, что ссылки на изображения не работалиПутем поменять входной путь на «/ *» он был исправлен, так как теперь разрешено существование путей за пределами «/» на веб-сайте.

Новый вход:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: website-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: website-ingress
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: srv-website
          servicePort: 8080
...