Распределение нагрузки: все HTTP-запросы перенаправляются на один модуль в кластере k8.

Я создал очень простое приложение для весенней загрузки только с одной службой REST. Это приложение преобразуется в образ докера (springdockerimage: 1) и развертывается в кластере Kubernetes с 3 репликами. Содержание моего определения развертывания выглядит следующим образом:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springapp
  labels:
   app: distributiondemo
spec:
 selector:
   matchLabels:
     app: distributiondemo
 replicas: 3
 template:
   metadata:
     labels:
       app: distributiondemo
   spec:
     containers:
      - name: spring-container
        image: springdockerimage:1

Я создал службу для описанного выше развертывания следующим образом:

apiVersion: v1
kind: Service
metadata:
  name: springservice
  labels:
    app: distributiondemo
spec:
  selector:
    app: distributiondemo
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
    name: spring-port
    nodePort: 32000
  type: NodePort

После развертывания обоих вышеупомянутых файлов YAML (развертывание и служба) я заметил, что все было развернуто, как ожидалось, то есть созданы 3 реплики, и моя служба также имеет 3 конечные точки. На скриншоте ниже показано то же самое:  введите описание изображения здесь

Поскольку я использую minikube для локального тестирования, я перенаправляю порт и получаю доступ к приложению как kubectl port-forward deployment.apps / springapp 40002: 8080.

Но я заметил одну вещь: все мои HTTP-запросы перенаправляются только на один модуль.

while true ; do curl http://localhost:40002/docker-java-app/test ;done

Я не понимаю, где именно я делаю это неправильно. Любая помощь будет оценена по достоинству. Спасибо.


person Hemanth H L    schedule 20.11.2020    source источник


Ответы (1)


Балансировка нагрузки может не работать с портами с перенаправлением портов, так как она может напрямую перенаправлять трафик на под (подробнее здесь). Сервис K8s - это функция, которая даст вам возможность балансировки нагрузки.

Поэтому вы можете попробовать любое из нижеприведенных

  1. Используйте 1_
  2. Используйте http://service_cluster_ip:8080/docker-java-app/test
  3. Используйте http://any_host_ip_from_k8s_cluster:32000/docker-java-app/test

Варианты 1 и 2 работают только в том случае, если вы обращаетесь к этим URL-адресам с хоста, который является частью кластера K8s. Вариант 3 просто требует подключения к целевому хосту и порту с хоста, к URL-адресу которого вы обращаетесь.

person Syam Sankar    schedule 20.11.2020