Kubernetes NGINX -INGRESS Нужна ли запущенная служба NGINX? - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь создать NGINX -INGRESS (сначала локально, затем развернуть в AWS за балансировщиком нагрузки). Однако я новичок в Kubernetes, и я понимаю модель Ingress для NGINX - конфигурации сбивают меня с толку, так как погода должна быть развернута NGINX -INGRESS Service , Вход или Оба

Я работаю с несколькими Flask -Apps I хотелось бы направить по пути (/users, /content и т. д. c.) Мои сервисы называются user-service на port: 8000 (их порт контейнера также составляет 8000)

In это пример Вход определен. Однако, когда я применяю вход (в том же Пространстве имен, что и мой Flask, нет ответа от http://localhost

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-name
  namespace: my-namespace
spec:
  rules:
  - http:
      paths:
      - path: /users
        backend:
          serviceName: users-service 
          servicePort: 8000
      - path: /content
        backend:
          serviceName: content-service 
          servicePort: 8000

Кроме того, глядя на nginx -вход Документы «Развертывание», под Docker для Ma c (которые, как я предполагаю, я могу использовать при использовании Docker на MacOS), они определяют службу следующим образом :

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https

---

Это, кажется, работает для меня (Когда я открываю "localhost", я получаю Nginx "not found", но это служба в другом пространстве имен, чем мои приложения - и нет связь между портом 80/443 и моими сервисными портами.

Для справки приведу одно из моих определений развертывания / сервиса:

---
apiVersion: apps/v1
kind: Deployment
metadata:
    name: users-service
    labels:
        app: users-service
    namespace: example
spec:
    replicas: 1
    selector:
        matchLabels:
            app: users-service
    template:
        metadata:
            labels:
                app: users-service
        spec:
            containers:
                - name: users-service
                  image: users-service:latest
                  imagePullPolicy: Never
                  ports:
                  - containerPort: 8000
---
kind: Service
apiVersion: v1
metadata:
  name: users-service
spec:
  selector:
    app: users-service
  ports:
  - protocol: TCP
port: 8000

Обновление

Я следил за видео для настройки NGINX -Controller + Ingress, здесь результаты, ввод "localhost / users" не работает,

description-ingress:

(base) MacBook-Pro-2018-i9:microservices jordanbaucke$ kubectl describe ingress users-ingress
Name:             users-ingress
Namespace:        default
Address:          
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host        Path  Backends
  ----        ----  --------
  *           
              /users   users-service:8000 (10.1.0.75:8000)
Annotations:  Events:  <none>

users-service:

(base) MacBook-Pro-2018-i9:microservices jordanbaucke$ kubectl describe svc users-service
Name:              users-service
Namespace:         default
Labels:            <none>
Annotations:       Selector:  app=users-service
Type:              ClusterIP
IP:                10.100.213.229
Port:              <unset>  8000/TCP
TargetPort:        8000/TCP
Endpoints:         10.1.0.75:8000
Session Affinity:  None
Events:            <none>

nginx -ingress

(base) MacBook-Pro-2018-i9:microservices jordanbaucke$ kubectl describe svc nginx-ingress
Name:                     nginx-ingress
Namespace:                default
Labels:                   <none>
Annotations:              Selector:  name=nginx-ingress
Type:                     NodePort
IP:                       10.106.167.181
LoadBalancer Ingress:     localhost
Port:                     http  80/TCP
TargetPort:               80/TCP
NodePort:                 http  32710/TCP
Endpoints:                10.1.0.74:80
Port:                     https  443/TCP
TargetPort:               443/TCP
NodePort:                 https  32240/TCP
Endpoints:                10.1.0.74:443
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Теперь, когда я пытаюсь ввести комбинацию NodeIP:NodePort/users, это не ки подключить?

Изнутри моего nginx-ingress модуля звонит:

curl 10.1.0.75:8000 или curl 10.100.213.229:8000 возвращает результаты.

1 Ответ

3 голосов
/ 13 апреля 2020

Для правильной работы nginx или любого другого входа:

  1. Nginx необходимо установить входной контроллер в кластере
  2. Служба типа LoadBalancer или NodePort должна быть создан для предоставления входного контроллера nginx через порты 80 и 443 в том же пространстве имен, в котором развернут входной контроллер nginx. LoadBalancer работает в поддерживаемом облаке publi c (AWS et c). NodePort работает, если работает локально.
  3. Необходимо создать службу типа ClusterIP для модулей рабочей нагрузки в пространстве имен, в котором развернуты модули рабочей нагрузки.
  4. Модули рабочей нагрузки будут доступны через nginx вход, и вам потребуется для создания входного ресурса в том же пространстве имен, что и для службы clusterIP ваших модулей рабочей нагрузки.
  5. Вы будете использовать либо LoadBalancer (в случае, если входной контроллер nginx был выставлен через LoadBalancer), либо NodeIP: NodePort (в случае, если Nginx входной контроллер был выставлен через NodePort) для доступа к вашим блокам рабочей нагрузки.

Так что в этом случае, поскольку docker рабочий стол используется службой типа Loadbalancer (ingress- nginx) для предоставления * Входной контроллер 1031 * не будет работать. Это должно быть типа NodePort. После завершения работы с модулями рабочей нагрузки можно получить доступ через NodeIP:NodePort/users и NodeIP:NodePort/content. NodeIP:NodePort должен также предоставить nginx домашнюю страницу.

...