blob: 82f8162c0877fa462cce3072545d120e61f38c94 [file] [log] [blame]
<!doctype html><html lang=en class=no-js><head><meta name=ROBOTS content="INDEX, FOLLOW"><link rel=canonical href=https://cn.dubbo.apache.org/en/overview/tasks/mesh/proxyless/><script>var _hmt=_hmt||[];(function(){var e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta http-equiv=Content-Security-Policy content="frame-src *"><meta name=generator content="Hugo 0.122.0"><link rel="shortcut icon" type=image/png href=/imgs/favicon.png><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=manifest href=/manifest.webmanifest><title>Istio + Proxyless | Apache Dubbo</title><meta property="og:title" content="Istio + Proxyless">
<meta property="og:description" content="Proxyless mode means that Dubbo communicates directly with Istiod, and implements service discovery and service governance capabilities through the xDS protocol. In this example, a simple example will be used to demonstrate how to use the Proxyless mode.
Sample Address
code structure This section mainly introduces the code structure of the example used in this article. By imitating the relevant configuration in this example and modifying the existing project code, the existing project can quickly run in Proxyless Mesh mode."><meta property="og:type" content="article"><meta property="og:url" content="https://cn.dubbo.apache.org/en/overview/tasks/mesh/proxyless/"><meta property="article:section" content="overview"><meta property="article:modified_time" content="2023-01-02T18:18:49+08:00"><meta itemprop=name content="Istio + Proxyless"><meta itemprop=description content="Proxyless mode means that Dubbo communicates directly with Istiod, and implements service discovery and service governance capabilities through the xDS protocol. In this example, a simple example will be used to demonstrate how to use the Proxyless mode.
Sample Address
code structure This section mainly introduces the code structure of the example used in this article. By imitating the relevant configuration in this example and modifying the existing project code, the existing project can quickly run in Proxyless Mesh mode."><meta itemprop=dateModified content="2023-01-02T18:18:49+08:00"><meta itemprop=wordCount content="1163"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="Istio + Proxyless"><meta name=twitter:description content="Proxyless mode means that Dubbo communicates directly with Istiod, and implements service discovery and service governance capabilities through the xDS protocol. In this example, a simple example will be used to demonstrate how to use the Proxyless mode.
Sample Address
code structure This section mainly introduces the code structure of the example used in this article. By imitating the relevant configuration in this example and modifying the existing project code, the existing project can quickly run in Proxyless Mesh mode."><script async src="https://www.googletagmanager.com/gtag/js?id=G-NM6FFMT51J"></script><script>var doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-NM6FFMT51J",{anonymize_ip:!1})}</script><link rel=preload href=/scss/main.min.f77e221bcdbe0cadb996060fe82063c747b60c229a1f8bbf0ee529adbadd84fa.css as=style><link href=/scss/main.min.f77e221bcdbe0cadb996060fe82063c747b60c229a1f8bbf0ee529adbadd84fa.css rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script><meta name=theme-color content="#326ce5"><link rel=stylesheet href=/css/feature-states.css><meta name=description content="Proxyless mode means that Dubbo communicates directly with Istiod, and implements service discovery and service governance capabilities through the xDS protocol. In this example, a simple example will be used to demonstrate how to use the Proxyless mode.
Sample Address
code structure This section mainly introduces the code structure of the example used in this article. By imitating the relevant configuration in this example and modifying the existing project code, the existing project can quickly run in Proxyless Mesh mode."><meta property="og:description" content="Proxyless mode means that Dubbo communicates directly with Istiod, and implements service discovery and service governance capabilities through the xDS protocol. In this example, a simple example will be used to demonstrate how to use the Proxyless mode.
Sample Address
code structure This section mainly introduces the code structure of the example used in this article. By imitating the relevant configuration in this example and modifying the existing project code, the existing project can quickly run in Proxyless Mesh mode."><meta name=twitter:description content="Proxyless mode means that Dubbo communicates directly with Istiod, and implements service discovery and service governance capabilities through the xDS protocol. In this example, a simple example will be used to demonstrate how to use the Proxyless mode.
Sample Address
code structure This section mainly introduces the code structure of the example used in this article. By imitating the relevant configuration in this example and modifying the existing project code, the existing project can quickly run in Proxyless Mesh mode."><meta property="og:url" content="https://cn.dubbo.apache.org/en/overview/tasks/mesh/proxyless/"><meta property="og:title" content="Istio + Proxyless"><meta name=twitter:title content="Istio + Proxyless"><meta name=twitter:image:alt content="Apache Dubbo"><meta property="og:type" content="article"><meta name=viewport content="width=device-width"><script async defer src=/js/github-buttons.js></script><link href=/css/community.css rel=stylesheet><link href=/css/contactus.css rel=stylesheet><link href=/css/language.css rel=stylesheet><script src=/js/script.js></script></head><body class="td-page td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a class=navbar-brand href=/en/><span class=navbar-logo></span><span class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0"><li class="nav-item mr-4 mb-2 mb-lg-0"><a class="nav-link active" href=/en/overview/><span class=active>Overview</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/docs3-v2/><span>SDK Manual</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/blog/><span>Blog</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/download/><span>Download</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=https://start.dubbo.apache.org/bootstrap.html target=_blank><span>Initializer</span><i class='fas fa-external-link-alt'></i></a></li><li class="nav-item dropdown d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdownMenuLink role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>English</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/zh-cn/>中文</a></div></li><li class="nav-item dropdown d-lg-block"><div class="nav-item d-none d-lg-block"></div></li></ul></div></nav><section class="header-hero text-white pb-0 light-text"></section></header><div class="container-fluid td-outer"><div class=td-main><div class="row flex-md-nowrap"><div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none"><script>$(function(){$("#td-section-nav a").removeClass("active"),$("#td-section-nav #m-enoverviewtasksmeshproxyless").addClass("active"),$("#td-section-nav #m-enoverviewtasksmeshproxyless-li span").addClass("td-sidebar-nav-active-item"),$("#td-section-nav #m-enoverviewtasksmeshproxyless").parents("li").addClass("active-path"),$("#td-section-nav li.active-path").addClass("show"),$("#td-section-nav li.active-path").children("input").prop("checked",!0),$("#td-section-nav #m-enoverviewtasksmeshproxyless-li").siblings("li").addClass("show"),$("#td-section-nav #m-enoverviewtasksmeshproxyless-li").children("ul").children("li").addClass("show"),$("#td-sidebar-menu").toggleClass("d-none")})</script><div id=td-sidebar-menu class="td-sidebar__inner d-none"><div id=content-mobile><form class="td-sidebar__search d-flex align-items-center"><button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav foldable-nav" id=td-section-nav><ul class="td-sidebar-nav__section pr-md-3 ul-0"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverview-li><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewwhat-li><input type=checkbox id=m-enoverviewwhat-check>
<label for=m-enoverviewwhat-check><a href=/en/overview/what/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewwhat><span>What is Dubbo</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewwhatoverview-li><input type=checkbox id=m-enoverviewwhatoverview-check>
<label for=m-enoverviewwhatoverview-check><a href=/en/overview/what/overview/ title="Introduction to Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewwhatoverview><span>Introduction</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewwhatdubbo3-li><input type=checkbox id=m-enoverviewwhatdubbo3-check>
<label for=m-enoverviewwhatdubbo3-check><a href=/en/overview/what/dubbo3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewwhatdubbo3><span>Dubbo 3 Quick Facts</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewwhatarchitecture-li><input type=checkbox id=m-enoverviewwhatarchitecture-check>
<label for=m-enoverviewwhatarchitecture-check><a href=/en/overview/what/architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewwhatarchitecture><span>Architecture</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewwhatextensibility-li><input type=checkbox id=m-enoverviewwhatextensibility-check>
<label for=m-enoverviewwhatextensibility-check><a href=/en/overview/what/extensibility/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewwhatextensibility><span>Extensibility</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewwhatecosystem-li><input type=checkbox id=m-enoverviewwhatecosystem-check>
<label for=m-enoverviewwhatecosystem-check><a href=/en/overview/what/ecosystem/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewwhatecosystem><span>Ecosystem</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewquickstart-li><input type=checkbox id=m-enoverviewquickstart-check>
<label for=m-enoverviewquickstart-check><a href=/en/overview/quickstart/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewquickstart><span>Quick Start</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewquickstartgo-li><input type=checkbox id=m-enoverviewquickstartgo-check>
<label for=m-enoverviewquickstartgo-check><a href=/en/overview/quickstart/go/ title="Quick Start With Golang" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewquickstartgo><span>Quick Start</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewquickstartrust-li><input type=checkbox id=m-enoverviewquickstartrust-check>
<label for=m-enoverviewquickstartrust-check><a href=/en/overview/quickstart/rust/ title="Quick Start With Rust" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewquickstartrust><span>Quick Start</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewtasks-li><input type=checkbox id=m-enoverviewtasks-check>
<label for=m-enoverviewtasks-check><a href=/en/overview/tasks/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewtasks><span>Tasks</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewtaskstraffic-management-li><input type=checkbox id=m-enoverviewtaskstraffic-management-check>
<label for=m-enoverviewtaskstraffic-management-check><a href=/en/overview/tasks/traffic-management/ title="Traffic Management" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewtaskstraffic-management><span>Traffic Governance</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskstraffic-managementweight-li><input type=checkbox id=m-enoverviewtaskstraffic-managementweight-check>
<label for=m-enoverviewtaskstraffic-managementweight-check><a href=/en/overview/tasks/traffic-management/weight/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskstraffic-managementweight><span>Adjust traffic distribution by weight</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskstraffic-managementtimeout-li><input type=checkbox id=m-enoverviewtaskstraffic-managementtimeout-check>
<label for=m-enoverviewtaskstraffic-managementtimeout-check><a href=/en/overview/tasks/traffic-management/timeout/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskstraffic-managementtimeout><span>Dynamic adjustment of service timeout</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskstraffic-managementtraffic-routing-li><input type=checkbox id=m-enoverviewtaskstraffic-managementtraffic-routing-check>
<label for=m-enoverviewtaskstraffic-managementtraffic-routing-check><a href=/en/overview/tasks/traffic-management/traffic-routing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskstraffic-managementtraffic-routing><span>Request Routing</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskstraffic-managementzone-li><input type=checkbox id=m-enoverviewtaskstraffic-managementzone-check>
<label for=m-enoverviewtaskstraffic-managementzone-check><a href=/en/overview/tasks/traffic-management/zone/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskstraffic-managementzone><span>Same computer room/area priority</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskstraffic-managementisolation-li><input type=checkbox id=m-enoverviewtaskstraffic-managementisolation-check>
<label for=m-enoverviewtaskstraffic-managementisolation-check><a href=/en/overview/tasks/traffic-management/isolation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskstraffic-managementisolation><span>Temporarily kick out the problem service instance</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskstraffic-managementtraffic-gray-li><input type=checkbox id=m-enoverviewtaskstraffic-managementtraffic-gray-check>
<label for=m-enoverviewtaskstraffic-managementtraffic-gray-check><a href=/en/overview/tasks/traffic-management/traffic-gray/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskstraffic-managementtraffic-gray><span>Traffic Grayscale</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskstraffic-managementtraffic-condition-li><input type=checkbox id=m-enoverviewtaskstraffic-managementtraffic-condition-check>
<label for=m-enoverviewtaskstraffic-managementtraffic-condition-check><a href=/en/overview/tasks/traffic-management/traffic-condition/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskstraffic-managementtraffic-condition><span>Traffic Isolation</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewtaskskubernetes-li><input type=checkbox id=m-enoverviewtaskskubernetes-check>
<label for=m-enoverviewtaskskubernetes-check><a href=/en/overview/tasks/kubernetes/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewtaskskubernetes><span>Kubernetes Deployment Solution</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskskubernetesdeploy-on-k8s-li><input type=checkbox id=m-enoverviewtaskskubernetesdeploy-on-k8s-check>
<label for=m-enoverviewtaskskubernetesdeploy-on-k8s-check><a href=/en/overview/tasks/kubernetes/deploy-on-k8s/ title="Deploying to Kubernetes" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskskubernetesdeploy-on-k8s><span>Native K8S Service based on API-SERVER</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewtasksmesh-li><input type=checkbox id=m-enoverviewtasksmesh-check>
<label for=m-enoverviewtasksmesh-check><a href=/en/overview/tasks/mesh/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewtasksmesh><span>Mesh Deployment Solution</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksmeshdubbo-mesh-li><input type=checkbox id=m-enoverviewtasksmeshdubbo-mesh-check>
<label for=m-enoverviewtasksmeshdubbo-mesh-check><a href=/en/overview/tasks/mesh/dubbo-mesh/ title="Dubbo proxy mesh using Envoy & Istio" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksmeshdubbo-mesh><span>Sidecar mode</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksmeshproxyless-li><input type=checkbox id=m-enoverviewtasksmeshproxyless-check>
<label for=m-enoverviewtasksmeshproxyless-check><a href=/en/overview/tasks/mesh/proxyless/ title="Istio + Proxyless" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksmeshproxyless><span>Proxyless mode</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewtaskstriple-li><input type=checkbox id=m-enoverviewtaskstriple-check>
<label for=m-enoverviewtaskstriple-check><a href=/en/overview/tasks/triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewtaskstriple><span>Triple Usage Example</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskstripleidl-li><input type=checkbox id=m-enoverviewtaskstripleidl-check>
<label for=m-enoverviewtaskstripleidl-check><a href=/en/overview/tasks/triple/idl/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskstripleidl><span>Using IDL + Protobuf to define services across languages</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskstriplewrap-li><input type=checkbox id=m-enoverviewtaskstriplewrap-check>
<label for=m-enoverviewtaskstriplewrap-check><a href=/en/overview/tasks/triple/wrap/ title="Pojo Serialization Compatibility Mode" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskstriplewrap><span>Pojo serialization compatibility mode</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtaskstriplestreaming-li><input type=checkbox id=m-enoverviewtaskstriplestreaming-check>
<label for=m-enoverviewtaskstriplestreaming-check><a href=/en/overview/tasks/triple/streaming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtaskstriplestreaming><span>Streaming communication mode</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewtasksmigration-li><input type=checkbox id=m-enoverviewtasksmigration-check>
<label for=m-enoverviewtasksmigration-check><a href=/en/overview/tasks/migration/ title="How to smoothly migrate to the new functions of Dubbo3" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewtasksmigration><span>Migrate to Dubbo3</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksmigration2to3-li><input type=checkbox id=m-enoverviewtasksmigration2to3-check>
<label for=m-enoverviewtasksmigration2to3-check><a href=/en/overview/tasks/migration/2to3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksmigration2to3><span>Upgrade to Dubbo3</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksmigrationmigration-triple-li><input type=checkbox id=m-enoverviewtasksmigrationmigration-triple-check>
<label for=m-enoverviewtasksmigrationmigration-triple-check><a href=/en/overview/tasks/migration/migration-triple/ title="Guide to Migrating Dubbo Protocol to Triple Protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksmigrationmigration-triple><span>Triple Protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksmigrationservice-discovery-samples-li><input type=checkbox id=m-enoverviewtasksmigrationservice-discovery-samples-check>
<label for=m-enoverviewtasksmigrationservice-discovery-samples-check><a href=/en/overview/tasks/migration/service-discovery-samples/ title="Dubbo3 application-level service discovery" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksmigrationservice-discovery-samples><span>Application-Level Service Discovery</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewtasksecosystem-li><input type=checkbox id=m-enoverviewtasksecosystem-check>
<label for=m-enoverviewtasksecosystem-check><a href=/en/overview/tasks/ecosystem/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewtasksecosystem><span>Microservice Governance</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksecosystemtransaction-li><input type=checkbox id=m-enoverviewtasksecosystemtransaction-check>
<label for=m-enoverviewtasksecosystemtransaction-check><a href=/en/overview/tasks/ecosystem/transaction/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksecosystemtransaction><span>Transaction Management</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksecosystemrate-limit-li><input type=checkbox id=m-enoverviewtasksecosystemrate-limit-check>
<label for=m-enoverviewtasksecosystemrate-limit-check><a href=/en/overview/tasks/ecosystem/rate-limit/ title="Current Limit Downgrade" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksecosystemrate-limit><span>Current limit downgrade</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewtasksextensibility-li><input type=checkbox id=m-enoverviewtasksextensibility-check>
<label for=m-enoverviewtasksextensibility-check><a href=/en/overview/tasks/extensibility/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewtasksextensibility><span>Custom Extensions</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksextensibilityprotocol-li><input type=checkbox id=m-enoverviewtasksextensibilityprotocol-check>
<label for=m-enoverviewtasksextensibilityprotocol-check><a href=/en/overview/tasks/extensibility/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksextensibilityprotocol><span>Protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksextensibilityregistry-li><input type=checkbox id=m-enoverviewtasksextensibilityregistry-check>
<label for=m-enoverviewtasksextensibilityregistry-check><a href=/en/overview/tasks/extensibility/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksextensibilityregistry><span>Registry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksextensibilityrouter-li><input type=checkbox id=m-enoverviewtasksextensibilityrouter-check>
<label for=m-enoverviewtasksextensibilityrouter-check><a href=/en/overview/tasks/extensibility/router/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksextensibilityrouter><span>Router</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewtasksextensibilityfilter-li><input type=checkbox id=m-enoverviewtasksextensibilityfilter-check>
<label for=m-enoverviewtasksextensibilityfilter-check><a href=/en/overview/tasks/extensibility/filter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewtasksextensibilityfilter><span>Custom extension</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewmannual-li><input type=checkbox id=m-enoverviewmannual-check>
<label for=m-enoverviewmannual-check><a href=/en/overview/mannual/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewmannual><span>SDK Manual</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewmannualjava-li><input type=checkbox id=m-enoverviewmannualjava-check>
<label for=m-enoverviewmannualjava-check><a href=/en/docs3-v2/java-sdk/ title="Java SDK" target=_blank rel=noopener class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewmannualjava><span>Java</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewmannualgolang-li><input type=checkbox id=m-enoverviewmannualgolang-check>
<label for=m-enoverviewmannualgolang-check><a href=/en/docs3-v2/golang-sdk/ title="Golang SDK" target=_blank rel=noopener class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewmannualgolang><span>Golang</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewmannualrust-li><input type=checkbox id=m-enoverviewmannualrust-check>
<label for=m-enoverviewmannualrust-check><a href=/en/docs3-v2/rust-sdk/ title="Rust SDK" target=_blank rel=noopener class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewmannualrust><span>Rust</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewcore-features-li><input type=checkbox id=m-enoverviewcore-features-check>
<label for=m-enoverviewcore-features-check><a href=/en/overview/core-features/ title="Core Features" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewcore-features><span>Features</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featuresservice-definition-li><input type=checkbox id=m-enoverviewcore-featuresservice-definition-check>
<label for=m-enoverviewcore-featuresservice-definition-check><a href=/en/overview/core-features/service-definition/ title="Develop microservice with Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featuresservice-definition><span>Microservice develop</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featuresservice-mesh-li><input type=checkbox id=m-enoverviewcore-featuresservice-mesh-check>
<label for=m-enoverviewcore-featuresservice-mesh-check><a href=/en/overview/core-features/service-mesh/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featuresservice-mesh><span>Service Mesh</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featuresservice-discovery-li><input type=checkbox id=m-enoverviewcore-featuresservice-discovery-check>
<label for=m-enoverviewcore-featuresservice-discovery-check><a href=/en/overview/core-features/service-discovery/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featuresservice-discovery><span>Service Discovery</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featuresmore-li><input type=checkbox id=m-enoverviewcore-featuresmore-check>
<label for=m-enoverviewcore-featuresmore-check><a href=/en/overview/core-features/more/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featuresmore><span>More Advanced Features</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featuresload-balance-li><input type=checkbox id=m-enoverviewcore-featuresload-balance-check>
<label for=m-enoverviewcore-featuresload-balance-check><a href=/en/overview/core-features/load-balance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featuresload-balance><span>Load Balancing</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewcore-featurestraffic-li><input type=checkbox id=m-enoverviewcore-featurestraffic-check>
<label for=m-enoverviewcore-featurestraffic-check><a href=/en/overview/core-features/traffic/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewcore-featurestraffic><span>流量管控</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featurestrafficcondition-rule-li><input type=checkbox id=m-enoverviewcore-featurestrafficcondition-rule-check>
<label for=m-enoverviewcore-featurestrafficcondition-rule-check><a href=/en/overview/core-features/traffic/condition-rule/ title="Conditional Routing Rules" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featurestrafficcondition-rule><span>Conditional Routing</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featurestraffictag-rule-li><input type=checkbox id=m-enoverviewcore-featurestraffictag-rule-check>
<label for=m-enoverviewcore-featurestraffictag-rule-check><a href=/en/overview/core-features/traffic/tag-rule/ title=标签路由规则 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featurestraffictag-rule><span>标签路由</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featurestrafficscript-rule-li><input type=checkbox id=m-enoverviewcore-featurestrafficscript-rule-check>
<label for=m-enoverviewcore-featurestrafficscript-rule-check><a href=/en/overview/core-features/traffic/script-rule/ title=脚本路由规则 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featurestrafficscript-rule><span>脚本路由</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featurestrafficconfiguration-rule-li><input type=checkbox id=m-enoverviewcore-featurestrafficconfiguration-rule-check>
<label for=m-enoverviewcore-featurestrafficconfiguration-rule-check><a href=/en/overview/core-features/traffic/configuration-rule/ title=动态配置规则 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featurestrafficconfiguration-rule><span>动态配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featurestrafficmesh-rule-li><input type=checkbox id=m-enoverviewcore-featurestrafficmesh-rule-check>
<label for=m-enoverviewcore-featurestrafficmesh-rule-check><a href=/en/overview/core-features/traffic/mesh-rule/ title=基于服务网格的路由规则 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featurestrafficmesh-rule><span>服务网格</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featuresprotocols-li><input type=checkbox id=m-enoverviewcore-featuresprotocols-check>
<label for=m-enoverviewcore-featuresprotocols-check><a href=/en/overview/core-features/protocols/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featuresprotocols><span>Protocols</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featuresextensibility-li><input type=checkbox id=m-enoverviewcore-featuresextensibility-check>
<label for=m-enoverviewcore-featuresextensibility-check><a href=/en/overview/core-features/extensibility/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featuresextensibility><span>Extensibility Adaptation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featuresobservability-li><input type=checkbox id=m-enoverviewcore-featuresobservability-check>
<label for=m-enoverviewcore-featuresobservability-check><a href=/en/overview/core-features/observability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featuresobservability><span>Observability</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featuressecurity-li><input type=checkbox id=m-enoverviewcore-featuressecurity-check>
<label for=m-enoverviewcore-featuressecurity-check><a href=/en/overview/core-features/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featuressecurity><span>Authentication</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewcore-featuresecosystem-li><input type=checkbox id=m-enoverviewcore-featuresecosystem-check>
<label for=m-enoverviewcore-featuresecosystem-check><a href=/en/overview/core-features/ecosystem/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewcore-featuresecosystem><span>Microservices Ecosystem</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enoverviewnotices-li><input type=checkbox id=m-enoverviewnotices-check>
<label for=m-enoverviewnotices-check><a href=/en/overview/notices/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enoverviewnotices><span>Security Notice</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewnoticesserialization-li><input type=checkbox id=m-enoverviewnoticesserialization-check>
<label for=m-enoverviewnoticesserialization-check><a href=/en/overview/notices/serialization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewnoticesserialization><span>Serialization Security</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewnoticesprotocol-li><input type=checkbox id=m-enoverviewnoticesprotocol-check>
<label for=m-enoverviewnoticesprotocol-check><a href=/en/overview/notices/protocol/ title="RPC Protocol Security" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewnoticesprotocol><span>RPC protocol security</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewnoticesregistry-li><input type=checkbox id=m-enoverviewnoticesregistry-check>
<label for=m-enoverviewnoticesregistry-check><a href=/en/overview/notices/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewnoticesregistry><span>Registration Center Security</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewnoticesadmin-li><input type=checkbox id=m-enoverviewnoticesadmin-check>
<label for=m-enoverviewnoticesadmin-check><a href=/en/overview/notices/admin/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewnoticesadmin><span>Dubbo Admin Security</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enoverviewnoticeslog4j-li><input type=checkbox id=m-enoverviewnoticeslog4j-check>
<label for=m-enoverviewnoticeslog4j-check><a href=/en/overview/notices/log4j/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enoverviewnoticeslog4j><span>Log4j vulnerability impact</span></a></label></li></ul></li></ul></li></ul></nav></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/overview/>Overview</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/overview/tasks/>Tasks</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/overview/tasks/mesh/>Mesh Deployment Solution</a></li><li class="breadcrumb-item active" aria-current=page><a href=https://cn.dubbo.apache.org/en/overview/tasks/mesh/proxyless/ aria-disabled=true class="btn-link disabled">Proxyless mode</a></li></ol></nav><div class=td-content><h1>Istio + Proxyless</h1><header class=article-meta></header><p>Proxyless mode means that Dubbo communicates directly with Istiod, and implements service discovery and service governance capabilities through the xDS protocol.
In this example, a simple example will be used to demonstrate how to use the Proxyless mode.</p><p><a href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/registry/dubbo-samples-xds>Sample Address</a></p><h2 id=code-structure>code structure</h2><p>This section mainly introduces the code structure of the example used in this article. By imitating the relevant configuration in this example and modifying the existing project code, the existing project can quickly run in Proxyless Mesh mode.</p><h3 id=1-interface-definition>1. Interface definition</h3><p>In order to make the example simple enough, a simple interface definition is used here, and only the parameters are spliced ​​to be returned.</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:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>GreetingService</span> {
</span></span><span style=display:flex><span> String <span style=color:#268bd2>sayHello</span>(String name);
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=2-interface-implementation>2. Interface implementation</h3><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:#268bd2>@DubboService</span>(version <span style=color:#719e07>=</span> <span style=color:#2aa198>&#34;1.0.0&#34;</span>)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>AnnotatedGreetingService</span> <span style=color:#268bd2>implements</span> GreetingService {
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Override</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span>(String name) {
</span></span><span style=display:flex><span> System.out.println(<span style=color:#2aa198>&#34;greeting service received: &#34;</span> <span style=color:#719e07>+</span> name);
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> <span style=color:#2aa198>&#34;hello, &#34;</span> <span style=color:#719e07>+</span> name <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;! from host: &#34;</span> <span style=color:#719e07>+</span> NetUtils. <span style=color:#268bd2>getLocalHost</span>();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=3-client-subscription-method>3. Client subscription method</h3><p>**Because the native xDS protocol cannot support the mapping from interface to application name, it is necessary to configure the <code>providedBy</code> parameter to mark which application this service comes from. **</p><p>In the future, we will realize automatic <a href=/en/docs3-v2/java-sdk/concepts-and-architecture/service-discovery/>service mapping</a> relationship acquisition based on the control plane of Dubbo Mesh, and there will be no need for independent configuration parameters at that time. Dubbo can be run under the Mesh system, so stay tuned.</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:#268bd2>@Component</span>(<span style=color:#2aa198>&#34;annotated Consumer&#34;</span>)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>GreetingServiceConsumer</span> {
</span></span><span style=display:flex><span> <span style=color:#268bd2>@DubboReference</span>(version <span style=color:#719e07>=</span> <span style=color:#2aa198>&#34;1.0.0&#34;</span>, providedBy <span style=color:#719e07>=</span> <span style=color:#2aa198>&#34;dubbo-samples-xds-provider&#34;</span>)
</span></span><span style=display:flex><span> <span style=color:#268bd2>private</span> GreetingService greetingService;
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> String <span style=color:#268bd2>doSayHello</span>(String name) {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> greetingService.sayHello(name);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=4-server-configuration>4. Server configuration</h3><p>The server configuration registration center is the address of istio, and the protocol is xds.</p><p>We recommend configuring <code>protocol</code> to be the tri protocol (fully compatible with the grpc protocol) for a better experience in the istio system.</p><p>In order to make Kubernetes aware of the state of the application, it is necessary to configure <code>qosAcceptForeignIp</code> parameter so that Kubernetes can obtain the correct application state, [alignment lifecycle](/en/docs3-v2/java-sdk/advanced-features-and-usage/ others/dubbo-kubernetes-probe/).</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-properties data-lang=properties><span style=display:flex><span>dubbo.application.name<span style=color:#719e07>=</span><span style=color:#2aa198>dubbo-samples-xds-provider</span>
</span></span><span style=display:flex><span>dubbo.application.metadataServicePort<span style=color:#719e07>=</span><span style=color:#2aa198>20885</span>
</span></span><span style=display:flex><span>dubbo.registry.address<span style=color:#719e07>=</span><span style=color:#2aa198>xds://istiod.istio-system.svc:15012</span>
</span></span><span style=display:flex><span>dubbo.protocol.name<span style=color:#719e07>=</span><span style=color:#2aa198>tri</span>
</span></span><span style=display:flex><span>dubbo.protocol.port<span style=color:#719e07>=</span><span style=color:#2aa198>50052</span>
</span></span><span style=display:flex><span>dubbo.application.qosAcceptForeignIp<span style=color:#719e07>=</span><span style=color:#2aa198>true</span>
</span></span></code></pre></div><h3 id=5-client-configuration>5. Client Configuration</h3><p>The client configuration registration center is the address of istio, and the protocol is 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-properties data-lang=properties><span style=display:flex><span>dubbo.application.name<span style=color:#719e07>=</span><span style=color:#2aa198>dubbo-samples-xds-consumer</span>
</span></span><span style=display:flex><span>dubbo.application.metadataServicePort<span style=color:#719e07>=</span><span style=color:#2aa198>20885</span>
</span></span><span style=display:flex><span>dubbo.registry.address<span style=color:#719e07>=</span><span style=color:#2aa198>xds://istiod.istio-system.svc:15012</span>
</span></span><span style=display:flex><span>dubbo.application.qosAcceptForeignIp<span style=color:#719e07>=</span><span style=color:#2aa198>true</span>
</span></span></code></pre></div><h2 id=quick-start>Quick start</h2><h3 id=step-1-build-the-kubernetes-environment>Step 1: Build the Kubernetes environment</h3><p>Currently Dubbo only supports Mesh deployment in the Kubernetes environment, so you need to build the Kubernetes environment before running and starting this example.</p><p>Build reference documents:</p><blockquote><p><a href=https://kubernetes.io/zh-cn/docs/tutorials/hello-minikube/>minikube(https://kubernetes.io/zh-cn/docs/tutorials/hello-minikube/)</a></p><p>[kubeadm(https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/)](<a href=https://kubernetes.io/zh-cn/docs/setup/production-environment/tools>https://kubernetes.io/zh-cn/docs/setup/production-environment/tools</a> /)</p><p><a href=https://k3s.io/>k3s(https://k3s.io/)</a></p></blockquote><h3 id=step-2-build-the-istio-environment>Step 2: Build the Istio environment</h3><p>Build the Istio environment reference document:</p><p><a href=https://istio.io/latest/docs/setup/getting-started/>Istio Installation Documentation (https://istio.io/latest/docs/setup/getting-started/)</a></p><p>Note: When installing Istio, you need to enable [first-party-jwt support](<a href=https://istio.io/latest/docs/ops/best-practices/security/#configure-third-party-service-account->https://istio.io/latest/docs/ops/best-practices/security/#configure-third-party-service-account-</a> tokens) (add the parameter <code>--set values.global.jwtPolicy=first-party-jwt</code> when using the <code>istioctl</code> tool to install)**, otherwise it will cause the problem of client authentication failure.</p><p>Attached installation command reference:</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-bash data-lang=bash><span style=display:flex><span>curl -L https://istio.io/downloadIstio | sh -
</span></span><span style=display:flex><span><span style=color:#b58900>cd</span> istio-1.xx.x
</span></span><span style=display:flex><span><span style=color:#b58900>export</span> <span style=color:#268bd2>PATH</span><span style=color:#719e07>=</span><span style=color:#268bd2>$PWD</span>/bin:<span style=color:#268bd2>$PATH</span>
</span></span><span style=display:flex><span>istioctl install --set <span style=color:#268bd2>profile</span><span style=color:#719e07>=</span>demo --set values.global.jwtPolicy<span style=color:#719e07>=</span>first-party-jwt -y
</span></span></code></pre></div><h3 id=step-3-pull-the-code-and-build>Step 3: Pull the code and build</h3><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-bash data-lang=bash><span style=display:flex><span>git clone https://github.com/apache/dubbo-samples.git
</span></span><span style=display:flex><span><span style=color:#b58900>cd</span> dubbo-samples/dubbo-samples-xds
</span></span><span style=display:flex><span>mvn clean package -DskipTests
</span></span></code></pre></div><h3 id=step-4-build-the-image>Step 4: Build the image</h3><p>Since Kubernetes adopts containerized deployment, the code needs to be packaged in a mirror before deployment.</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-bash data-lang=bash><span style=display:flex><span><span style=color:#b58900>cd</span> ./dubbo-samples-xds-provider/
</span></span><span style=display:flex><span><span style=color:#586e75># dubbo-samples-xds/dubbo-samples-xds-provider/Dockerfile</span>
</span></span><span style=display:flex><span>docker build -t apache/dubbo-demo:dubbo-samples-xds-provider_0.0.1 .
</span></span><span style=display:flex><span><span style=color:#b58900>cd</span> ../dubbo-samples-xds-consumer/
</span></span><span style=display:flex><span><span style=color:#586e75># dubbo-samples-xds/dubbo-samples-xds-consumer/Dockerfile</span>
</span></span><span style=display:flex><span>docker build -t apache/dubbo-demo:dubbo-samples-xds-consumer_0.0.1 .
</span></span><span style=display:flex><span><span style=color:#b58900>cd</span> ../
</span></span></code></pre></div><h3 id=step-5-create-namespace>Step 5: Create namespace</h3><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-bash data-lang=bash><span style=display:flex><span><span style=color:#586e75># Initialize the namespace</span>
</span></span><span style=display:flex><span>kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-samples/master/dubbo-samples-xds/deploy/Namespace.yml
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75># switch namespace</span>
</span></span><span style=display:flex><span>kubens dubbo-demo
</span></span></code></pre></div><h3 id=step-6-deploy-the-container>Step 6: Deploy the container</h3><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-bash data-lang=bash><span style=display:flex><span><span style=color:#b58900>cd</span> ./dubbo-samples-xds-provider/src/main/resources/k8s
</span></span><span style=display:flex><span><span style=color:#586e75># dubbo-samples-xds/dubbo-samples-xds-provider/src/main/resources/k8s/Deployment.yml</span>
</span></span><span style=display:flex><span><span style=color:#586e75># dubbo-samples-xds/dubbo-samples-xds-provider/src/main/resources/k8s/Service.yml</span>
</span></span><span style=display:flex><span>kubectl apply -f Deployment.yml
</span></span><span style=display:flex><span>kubectl apply -f Service.yml
</span></span><span style=display:flex><span><span style=color:#b58900>cd</span> ../../../../../dubbo-samples-xds-consumer/src/main/resources/k8s
</span></span><span style=display:flex><span><span style=color:#586e75># dubbo-samples-xds/dubbo-samples-xds-consumer/src/main/resources/k8s/Deployment.yml</span>
</span></span><span style=display:flex><span>kubectl apply -f Deployment.yml
</span></span><span style=display:flex><span><span style=color:#b58900>cd</span> ../../../../../
</span></span></code></pre></div><p>Looking at the log of the consumer, you can observe the following log:</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-fallback data-lang=fallback><span style=display:flex><span>result: hello, xDS Consumer! from host: 172.17.0.5
</span></span><span style=display:flex><span>result: hello, xDS Consumer! from host: 172.17.0.5
</span></span><span style=display:flex><span>result: hello, xDS Consumer! from host: 172.17.0.6
</span></span><span style=display:flex><span>result: hello, xDS Consumer! from host: 172.17.0.6
</span></span></code></pre></div><h2 id=common-problem>common problem</h2><ol><li>Configure a separate Istio cluster <code>clusterId</code></li></ol><p>Usually the <code>clusterId</code> of Istio under the Kubernetes system is <code>Kubernetes</code>, if you are using a self-built istio production cluster or a cluster provided by a cloud vendor, you may need to configure <code>clusterId</code>.</p><p>Configuration method: Specify the <code>ISTIO_META_CLUSTER_ID</code> environment variable as the desired <code>clusterId</code>.</p><p>Reference configuration:</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-yaml data-lang=yaml><span style=display:flex><span><span style=color:#268bd2>apiVersion</span>: apps/v1
</span></span><span style=display:flex><span><span style=color:#268bd2>kind</span>: Deployment
</span></span><span style=display:flex><span><span style=color:#268bd2>metadata</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>name</span>: dubbo-samples-xds-consumer
</span></span><span style=display:flex><span><span style=color:#268bd2>spec</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>selector</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>matchLabels</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>demo</span>: consumer
</span></span><span style=display:flex><span> <span style=color:#268bd2>replicas</span>: <span style=color:#2aa198>2</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>template</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>metadata</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>labels</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>demo</span>: consumer
</span></span><span style=display:flex><span> <span style=color:#268bd2>spec</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>containers</span>:
</span></span><span style=display:flex><span> - <span style=color:#268bd2>env</span>:
</span></span><span style=display:flex><span> - <span style=color:#268bd2>name</span>: ISTIO_META_CLUSTER_ID
</span></span><span style=display:flex><span> <span style=color:#268bd2>value</span>: Kubernetes
</span></span><span style=display:flex><span> <span style=color:#268bd2>name</span>: dubbo-samples-xds-provider
</span></span><span style=display:flex><span> <span style=color:#268bd2>image</span>: xxx
</span></span></code></pre></div><p>How to get <code>clusterId</code>:</p><blockquote><p>kubectl describe pod -n istio-system istiod-58b4f65df9-fq2ks
Read the value of <code>CLUSTER_ID</code> in the environment variable</p></blockquote><ol start=2><li>Istio authentication failed</li></ol><p>Since the current Dubbo version does not support istio&rsquo;s <code>third-party-jwt</code> authentication, it is necessary to configure <code>jwtPolicy</code> to <code>first-party-jwt</code>.</p><ol start=3><li>providedBy</li></ol><p>Since the current Dubbo version is limited by the communication model of istio and cannot obtain the application name corresponding to the interface, it is necessary to configure the <code>providedBy</code> parameter to mark which application the service comes from.
In the future, we will realize automatic <a href=/en/docs3-v2/java-sdk/concepts-and-architecture/service-discovery/>service mapping</a> relationship acquisition based on the control plane of Dubbo Mesh, and there will be no need for independent configuration parameters at that time. Dubbo can be run under the Mesh system, so stay tuned.</p><ol start=4><li>protocol name</li></ol><p>In Proxyless mode, application-level service discovery uses <code>Kubernetes Native Service</code> for application service discovery, but due to the limitation of istio, it currently only supports traffic interception and forwarding of <code>http</code> protocol and <code>grpc</code> protocol, so <code>Kubernetes Service</code> is configured in When you need to specify the <code>spec.ports.name</code> property to start with <code>http</code> or <code>grpc</code>.
Therefore we recommend using the triple protocol (fully compatible with the grpc protocol). Here, even if <code>name</code> is configured to start with <code>grpc</code>, it is actually a <code>dubbo</code> protocol that can also perform normal service discovery, but it affects the function of traffic routing.</p><p>Reference configuration:</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-yaml data-lang=yaml><span style=display:flex><span><span style=color:#268bd2>apiVersion</span>: v1
</span></span><span style=display:flex><span><span style=color:#268bd2>kind</span>: Service
</span></span><span style=display:flex><span><span style=color:#268bd2>metadata</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>name</span>: dubbo-samples-xds-provider
</span></span><span style=display:flex><span><span style=color:#268bd2>spec</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>clusterIP</span>: None
</span></span><span style=display:flex><span> <span style=color:#268bd2>selector</span>:
</span></span><span style=display:flex><span> <span style=color:#268bd2>demo</span>: provider
</span></span><span style=display:flex><span> <span style=color:#268bd2>ports</span>:
</span></span><span style=display:flex><span> - <span style=color:#268bd2>name</span>: grpc-tri
</span></span><span style=display:flex><span> <span style=color:#268bd2>protocol</span>: TCP
</span></span><span style=display:flex><span> <span style=color:#268bd2>port</span>: <span style=color:#2aa198>50052</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>targetPort</span>: <span style=color:#2aa198>50052</span>
</span></span></code></pre></div><ol start=5><li>metadataServicePort</li></ol><p>Since the metadata discovered by Dubbo 3 application-level services cannot be obtained from istio, it is necessary to use the service introspection mode. This requires that the port of <code>Dubbo MetadataService</code> is unified in the whole cluster.</p><p>Reference configuration:</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-properties data-lang=properties><span style=display:flex><span>dubbo.application.metadataServicePort<span style=color:#719e07>=</span><span style=color:#2aa198>20885</span>
</span></span></code></pre></div><p>In the future, we will realize automatic acquisition of <a href=/en/docs3-v2/java-sdk/concepts-and-architecture/service-discovery/>service metadata</a> based on the control plane of Dubbo Mesh, and no independent configuration parameters will be required at that time. Dubbo can be run under the Mesh system, so stay tuned.</p><ol start=6><li>qosAcceptForeignIp</li></ol><p>Due to the limitations of the working principle of the Kubernetes probe detection mechanism, the originator of the detection request is not <code>localhost</code>, so you need to configure the <code>qosAcceptForeignIp</code> parameter to enable global access.</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-properties data-lang=properties><span style=display:flex><span>dubbo.application.qosAcceptForeignIp<span style=color:#719e07>=</span><span style=color:#2aa198>true</span>
</span></span></code></pre></div><p>Note: There are dangerous commands on the qos port, please evaluate the security of the network first. Even if the qos is not open, it only affects the inability of Kubernetes to obtain the life cycle status of Dubbo.</p><ol start=7><li>Do not need to enable injection</li></ol><p>In Proxyless mode, the pod does not need to enable envoy injection. Please make sure that there is no <code>istio-injection=enabled</code> label in the namespace.</p><ol start=8><li>Plain text connection istiod</li></ol><p>In Proxyless mode, connect to istiod through ssl by default, and also support connecting to istiod through clear text.</p><p>Plain text connection reference configuration:</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-properties data-lang=properties><span style=display:flex><span>dubbo.registry.secure<span style=color:#719e07>=</span><span style=color:#2aa198>plaintext</span>
</span></span></code></pre></div><div id=pre-footer><h2>Feedback</h2><p class=feedback--prompt>Was this page helpful?</p><button class="btn btn-primary mb-4 feedback--yes">Yes</button>
<button class="btn btn-primary mb-4 feedback--no">No</button></div><script>const yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled"),no.disabled=!0,no.classList.add("feedback--button__disabled")};yes.addEventListener("click",()=>{sendFeedback(1),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")}),no.addEventListener("click",()=>{sendFeedback(0),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")})</script><br><div class="text-muted mt-5 pt-3 border-top">Last modified January 2, 2023: <a href=https://github.com/apache/dubbo-website/commit/95a9f4f6c1cbb4425fe12411cd046f4463fee6b5>Enhance en docs (#1798) (95a9f4f6c1c)</a></div></div></main><div class="d-none d-xl-block col-xl-2 td-toc d-print-none"><div class="td-page-meta ml-2 pb-1 pt-2 mb-0"><a href=https://github.com/apache/dubbo-website/edit/master/content/en/overview/tasks/mesh/proxyless.md target=_blank><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="https://github.com/apache/dubbo-website/new/master/content/en/overview/tasks/mesh/proxyless.md?filename=change-me.md&amp;value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" target=_blank><i class="fa fa-edit fa-fw"></i> Create child page</a>
<a href="https://github.com/apache/dubbo-website/issues/new?title=Istio%20+%20Proxyless" target=_blank><i class="fab fa-github fa-fw"></i> Create an issue</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#code-structure>code structure</a><ul><li><a href=#1-interface-definition>1. Interface definition</a></li><li><a href=#2-interface-implementation>2. Interface implementation</a></li><li><a href=#3-client-subscription-method>3. Client subscription method</a></li><li><a href=#4-server-configuration>4. Server configuration</a></li><li><a href=#5-client-configuration>5. Client Configuration</a></li></ul></li><li><a href=#quick-start>Quick start</a><ul><li><a href=#step-1-build-the-kubernetes-environment>Step 1: Build the Kubernetes environment</a></li><li><a href=#step-2-build-the-istio-environment>Step 2: Build the Istio environment</a></li><li><a href=#step-3-pull-the-code-and-build>Step 3: Pull the code and build</a></li><li><a href=#step-4-build-the-image>Step 4: Build the image</a></li><li><a href=#step-5-create-namespace>Step 5: Create namespace</a></li><li><a href=#step-6-deploy-the-container>Step 6: Deploy the container</a></li></ul></li><li><a href=#common-problem>common problem</a></li></ul></nav></div></div></div></div><footer class="bg-dark py-5 row d-print-none footer-margin-0"><div class="container-fluid mx-sm-5"><div class=row><div class="col-6 col-sm-4 text-xs-center order-sm-2"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Dubbo mailing list archive" aria-label="Dubbo mailing list archive"><a class=text-white target=_blank rel="noopener noreferrer" href=https://lists.apache.org/list.html?dev@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-6 col-sm-4 text-right text-xs-center order-sm-3"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub><a class=text-white target=_blank rel="noopener noreferrer" href=https://github.com/apache/dubbo><i class="fab fa-github"></i></a></li><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Subscribe to mailing list" aria-label="Subscribe to mailing list"><a class=text-white target=_blank rel="noopener noreferrer" href=mailto:dev-subscribe@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-12 col-sm-4 text-center py-2 order-sm-2"><small class=text-white>&copy; 2024 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation. All Rights Reserved</small></div></div></div></footer><div class="row pt-2 pb-2 footer-margin-0"><div class="container-fluid mx-sm-5"><div class=text-center id=my-footer><img alt=apache_logo src=/imgs/apache_logo.png><ul><li><a href=https://www.apache.org>Foundation</a></li><li><a href=https://www.apache.org/licenses/>License</a></li><li><a href=https://dubbo.apache.org/en/overview/notices/>Security</a></li><li><a href=https://www.apache.org/events/current-event>Events</a></li><li><a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a></li><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html>Privacy</a></li><li><a href=https://www.apache.org/foundation/thanks.html>Thanks</a></li></ul></div></div></div><script src=/js/popper.min.js integrity=sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49 crossorigin=anonymous></script><script src=/js/bootstrap.min.js integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy crossorigin=anonymous></script><script src=/js/main.min.b075178d232d3b0039b3cb6af2fc2e9d90071820167a60f4eea3a79169975ee8.js integrity="sha256-sHUXjSMtOwA5s8tq8vwunZAHGCAWemD07qOnkWmXXug=" crossorigin=anonymous></script><script async src=https://widget.kapa.ai/kapa-widget.bundle.js data-website-id=d763c4f2-f871-400b-aeca-d986c4af73c2 data-project-name="Apache Dubbo" data-project-color=#E8442E data-button-text="Ask AI" data-search-mode-enabled=true data-modal-open-on-command-k=true data-modal-disclaimer="The AI supports multiple languages, but it may not be accessible in China due to recaptcha, a proxy is required." data-project-logo=https://pbs.twimg.com/profile_images/1011849068283191302/FJbH5vbF_400x400.jpg data-modal-example-questions="What is Apache Dubbo?,How to run Apache Dubbo?" data-button-position-top data-button-position-right=20px data-button-position-bottom=200px data-button-position-left></script><script>(function(e,t,n,s){e[s]=e[s]||[];var a=t.getElementsByTagName(n)[0],i=t.createElement(n);i.async=!0,i.id="beacon-aplus",i.setAttribute("exparams","userid=&aplus&sidx=aplusSidex&ckx=aplusCkx"),i.src="//g.alicdn.com/alilog/mlog/aplus_v2.js",i.crossorigin="anonymous",a.parentNode.insertBefore(i,a)})(window,document,"script","aplus_queue"),function(e){var t=e.createElement("script");t.type="text/javascript",t.async=!0,t.src="//g.alicdn.com/aes/??tracker/3.3.4/index.js,tracker-plugin-pv/3.0.5/index.js,tracker-plugin-event/3.0.0/index.js,tracker-plugin-autolog/3.0.3/index.js,tracker-plugin-survey/3.0.3/index.js,tracker-plugin-jserror/3.0.3/index.js,tracker-plugin-resourceError/3.0.3/index.js",t.onload=function(){window.AES_CONFIG=window.AES_CONFIG||{env:"prod"},window.aes=new AES({pid:"zN245h",user_type:6}),window.AESPluginAutologConfig={exposure:"auto"},window.AEMPluginInstances=[aes.use(AESPluginPV,window.AESPluginPVConfig||{enableHistory:!0}),aes.use(AESPluginEvent,window.AESPluginEventConfig||{}),aes.use(AESPluginSurvey,window.AESPluginEventConfig||{}),aes.use(AESPluginAutolog,window.AESPluginAutologConfig||{}),aes.use(AESPluginJSError,window.AESPluginJSError||{}),aes.use(AESPluginResourceError,window.AESPluginResourceError||{})]},setTimeout(function(){e.getElementsByTagName("body")[0].appendChild(t)},800)}(document)</script></body></html>