Ingress выставляет сервис с типом clusterIP - PullRequest
1 голос
/ 05 февраля 2020

Можно ли предоставить сервис путем входа с типом ClusterIP?

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-service
  ports:
  - name: my-service-port
    port: 4001
    targetPort: 4001
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: my.example.com
      http:
        paths:
        - path: /my-service
          backend:
            serviceName: my-service
            servicePort: 4001

Я знаю, что сервис может быть предоставлен с типом NodePort, но это может стоить еще одного соединения NAT, если кто-то может показать мне, какой самый быстрый способ обнаружить внутренний сервис из мира inte rnet в облаке.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Нет, clusterIP доступен только внутри кластера. Ingress - это, по сути, просто набор правил пересылки уровня 7, он не отвечает требованиям уровня 4, заключающимся в том, что внутренние компоненты вашего кластера подвергаются воздействию внешнего мира. Требуется по крайней мере 1 шаг NAT.

Чтобы Ingress работал, вам необходим хотя бы один задействованный сервис, который предоставляет внешнюю нагрузку, например, nodePort или loadBalancer. Ваш входной контроллер и инфраструктура вашего кластера определят, какую из двух служб вам нужно будет использовать.

В случае Nginx входа вам потребуется один сервис LoadBalancer, который будет использовать вход для преодоления трафика c снаружи кластера внутри него. После этого вы можете использовать кластер IP-сервисов для каждой из ваших рабочих нагрузок.

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

0 голосов
/ 05 февраля 2020

Короче говоря: ДА

Теперь к сложному ответу ...

Прежде всего, давайте посмотрим на то, что официальная документация гласит:

Ingress предоставляет маршруты HTTP и HTTPS извне кластера для служб внутри кластера.
[...]
Контроллер Ingress Ответственный за выполнение входного, обычно с балансировщиком нагрузки ...

Что сбивает с толку здесь, так это термин Балансировщик нагрузки . В приведенном выше определении речь идет о classi c и хорошо известном в веб-балансировщике нагрузки.
Этот не имеет ничего общего с kubernetes!

Итак, вернемся к определение, чтобы использовать Ingress и заставить его работать, нам нужен ресурс kubernetes под названием IngressController. И этот ресурс оказался балансировщиком нагрузки! Вот и все.

Однако вы должны иметь в виду, что существует разница между балансировщиком нагрузки во внешнем мире и сервисом kubernetes типа type:LoadBalancer.

Итак, в итоге (и для того, чтобы перенаправить трафик c из внешнего мира в вашу службу kIs clusterIp) :

  • Делаете ли вы нужен балансировщик нагрузки, чтобы ваши kind:Ingress работали? Да, это ресурс kind:IngressController kubernetes.
  • Вам нужен сервис kubernetes type:LoadBalancer или type:NodePort, чтобы ваши kind:Ingress работали? Определенно нет ! А сервис type:ClusterIP работает просто отлично!
...