Как реализовать несколько сервисов в одном входном контроллере? Один, который они дали в документах, не понятен - PullRequest
0 голосов
/ 24 апреля 2019

Я создал службу, и каждая служба создает новый балансировщик нагрузки, я не хочу создавать новый балансировщик нагрузки для каждой службы.Для этого я нашел решение для входного контроллера, но этого не происходит.

Ответы [ 3 ]

1 голос
/ 24 апреля 2019
 apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress
      annotations:
        kubernetes.io/ingress.class: "nginx"
        certmanager.k8s.io/cluster-issuer: wordpress-prod
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      tls:
      - hosts:
        - test.test.com
        secretName: prod
      rules:
      - host: test.test.com
        http:
          paths:
          - path: /service-1
            backend:
              serviceName: service-1
              servicePort: 80
          - path: /service-2
            backend:
              serviceName: service-2
              servicePort: 5000

Предоставление доступа к документации для доступа к нескольким сервисам, которые можно перенаправить на мультисервис.

С его помощью вы можете получить доступ к таким сервисам, как

https://test.test.com/service-1

https://test.test.com/service-2

1 голос
/ 24 апреля 2019

Я постараюсь описать нужные вам объекты просто словами.

Вам не нужно создавать балансировщик нагрузки для каждого сервиса.Когда вы используете входной контроллер (например, nginx), сам входной контроллер будет балансировщиком нагрузки типа.Все остальные ваши сервисы должны быть чем-то типа ClusterIP.

После этого вы можете решить, как связать ваши сервисы ClusterIP с Nginx LoadBalancer: создать вход для каждого сервиса или один вход, который предоставляет каждый сервис на основе некоторого правила(например, пути, как @harsh-manvar показывает в посте выше).

Когда вы говорите «этого не происходит», было бы хорошо, если бы вы могли предоставить подробную информацию о вашей настройке.

ВДля того чтобы входной контроллер Nginx работал, его необходимо определить как тип службы NodePort или LoadBalancer.Примеры, представленные в документации по nginx, используют LoadBalancer.Однако LoadBalancer работает только тогда, когда ваш кластер поддерживает этот объект (это означает, что он работает в большинстве облачных провайдеров, таких как AWS / GCP / Azure / DigitalOcean или в более новых версиях minikube).С другой стороны, NodePort предоставит входной контроллер на узле Kubernetes, где он работает (при использовании minikube это обычно означает своего рода виртуальную машину, которая затем должна быть перенаправлена ​​на порт, чтобы быть доступной).

Для использованиявойти в локальную среду, вы можете заглянуть в миникубе.Все, что вам нужно, это запустить minikube addons enable ingress, и он развернет для вас контроллер nginx.После этого все, что вам нужно сделать, это определить вход, и в зависимости от ваших настроек вам может понадобиться использовать kubectl port-forward для переноса прямого порта 80 на модуле контроллера nginx на локальный порт вашей машины.

0 голосов
/ 24 апреля 2019

Существует различных типов служб : ClusterIP, NodePort, LoadBalancer и ExternalName. Вы можете указать это в spec.type. На самом деле, по умолчанию, когда не указано, это не LoadBalancer, а ClusterIP, поэтому в вашем случае просто оставьте определение type: LoadBalancer и используйте ваше serviceName в качестве бэкэнда в вашем входном ресурсе. Пример:

spec:
  rules:
  - host: your.fully.qualified.host.name
    http:
      paths:
      - backend:
          serviceName: your-internal-service-name
          servicePort: 80
        path: /

Имейте в виду, что для некоторых облачных провайдеров также есть возможность использовать внутренний LoadBalancer без публичного IP-адреса. Это делается путем добавления аннотации к конфигурации сервиса. Для Azure AKS это выглядит так:

metadata:
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"

Для Google GKE аннотация cloud.google.com/load-balancer-type: "Internal"

...