| <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – Mesh手册</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/mesh/</link><description>Recent content in Mesh手册 on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><atom:link href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/mesh/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview: Debug参考文档</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/mesh/mesh/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/mesh/mesh/</guid><description> |
| <h2 id="前置环境准备">前置环境准备</h2> |
| <ul> |
| <li>docker环境</li> |
| <li>kubernetes环境(推荐docker desktop,图形化界面,还内嵌了一个小型的Kubernetes环境,后文演示也是基于docker desktop)</li> |
| <li>istio环境</li> |
| <li>dubbo-samples代码,master分支即可</li> |
| <li>dubbo 版本 &gt;= 3.1.0 |
| 搭建 Kubernetes 环境 |
| 目前 Dubbo 仅支持在 Kubernetes 环境下的 Mesh 部署,所以在运行启动本示例前需要先搭Kubernetes 环境。(建议采用docker desktop进行搭建,直接就可以运行一个kubernetes环境) |
| <a href="https://docs.docker.com/desktop/install/mac-install/">https://docs.docker.com/desktop/install/mac-install/</a></li> |
| </ul> |
| <h2 id="搭建-kubernetes-环境">搭建 Kubernetes 环境</h2> |
| <p>目前 Dubbo 仅支持在 Kubernetes 环境下的 Mesh 部署,所以在运行启动本示例前需要先搭Kubernetes 环境。(建议采用docker desktop进行搭建,直接就可以运行一个kubernetes环境) |
| <a href="https://docs.docker.com/desktop/install/mac-install/">https://docs.docker.com/desktop/install/mac-install/</a></p> |
| <h2 id="搭建-istio-环境">搭建 Istio 环境</h2> |
| <p>搭建 Istio 环境参考文档: |
| Istio 安装文档(<a href="https://istio.io/latest/docs/setup/getting-started/">https://istio.io/latest/docs/setup/getting-started/</a>) |
| 注:安装 Istio 的时候需要开启 first-party-jwt 支持(使用 istioctl 工具安装的时候加上 &ndash;set values.global.jwtPolicy=first-party-jwt 参数),否则将导致客户端认证失败的问题。 |
| 附安装命令参考:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>curl <span style="color:#719e07">-</span>L https<span style="color:#719e07">:</span><span style="color:#586e75">//istio.io/downloadIstio | sh - |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span>cd istio<span style="color:#719e07">-</span>1<span style="color:#719e07">.</span>xx<span style="color:#719e07">.</span>x |
| </span></span><span style="display:flex;"><span>export PATH<span style="color:#719e07">=</span>$PWD<span style="color:#719e07">/</span>bin<span style="color:#719e07">:</span>$PATH |
| </span></span><span style="display:flex;"><span>istioctl install <span style="color:#719e07">--</span>set profile<span style="color:#719e07">=</span>demo <span style="color:#719e07">--</span>set values<span style="color:#719e07">.</span>global<span style="color:#719e07">.</span>jwtPolicy<span style="color:#719e07">=</span>first<span style="color:#719e07">-</span>party<span style="color:#719e07">-</span>jwt <span style="color:#719e07">-</span>y |
| </span></span></code></pre></div><h2 id="构建dubbo和dubbo-samples环境">构建dubbo和dubbo-samples环境</h2> |
| <p>进入dubbo-dependencies-bom,更改grpc版本为1.41.0</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#719e07">&lt;</span>grpc<span style="color:#719e07">.</span>version<span style="color:#719e07">&gt;</span>1<span style="color:#719e07">.</span>41<span style="color:#719e07">.</span>0<span style="color:#719e07">&lt;/</span>grpc<span style="color:#719e07">.</span>version<span style="color:#719e07">&gt;</span> |
| </span></span></code></pre></div><p>进入dubbo-samples-xds目录,新增配置:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>dubbo<span style="color:#719e07">.</span>application<span style="color:#719e07">.</span>metadataServiceProtocol<span style="color:#719e07">=</span>dubbo |
| </span></span></code></pre></div><p>打包dubbo代码,切换到dubbo根目录,执行以下命令进行打包:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>mvn clean <span style="color:#719e07">package</span> -DskipTests |
| </span></span></code></pre></div><p>切换到dubbo-samples代码,在dubbo-samples-xds的pom文件中引入刚打包好的dubbo代码。 |
| 接下来修改debug模式,以dubbo-xds-consumer为例: |
| 更改dubbo-samples-consumer的docker file并更改调试模式为suspend=y, 更改后的docker file文件如下:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>FROM openjdk<span style="color:#719e07">:</span>8<span style="color:#719e07">-</span>jdk |
| </span></span><span style="display:flex;"><span>ADD <span style="color:#719e07">./</span>target<span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>consumer<span style="color:#719e07">-</span>1<span style="color:#719e07">.</span>0<span style="color:#719e07">-</span>SNAPSHOT<span style="color:#719e07">.</span>jar dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>consumer<span style="color:#719e07">-</span>1<span style="color:#719e07">.</span>0<span style="color:#719e07">-</span>SNAPSHOT<span style="color:#719e07">.</span>jar |
| </span></span><span style="display:flex;"><span>EXPOSE 31000 |
| </span></span><span style="display:flex;"><span>CMD java <span style="color:#719e07">-</span>jar <span style="color:#719e07">-</span>agentlib<span style="color:#719e07">:</span>jdwp<span style="color:#719e07">=</span>transport<span style="color:#719e07">=</span>dt_socket<span style="color:#719e07">,</span>server<span style="color:#719e07">=</span>y<span style="color:#719e07">,</span>suspend<span style="color:#719e07">=</span>y<span style="color:#719e07">,</span>address<span style="color:#719e07">=</span>31000 <span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>consumer<span style="color:#719e07">-</span>1<span style="color:#719e07">.</span>0<span style="color:#719e07">-</span>SNAPSHOT<span style="color:#719e07">.</span>jar |
| </span></span></code></pre></div><p>随后执行以下命令进行打包:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>cd dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds |
| </span></span><span style="display:flex;"><span>mvn clean <span style="color:#719e07">package</span> -DskipTests |
| </span></span></code></pre></div><h2 id="构建docker镜像">构建docker镜像</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>cd <span style="color:#719e07">./</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>provider<span style="color:#719e07">/</span> |
| </span></span><span style="display:flex;"><span># dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>provider<span style="color:#719e07">/</span>Dockerfile |
| </span></span><span style="display:flex;"><span>docker build <span style="color:#719e07">-</span>t apache<span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span>demo<span style="color:#719e07">:</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>provider_0<span style="color:#719e07">.</span>0<span style="color:#719e07">.</span>1 <span style="color:#719e07">.</span> |
| </span></span><span style="display:flex;"><span>cd <span style="color:#719e07">../</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>consumer<span style="color:#719e07">/</span> |
| </span></span><span style="display:flex;"><span># dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>consumer<span style="color:#719e07">/</span>Dockerfile |
| </span></span><span style="display:flex;"><span>docker build <span style="color:#719e07">-</span>t apache<span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span>demo<span style="color:#719e07">:</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>consumer_0<span style="color:#719e07">.</span>0<span style="color:#719e07">.</span>1 <span style="color:#719e07">.</span> |
| </span></span><span style="display:flex;"><span>cd <span style="color:#719e07">../</span> |
| </span></span></code></pre></div><h2 id="创建k8s-namespace">创建K8s namespace</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span># 初始化命名空间 |
| </span></span><span style="display:flex;"><span>kubectl apply <span style="color:#719e07">-</span>f https<span style="color:#719e07">:</span><span style="color:#586e75">//raw.githubusercontent.com/apache/dubbo-samples/master/dubbo-samples-xds/deploy/Namespace.yml |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> |
| </span></span><span style="display:flex;"><span># 切换命名空间 |
| </span></span><span style="display:flex;"><span>kubens dubbo<span style="color:#719e07">-</span>demo |
| </span></span></code></pre></div><p>如果kubens切换不成功,安装下kubectl即可</p> |
| <h2 id="部署容器">部署容器</h2> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>cd <span style="color:#719e07">./</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>provider<span style="color:#719e07">/</span>src<span style="color:#719e07">/</span>main<span style="color:#719e07">/</span>resources<span style="color:#719e07">/</span>k8s |
| </span></span><span style="display:flex;"><span># dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>provider<span style="color:#719e07">/</span>src<span style="color:#719e07">/</span>main<span style="color:#719e07">/</span>resources<span style="color:#719e07">/</span>k8s<span style="color:#719e07">/</span>Deployment<span style="color:#719e07">.</span>yml |
| </span></span><span style="display:flex;"><span># dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>provider<span style="color:#719e07">/</span>src<span style="color:#719e07">/</span>main<span style="color:#719e07">/</span>resources<span style="color:#719e07">/</span>k8s<span style="color:#719e07">/</span>Service<span style="color:#719e07">.</span>yml |
| </span></span><span style="display:flex;"><span>kubectl apply <span style="color:#719e07">-</span>f Deployment<span style="color:#719e07">.</span>yml |
| </span></span><span style="display:flex;"><span>kubectl apply <span style="color:#719e07">-</span>f Service<span style="color:#719e07">.</span>yml |
| </span></span><span style="display:flex;"><span>cd <span style="color:#719e07">../../../../../</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>consumer<span style="color:#719e07">/</span>src<span style="color:#719e07">/</span>main<span style="color:#719e07">/</span>resources<span style="color:#719e07">/</span>k8s |
| </span></span><span style="display:flex;"><span># dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">/</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>consumer<span style="color:#719e07">/</span>src<span style="color:#719e07">/</span>main<span style="color:#719e07">/</span>resources<span style="color:#719e07">/</span>k8s<span style="color:#719e07">/</span>Deployment<span style="color:#719e07">.</span>yml |
| </span></span><span style="display:flex;"><span>kubectl apply <span style="color:#719e07">-</span>f Deployment<span style="color:#719e07">.</span>yml |
| </span></span><span style="display:flex;"><span>cd <span style="color:#719e07">../../../../../</span> |
| </span></span></code></pre></div><p>成功执行上述命令后的docker desktop containers页面长这样,其中dubbo-samples一共出现数个containers,包含consumer和provider:</p> |
| <p><img src="https://dubbo.apache.org/imgs/user/docker-desktop.png" alt="docker-desktop.png"></p> |
| <p>查看k8s_server_dubbo-samples-xds-provider-XXX日志,出现如下日志:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>Dec 28<span style="color:#719e07">,</span> 2022 8<span style="color:#719e07">:</span>42<span style="color:#719e07">:</span>48 AM org<span style="color:#719e07">.</span>apache<span style="color:#719e07">.</span>dubbo<span style="color:#719e07">.</span>config<span style="color:#719e07">.</span>deploy<span style="color:#719e07">.</span>DefaultApplicationDeployer info |
| </span></span><span style="display:flex;"><span>INFO: <span style="color:#719e07">[</span>DUBBO<span style="color:#719e07">]</span> Dubbo Application<span style="color:#719e07">[</span>1<span style="color:#719e07">.</span>1<span style="color:#719e07">](</span>dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>provider<span style="color:#719e07">)</span> is ready<span style="color:#719e07">.,</span> dubbo version<span style="color:#719e07">:</span> 1<span style="color:#719e07">.</span>0<span style="color:#719e07">-</span>SNAPSHOT<span style="color:#719e07">,</span> current host<span style="color:#719e07">:</span> 10<span style="color:#719e07">.</span>1<span style="color:#719e07">.</span>5<span style="color:#719e07">.</span>64 |
| </span></span><span style="display:flex;"><span>Dec 28<span style="color:#719e07">,</span> 2022 8<span style="color:#719e07">:</span>42<span style="color:#719e07">:</span>49 AM org<span style="color:#719e07">.</span>apache<span style="color:#719e07">.</span>dubbo<span style="color:#719e07">.</span>registry<span style="color:#719e07">.</span>xds<span style="color:#719e07">.</span>util<span style="color:#719e07">.</span>protocol<span style="color:#719e07">.</span>AbstractProtocol info |
| </span></span><span style="display:flex;"><span>INFO: <span style="color:#719e07">[</span>DUBBO<span style="color:#719e07">]</span> receive notification from xds server<span style="color:#719e07">,</span> type<span style="color:#719e07">:</span> type<span style="color:#719e07">.</span>googleapis<span style="color:#719e07">.</span>com<span style="color:#719e07">/</span>envoy<span style="color:#719e07">.</span>config<span style="color:#719e07">.</span>listener<span style="color:#719e07">.</span>v3<span style="color:#719e07">.</span>Listener<span style="color:#719e07">,</span> dubbo version<span style="color:#719e07">:</span> 1<span style="color:#719e07">.</span>0<span style="color:#719e07">-</span>SNAPSHOT<span style="color:#719e07">,</span> current host<span style="color:#719e07">:</span> 10<span style="color:#719e07">.</span>1<span style="color:#719e07">.</span>5<span style="color:#719e07">.</span>64 |
| </span></span><span style="display:flex;"><span>Dec 28<span style="color:#719e07">,</span> 2022 8<span style="color:#719e07">:</span>42<span style="color:#719e07">:</span>53 AM org<span style="color:#719e07">.</span>apache<span style="color:#719e07">.</span>dubbo<span style="color:#719e07">.</span>registry<span style="color:#719e07">.</span>xds<span style="color:#719e07">.</span>util<span style="color:#719e07">.</span>protocol<span style="color:#719e07">.</span>AbstractProtocol info |
| </span></span><span style="display:flex;"><span>INFO: <span style="color:#719e07">[</span>DUBBO<span style="color:#719e07">]</span> receive notification from xds server<span style="color:#719e07">,</span> type<span style="color:#719e07">:</span> type<span style="color:#719e07">.</span>googleapis<span style="color:#719e07">.</span>com<span style="color:#719e07">/</span>envoy<span style="color:#719e07">.</span>config<span style="color:#719e07">.</span>listener<span style="color:#719e07">.</span>v3<span style="color:#719e07">.</span>Listener<span style="color:#719e07">,</span> dubbo version<span style="color:#719e07">:</span> 1<span style="color:#719e07">.</span>0<span style="color:#719e07">-</span>SNAPSHOT<span style="color:#719e07">,</span> current host<span style="color:#719e07">:</span> 10<span style="color:#719e07">.</span>1<span style="color:#719e07">.</span>5<span style="color:#719e07">.</span>64 |
| </span></span><span style="display:flex;"><span>dubbo service started |
| </span></span></code></pre></div><p><img src="https://dubbo.apache.org/imgs/user/xds-provider-log.png" alt="xds-provider-log.png"></p> |
| <p>查看k8s_server_dubbo-samples-xds-consumer-XXX日志,发现其正等待debug连接: |
| <img src="https://dubbo.apache.org/imgs/user/xds-consumer-listener.png" alt="xds-consumer-listener.png"> |
| 打开命令终端,输入命令查看可用并处于Running状态的pods:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>kubectl get pods |
| </span></span></code></pre></div><p><img src="https://dubbo.apache.org/imgs/user/k8s-pods.png" alt="k8s-pods.png"></p> |
| <p>输入以下命令将pods的端口映射到本地:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>kubectl port<span style="color:#719e07">-</span>forward dubbo<span style="color:#719e07">-</span>samples<span style="color:#719e07">-</span>xds<span style="color:#719e07">-</span>consumer<span style="color:#719e07">-</span>64c6c6f444<span style="color:#719e07">-</span>kk2vr 31000<span style="color:#719e07">:</span>31000 |
| </span></span></code></pre></div><p><img src="https://dubbo.apache.org/imgs/user/port-forward.png" alt="port-forward.png"></p> |
| <p>切换到idea,edit configuration,debugger mode选择attach to remote JVM,port选择上面docker file expose的端口,module classpath选择dubbo-samples-xds-consumer,并点击debug,即可成功连接 |
| <img src="https://dubbo.apache.org/imgs/user/remote-debug.png" alt="remote-debug.png"></p> |
| <p>可以看到断点已经成功进来了: |
| <img src="https://dubbo.apache.org/imgs/user/xds-debug-success.png" alt="xds-debug-success.png"> |
| 此时查看k8s_server_dubbo-samples-xds-consumer-XXX的日志可以看到已经成功在运行: |
| <img src="https://dubbo.apache.org/imgs/user/xds-consumer-debug-success-log.png" alt="xds-consumer-debug-success-log.png"></p></description></item></channel></rss> |