如何远程调试Azure K8s群集中托管的应用程序

时间:2020-04-10 17:24:50

标签: kubernetes azure-devops remote-debugging portforwarding jpda

基本背景

我的应用程序是Java应用程序,我的应用程序正在部署在Azure群集中。 一切都很好。但是我想知道如何将Eclipse调试器与Azure群集中运行的应用程序连接。

在启动脚本中,JPDA端口绑定了8000,而dockerfile 8000端口则暴露。

问题是如何将eclipse调试器与在Azure群集中运行的代码连接。

我试图将IP地址放在Remote Java Application连接属性Host:中,但没有成功。

需要过程,用于远程调试。

1 个答案:

答案 0 :(得分:1)

因此,在谷歌搜索之后,我发现了一种忍者技术??。我们称为port-forwarding的一种技术。

因此,基本思路是将正在运行的应用程序的端口转发到我们本地系统的可用端口。

所以我找到了一个用于端口转发的命令:

kubectl port-forward pods/<podName> 8000:8000 -n <namespace>

在此命令中,我们需要知道。为此,我们需要了解在Azure上的Kubernetes群集中运行的Pod。这意味着我们需要使用Azure连接或验证您的本地计算机CLI。

从此链接下载Azure CLI并安装 https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest

  • 现在打开PowerShell运行命令

    az login

  • 您的默认浏览器将打开,添加您的Azure凭据和身份验证,因此PowerShell完成后,您的authentication将显示以下消息。

 
C:\Users\MachineName> az login
You have logged in. Now let us find all the subscriptions to which you have access...

[
  {
    "cloudName": "",
    "id": "",
    "isDefault": true,
    "name": "",
    "state": "Enabled",
    "user": {
      "name": "",
      "type": ""
    }
  }
]
  • 现在要运行的下一个命令是:

    az aks get-credentials --resource-group <ResourseGroupName> --name <Name of Kubernetes cluster>

  • 运行命令,以获取在特定命名空间中运行的Pod(如果已定义)。

    kubectl get pods -n <namespace>

  • 现在,您将在Azure云的Kubernetes群集中的特定名称空间中运行您的Pod。


NAME                         READY STATUS  RESTARTS    AGE

application-8664866df5-x4zns 2/2           Running 0   21m
  • 是时候运行我们的初始命令了。

    kubectl port-forward pods/<application-8664866df5-x4zns> 6000:8000 -n myNameSpace

  • 在cli中,您将看到


Forwarding from 127.0.0.1:6000 -> 8000
Forwarding from [::1]:6000 -> 8000

可能会困惑为什么我使用6000端口,因为我的8000端口已被使用。

连接Eclipse的时间: 项目Right-click> debug> debug configuration>搜索Remote Java Application

像我的调试器一样为 debugCluster 设置名称 Host:127.0.0.1 Port:6000

在一段时间后单击“应用并按调试”按钮,您将看到调试器与Azure群集中运行的实例连接。

enter image description here