Назад | Перейти на главную страницу

Kubernetes: Как использовать один сервер Nginx для всех моих приложений?

У меня есть две службы: служба Nginx (и развертывание) в port 80 который является ссылкой на входящий контроллер Nginx и службу WordPress (развертывание), которая имеет сервер Nginx в port 5050.

Итак, у меня есть две службы с двумя разными серверами Nginx, и мне нужно создать третью службу с phpmyadmin в нем, и мне придется создать еще один сервер Nginx в другом порту, port 5000.

Вот почему спрашиваю себя, могу ли я иметь одну службу Nginx, связанную со всеми моими приложениями (phpmyadmin, wordpress,…).

Я поискал в Интернете и нашел термины "фронтенд" и "бэкэнд", но не знаю, как их использовать, и есть ли другое решение. Если кто-то может объяснить мне это простым языком.

Все мои док-контейнеры построены самостоятельно.

Изменить: входящий yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
      nginx.ingress.kubernetes.io/rewrite-target: /$1
  namespace: default
  name: ingress-controller
spec:
    backend:
      serviceName: my-nginx
      servicePort: 80

Как я уже упоминал ранее в комментариях, вы должны использовать Ingress для перенаправления запросов. Я предполагаю, что ваши службы и развертывания подключены правильно. В качестве дополнительной информации, если у вас возникнут проблемы с текущим входом, я советую использовать helm для развертывания Nginx.

Ingress также хорошо задокументирован Документы Kubernetes.

Вам необходимо указать paths как в примере ниже. Вся необходимая информация о rewrite может быть найден Вот.

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: test.local
    http:
      paths:
      - path: /wordpress
        backend:
          serviceName: wordpress-service
          servicePort: <your service port>
      - path: /myphpadmin
        backend:
          serviceName: myphpadmin-service
          servicePort: <your service port>
      - path: /anotherservice
        backend:
          serviceName: another-service
          servicePort: <another service port> 

Теперь, если вы, например, $ curl test.local/wordpress вы получите ответ от wordpress служба. Я объяснил то же самое относительно Ingress в эта тема.

В качестве дополнительной информации имейте в виду, что есть еще Ingress типы (Nginx Ingress, GKE Ingress (если вы используете облако GKE) и т. д.)