Невозможно позвонить в мою службу Loadbalanced в Кубернетес - PullRequest
2 голосов
/ 26 апреля 2020

У меня есть приложение, работающее на Jetty Server и прослушивающее порт 8080. Я развернул его как контейнер. Приложение работает правильно, и если я выполню curl -v http://127.0.0.1: 8080 из модуля, я получу правильный ответ.

Мой модуль также имеет адрес. Давайте назовем это 10.1.2.3 (гипотетически). Если я пытаюсь выполнить curl -v http://10.1.2.3: 8080 , соединение закрывается.

Я попытался изменить адрес, на котором мое приложение запускается, на 10.1.2.3, и curl работает после того. Однако, я чувствую, что это побеждает цель контейнеризации, поскольку у меня не было бы доступа к этому IP заранее.

У меня также есть служба с балансировкой нагрузки, в которой я сопоставляю порт 33000 с моим портом службы 8080. Службе был назначен порт узла 34000. Поскольку он работает на моем локальном docker, моей целью было сделайте завиток -v http://localhost: 34000 и дойдите до моего приложения, но этого, очевидно, не происходит.

Может кто-нибудь помочь, пожалуйста, относительно того, что я делаю неправильно? Мои определения контейнера и службы приведены ниже:

resource.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-service-dev-pod1
  labels:
    app: myapp-service-dev
    component: myapp-service-dev
spec:
  selector:
    matchLabels:
      app: myapp-service-dev-pod1
  replicas: 2    
  template:
    metadata:
      labels:
        app: myapp-service-dev-pod1
        component: myapp-service-dev
    spec:
      volumes:
        - name: shared-dev-data
          emptyDir: {}
      containers:
        - name: myapp-service-dev-pod1
          image: docker/my-apps/mybuild_service:9
          ports:
            - containerPort: 8080
          volumeMounts:
            - name: shared-dev-data
              mountPath: /opt/myapp/jetty/logs

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: myapp-service-dev-lb
  labels:
    app: myapp-service-dev
spec:
  ports:
    - port: 33000
      protocol: TCP
      name: http
      targetPort: 8080
  selector:
    component: myapp-service-dev
  type: LoadBalancer

Ответы [ 2 ]

2 голосов
/ 26 апреля 2020

В соответствии с вашей конфигурацией ссылка должна быть доступна по адресу:

http://localhost:33000/

. Или вам нужно изменить порт

- port: 33000 # external port

на порт:

- port: 8080 # external port

Тогда адрес изменится на:

http://localhost:8080/

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

Вы можете найти больше информации о вашем типе балансировки здесь .

1 голос
/ 26 апреля 2020

Заставьте пристань слушать 0.0.0.0 вместо 127.0.0.1 Проверьте this , как это сделать. Это должно исправить проблему connection closed при доступе к ней через http://PODIP:8080

...