Контейнер удаленной отладки в кубернетах с использованием intellij

Я пытаюсь удаленно отлаживать приложение в подключенном режиме с хостом: 192.168.99.100 и портом 5005, но он сообщает мне, что это unable to open the debugger port. IP - 192.268.99.100 (кластер размещается локально через minikube).

Выход kubectl describe service catalogservice

Name:                     catalogservice
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=catalogservice
Type:                     NodePort
IP:                       10.98.238.198
Port:                     web  31003/TCP
TargetPort:               8080/TCP
NodePort:                 web  31003/TCP
Endpoints:                172.17.0.6:8080
Port:                     debug  5005/TCP
TargetPort:               5005/TCP
NodePort:                 debug  32003/TCP
Endpoints:                172.17.0.6:5005
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Это pods service.yml:

apiVersion: v1
kind: Service
metadata:
  name: catalogservice
spec:
  type: NodePort
  selector:
    app: catalogservice
  ports:
  - name: web
    protocol: TCP
    port: 31003
    nodePort: 31003
    targetPort: 8080
  - name: debug
    protocol: TCP 
    port: 5005
    nodePort: 32003
    targetPort: 5005

И вот здесь выставляю порт контейнеров

spec:
  containers:
  - name: catalogservice
    image: elps/myimage
    ports:
    - containerPort: 8080
      name: app
    - containerPort: 5005
      name: debug

Как я строю образ:

FROM openjdk:11
VOLUME /tmp
EXPOSE 8082
ADD /target/catalogservice-0.0.1-SNAPSHOT.jar catalogservice-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java", "-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n", "-jar", "catalogservice-0.0.1-SNAPSHOT.jar"]

Когда я выполняю nmap -p 5005 192.168.99.100, я получаю

PORT     STATE  SERVICE
5005/tcp closed avt-profile-2

Когда я выполняю nmap -p 32003 192.168.99.100, я получаю

PORT     STATE  SERVICE
32003/tcp closed unknown

Когда я выполняю nmap -p 31003 192.168.99.100, я получаю

PORT     STATE  SERVICE
31003/tcp open unknown

Когда я выполняю kubectl get services, я получаю

NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                          AGE
catalogservice    NodePort    10.108.195.102   <none>        31003:31003/TCP,5005:32003/TCP   14m

minikube service customerservice --url возвращается

http://192.168.99.100:32004
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
11
0
9 405
3

Ответы 3

В ямле, который вы сначала написали как:

    - containerPort: 5050
      name: debug

Должно быть:

    - containerPort: 5005
      name: debug

Вам также необходимо использовать внешний порт 32003 при настройке отладчика IntelliJ. С этими изменениями все должно работать.

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

CMD if [ "x$REMOTE_DEBUG" = "xfalse" ] ; then java $JAVA_OPTS -jar catalogservice-0.0.1-SNAPSHOT.jar ; else java $JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n -jar catalogservice-0.0.1-SNAPSHOT.jar ; fi

Вероятно, вы захотите использовать установить env var$JAVA_OPTS, чтобы ограничить использование памяти jvm, чтобы избежать проблемы в k8s.

Ой! По-прежнему не работает, поэтому отредактировал правильный порт выше.

elp 18.12.2018 16:59

@elp Я думаю, вы пытаетесь подключить процесс отладчика не к тому порту. 5005 - это внутренний порт, но отладчик intelliJ должен подключаться к внешнему порту, то есть 32003.

Ryan Dawson 18.12.2018 17:06

Я нанёс на карту 32003, и он тоже закрыт: | Приложил дополнительную информацию выше. Я также попытался изменить порт в intellij 5005 -> 32003, но получил тот же результат.

elp 18.12.2018 17:24

Можете ли вы попробовать запустить только этот контейнер с docker run и выставить порты (например, с -p) и посмотреть, сможете ли вы таким образом удаленную отладку? Просто чтобы сузить круг вопросов, на каком уровне проблема.

Ryan Dawson 18.12.2018 17:32

Вы также можете попробовать переадресацию портов, как в blog.christianposta.com/kubernetes/…

Ryan Dawson 18.12.2018 17:38

Необходимо изменить множество заполнителей, установленных кластером, чтобы я мог сделать это позже. Portfowarding тоже не работает .. Я подключил вывод service description выше, кстати, наверное что-то не так с моим ip?

elp 18.12.2018 17:51

Предположительно можно еще и localhost попробовать?

Ryan Dawson 18.12.2018 17:53

Я уже пробовал, но в любом случае это не имело бы никакого смысла, поскольку кластер работает через minikube, что означает, что он работает на другом IP-адресе.

elp 18.12.2018 23:01

Вам необходимо разрешить агенту отладки принимать данные от любого хоста. Укажите адрес «address = *: 5005», иначе доступ будет разрешен только с 127.0.0.1. После того, как вы выполните эту настройку, попробуйте удаленно подключиться к модулю, используя указанный вами порт узла, который составляет 32003 от intellij.

Bal Chua 26.12.2018 00:42

В качестве альтернативы использованию NodePort в Service вы также можете использовать kubectl port-forward для доступа к порту отладки в вашем Pod.

kubectl port-forward allows using resource name, such as a pod name, to select a matching pod to port forward to since Kubernetes v1.10.

Вам нужно открыть порт отладки в yaml развертывания для Pod

spec:
  containers:
    ...
    ports:
      ...
      - containerPort: 5005

Затем получите имя своего модуля через

kubectl get pods

а затем добавьте переадресацию порта в этот под

kubectl port-forward podname 5005:5005

В IntelliJ вы сможете подключиться к

Хост: localhost

Порт: 5005

В качестве альтернативы вы можете использовать плагин Облачный код Intellij. Кроме того, если вы используете Ткань8, он обеспечивает цель fabric8:debug.

Плагин Cloud Code IntelliJ делает всю работу за меня. Не прекращена ли поддержка библиотеки Fabric8?

marcor92 08.05.2021 21:29

Другие вопросы по теме