Как сконфигурировать выдачу данных с одного домена на другом в ingress k8s?

Ссылка скопирована
1 ответ

Сейчас ситуация такая:, мне нудно настроить ingress так чтобы результат с адресаhttps://s3.animori.tv/animori/public/robots.txtВыдавался на адресеhttps://animori.tv/robots.txtПо вводным:, на данный момент ingress выглядит вот так

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: path-based-ingress annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/proxy-body-size: "0" nginx.ingress.kubernetes.io/proxy-request-buffering: "off" nginx.ingress.kubernetes.io/proxy-buffering: "off" nginx.ingress.kubernetes.io/proxy-send-timeout: "300" nginx.ingress.kubernetes.io/proxy-read-timeout: "300" nginx.ingress.kubernetes.io/client-body-timeout: "300" nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "1800" nginx.ingress.kubernetes.io/proxy-max-temp-file-size: "0" spec: rules: - host: animori.tv http: paths: - path: /api(/|$)(.*) pathType: ImplementationSpecific backend: service: name: ani-mori-backend-svc port: number: 8088 - path: / pathType: Prefix backend: service: name: ani-mori-frontend-svc port: number: 80 - host: rabbitmq.animori.tv http: paths: - path: / pathType: Prefix backend: service: name: ani-mori-rabbit-mq-sf-svc port: number: 15672 - host: minio.animori.tv http: paths: - path: / pathType: Prefix backend: service: name: ani-mori-minio-sf-svc port: number: 9090 - host: s3.animori.tv http: paths: - path: / pathType: Prefix backend: service: name: ani-mori-minio-sf-svc port: number: 9000 - host: sentry.animori.tv http: paths: - path: / pathType: Prefix backend: service: name: glitchtip-svc port: number: 8000

Я попроверял следующею настройку

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: path-based-ingress annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/proxy-body-size: "0" nginx.ingress.kubernetes.io/proxy-request-buffering: "off" nginx.ingress.kubernetes.io/proxy-buffering: "off" nginx.ingress.kubernetes.io/proxy-send-timeout: "300" nginx.ingress.kubernetes.io/proxy-read-timeout: "300" nginx.ingress.kubernetes.io/client-body-timeout: "300" nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "1800" nginx.ingress.kubernetes.io/proxy-max-temp-file-size: "0" # Для специфических путей используем configuration-snippet nginx.ingress.kubernetes.io/configuration-snippet: | location = /robots.txt { proxy_pass https://s3.animori.tv/ proxy_set_header Host s3.animori.tv; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } spec: rules: - host: animori.tv http: paths: - path: /robots.txt pathType: ImplementationSpecific backend: service: name: ani-mori-minio-sf-svc port: number: 9000 - path: /api(/|$)(.*) pathType: ImplementationSpecific backend: service: name: ani-mori-backend-svc port: number: 8088 - path: / pathType: Prefix backend: service: name: ani-mori-frontend-svc port: number: 80

По вводным: но при попытке перейти поhttps://animori.tv/robots.txtСейчас ситуация такая: мне достраивает следующий маршрутhttps://animori.tv/animori/public/robots.txtСейчас ситуация такая: и выдаёт 404, при попытке курлануть мне выйдет следующее

<html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>openresty</center> </body> </html>
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Анна SEO Ответ

В Kubernetes Ingress не “выдаёт данные с одного домена на другом” сам по себе. Он маршрутизирует HTTP-запросы по host/path к нужному service. Поэтому сначала нужно решить, что именно требуется: проксировать один backend под вторым доменом, сделать редирект, переписать Host-заголовок или отдать один и тот же сервис на двух доменах.

Если нужно, чтобы один сервис открывался на двух доменах, самый простой вариант — указать оба host в Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
spec:
  rules:
    - host: site-a.example.ru
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: app-service
                port:
                  number: 80
    - host: site-b.example.ru
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: app-service
                port:
                  number: 80

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress spec: rules: - host: site-a.example.ru http: paths: - path: / pathType: Prefix backend: service: name: app-service port: number: 80 - host: site-b.example.ru http: paths: - path: / pathType: Prefix backend: service: name: app-service port: number: 80

Если backend ожидает конкретный Host и ломается на другом домене, для nginx ingress можно переопределить upstream host через annotation. Но используйте это осознанно: приложение может генерировать абсолютные ссылки, cookies и canonical под старый домен.

metadata:
  annotations:
    nginx.ingress.kubernetes.io/upstream-vhost: site-a.example.ru

metadata: annotations: nginx.ingress.kubernetes.io/upstream-vhost: site-a.example.ru

Если задача SEO-переезда, лучше не проксировать одинаковый контент на двух доменах, а сделать 301-редирект на основной домен. Иначе получите дубли страниц, проблемы с canonical и cookies.

Также проверьте TLS: для каждого домена нужен сертификат, либо wildcard, либо cert-manager с несколькими hosts в Certificate/Ingress. DNS обоих доменов должен указывать на ingress-controller.

Итог: для одного backend на двух доменах добавьте два host в Ingress. Для переезда делайте редирект. Для приложения, чувствительного к Host, настройте upstream-vhost и проверьте cookies, absolute URLs и canonical.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно