Visual Studio 连接 Kubernetes 调试 电脑版发表于:2022/5/19 16:52  >#Visual Studio 连接 Kubernetes 调试 [TOC]  tn2>Bridge to Kubernetes是一种迭代开发工具,用于编写以 Kubernetes 为目标的微服务应用程序。 可以帮助我们调试线上 Kubernetes 运行的项目与代码。 前提条件 ------------ tn2>需要一个k8s集群。 需要安装vs2019以上的Kubernetes。 可以通过`kubectl cluster-info`命令查看集群信息。 建立连接 ------------ tn2>当 Bridge to Kubernetes 与您的集群建立连接时,它会执行以下操作:<br/> 提示您配置要在集群上替换的服务、开发计算机上用于代码的端口以及代码的启动任务作为一次性操作。 将集群上 pod 中的容器替换为将流量重定向到您的开发计算机的远程代理容器。 在您的开发计算机上运行kubectl port-forward以将流量从您的开发计算机转发到集群中运行的远程代理。 使用远程代理从您的集群收集环境信息。此环境信息包括环境变量、可见服务、卷挂载和秘密挂载。 在 Visual Studio 中设置环境,以便开发计算机上的服务可以访问相同的变量,就像它在群集上运行一样。 更新主机文件以将集群上的服务映射到开发计算机上的本地 IP 地址。这些主机文件条目允许在您的开发计算机上运行的代码向集群中运行的其他服务发出请求。要更新您的hosts文件,Bridge to Kubernetes 需要您的开发计算机上的管理员访问权限。 开始在您的开发计算机上运行和调试您的代码。如有必要,Bridge to Kubernetes 通过停止当前正在使用这些端口的服务或进程来释放开发计算机上所需的端口。 创建API ------------ tn2>我们创建一个环境为.Net6的API项目,不要https,勾选Docker支持,`launchSettings.json`的配置如下。  ```json { "profiles": { "API1": { "commandName": "Project", "launchBrowser": true, "launchUrl": "weatherforecast", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "applicationUrl": "http://localhost:5190", "dotnetRunMessages": true }, "Docker": { "commandName": "Docker", "launchBrowser": true, "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/weatherforecast", "publishAllPorts": true }, "Bridge to Kubernetes": { "commandName": "AzureDevSpacesLocal", "launchBrowser": true } } } ``` tn2>然后我们编写我们的`api.yml`。偷了个懒没定义名称空间,大家自己定义一下。 tn>注意我这里设置的端口是5190。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: ocelotapi namespace: dev labels: name: ocelotapi spec: replicas: 2 selector: matchLabels: name: ocelotapi template: metadata: labels: name: ocelotapi spec: containers: - name: ocelotapi image: aidasi/ocelotapi:v1 ports: - containerPort: 5190 imagePullPolicy: Always --- kind: Service apiVersion: v1 metadata: name: ocelotapi namespace: dev spec: ports: - port: 5190 targetPort: 5190 selector: name: ocelotapi ``` tn2>这里我就不在本地测试了(浪费时间),直接Build一下。在所在的项目解决方案下,打开cmd,执行下列命令进行构建,当然名字你们自己取;随后上传到公共镜像站上(DockerHub)。 ```bash docker build -t aidasi/ocelotapi:v1 -f ./API1/Dockerfile . ``` tn2>这里我都给你们上传好了,直接拉取就可以了。(代码待会会上传。。。) ```bash docker pull aidasi/ocelotapi:v1 ``` 启动服务 ------------ tn2>创建`dev`名称空间与我们API服务。 ```bash kubectl create ns dev kubectl apply -f .\api.yml ```  tn2>查看Pod创建情况。 ```bash kubectl get pod -n dev ```  安装Bridge to Kubernetes 2022 ------------ tn2>在我们的VS上方点击`Extensions`-->`Manage Extensions`,找到 **Bridge to Kubernetes 2022** 并安装。这里我已经安装好了。 安装好后需要重启一下VS。  tn2>然后我们的API1就可以选择使用Bridge to Kubernetes,进行运行。 然后它会自动去识别本机所拥有的集群,其实就是去检查你的`.kube`目录。 然后我们这里选择我们的`dev`名称空间,以及我们的`ocelotapi`服务。  >### 启动路由隔离(Enable routing isolation) tn2>默认情况下,Bridge to Kubernetes 会将服务的所有流量重定向到您的开发计算机。您可以改为使用路由功能仅将请求从子域重定向到您的开发计算机。这些路由功能允许您使用 Bridge to Kubernetes 进行隔离开发,并避免中断集群中的其他流量。 (相当于下图所展示的情况)  tn>如果是多人开发这个项目,或者是微服务开发建议开启它。(这里我就不开启了,开启了之后会多几个容器) tn2>好接下来可以设置一下应用的地址,但我感觉没什么用。然后点一下OK就可以了。(你们的可能是save什么的) 好接下来我们就可以进行启动了。   tn2>我们可以发现它一直在转圈圈。但是我们知道当Bridge to Kubernetes它是有启动kubectl port-forward的,所以我们直接请求服务名或者Pod的地址,它会收到请求。我们请求的服务试试看:http://ocelotapi:5190/weatherforecast  tn2>我们后台已经收到断点了。所以也是可以返回数据的。   tn2>好,到这里我们就演示完了。 其他 ------------ tn2>请参考: https://docs.microsoft.com/en-us/visualstudio/bridge/overview-bridge-to-kubernetes?view=vs-2019#using-routing-capabilities-for-developing-in-isolation https://docs.microsoft.com/en-us/visualstudio/bridge/bridge-to-kubernetes-vs?view=vs-2019