GCP - как обслуживать несколько приложений на балансировщике нагрузки с помощью Ingress? - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь настроить баланс нагрузки на кубернетах на GCP и сейчас застрял. Итак, я следовал этому руководству ( Учебник ), но не могу пройти Шаг 6: (Необязательно) Обслуживание нескольких приложений на балансировщике нагрузки

Я использую простое приложение узла, которое печатает только имя из карты конфигурации. После выполнения каждого шага мои пути не могут быть найдены (404).

Это мой пример развертывания (обе мои службы используют «одно и то же» развертывание, только меняя имена и образ):

kind: Deployment
metadata:
  name: nodetestfoo
  namespace: default
spec:
  selector:
    matchLabels:
      run: nodetestfoo
  template:
    metadata:
      labels:
        run: nodetestfoo
    spec:
      containers:
      - image: gcr.io/e3-dev-227917/nodetestfoo:v4
        imagePullPolicy: IfNotPresent
        name: nodetestfoo
        ports:
        - containerPort: 3333
          protocol: TCP
        envFrom:
          - configMapRef:
              name: env-config
---
apiVersion: v1
kind: Service
metadata:
  name: nodetestfoo
  namespace: default
spec:
  ports:
  - port: 3333
    protocol: TCP
    targetPort: 3333
  selector:
    run: nodetestfoo
  type: NodePort

Это мой вход:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: api-ingress
spec:
  rules:
  - http:
      paths:
      - path: /test
        backend:
          serviceName: nodetest
          servicePort: 3333
      - path: /foo
        backend:
          serviceName: nodetestfoo
          servicePort: 3333

Мой kubectl описывает входящий выход: enter image description here

Ответ на запрос с использованием пути enter image description here

Ответ на запрос без пути (этот внутренний сервер по умолчанию действительно не существует, поэтому я считаю, что это ожидаемое поведение) enter image description here

Что мне сделать, чтобы он заработал? Я как бы потерялся здесь. (очевидно, я новичок в облаке, в начале учебы)

Ответы [ 3 ]

2 голосов
/ 08 мая 2020

Позвольте мне рассказать вам, что вы сделали. Вы получили функциональную конфигурацию, но не успели развернуть балансировщик нагрузки. Обычно для установки работающего балансировщика нагрузки http требуется около 5 минут. Но вы, вероятно, забеспокоились и никогда не позволяли ему полностью настроиться. Итак, просто вернитесь к исходному Ingress, создайте его и ждите. примерно через 5 минут скрутите его.

Вы говорите: «Мне пришлось добавить эту аннотацию ...». Добавив эту аннотацию, вы переключились на другой Ingress Controller (который вам нужно было установить ранее). Nginx Ingress Controller готовится за миллисекунды, так как ему просто нужно обновить nginx файл конфигурации сервера. Также трафик c проходит через балансировщик нагрузки tcp, который тоже очень быстро готовится, к Ingress Controller, который является модулем. Итак, у вас есть балансировщик нагрузки, который готовится примерно за 30 секунд, поэтому кажется, что он работает, а другой - нет.

Я говорю это, потому что вы, кажется, немного запутались о том, что произошло, не потому, что я советую вернуться к GKE Ingress Controller. Вы все еще можете использовать nginx Ingress Controller. Это надежно. Мне лично он нравится больше, чем GKE, по нескольким причинам. Или вы можете получить любой другой. Сейчас существуют десятки контроллеров Ingress.

1 голос
/ 08 мая 2020

Согласно это изменяет вход, как показано ниже

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: api-ingress
spec:
  rules:
  - http:
      paths:
      - path: /test/*
        backend:
          serviceName: nodetest
          servicePort: 3333
      - path: /foo/*
        backend:
          serviceName: nodetestfoo
          servicePort: 3333
0 голосов
/ 08 мая 2020

Итак, оказывается, проект ingress- nginx , предложенный Rexovas в комментариях, действительно помог мне! Мне придется потратить больше времени, чтобы прочитать и понять проект, но после быстрого теста я понял, что он работает нормально!

Мне пришлось добавить его в свои кубернеты и добавить следующие аннотации к моему входу:

annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /

теперь я могу получить доступ к своим различным путям без проблем! : D

В настоящее время я понятия не имею, насколько надежно это решение на самом деле. Просто странно использовать проект «третьей части», чтобы заставить его работать

Я буду обновлять этот пост если возникнут проблемы

...