Kubernetes Services Architecture

Я пытаюсь подключить прямой трафик NGINX к различным частям моего приложения через файл конфигурации, но я не могу понять это на всю жизнь. Вот моя текущая настройка:

  http-service (loadbalancer)
  NGINX (port 80)
  website-service (10.27.246.107, port 8000, targetPort 8000, selector 'run: website')
  website (label 'run: website', containerPort 8000)

  NGINX Conf
  upstream website{
    server 10.27.246.107:8000
  }

На данный момент это обычный модуль nginx, использующий containerPort 80.

Я иду об этом правильным путем?

1 ответ

Решение

Лучший способ направить трафик в другую часть вашего приложения - использовать Ingress. В Ingress вы можете описать все ваши пути во все части вашего приложения. Это будет выглядеть так:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /foo
        backend:
          serviceName: website1
          servicePort: 80
      - path: /bar
        backend:
          serviceName: website2
          servicePort: 3368

На самом деле Ingress-контроллер основан на Nginx, но в любом случае вы можете выбрать другой движок, например, HAproxy. Ingress был разработан для использования в Kubernetes и имеет больше возможностей в Kubernetes. Например, ваш сайт вверх по течению должен быть описан как услуга в Kubernetes:

kind: Service
apiVersion: v1
metadata:
  name: website1
spec:
  selector:
    app: python-web-site
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

В любом случае, вы можете направлять трафик по Nginx и показывать его всему миру, но лучше всего использовать Ingress в Kubernetes.

Другие вопросы по тегам