{"id":44496890,"url":"https://github.com/kitex-contrib/xds","last_synced_at":"2026-02-13T05:53:09.695Z","repository":{"id":59043412,"uuid":"527541601","full_name":"kitex-contrib/xds","owner":"kitex-contrib","description":"xDS support for Kitex and enables Kitex to perform in Proxyless mode with Istio.","archived":false,"fork":false,"pushed_at":"2024-11-29T02:37:44.000Z","size":492,"stargazers_count":33,"open_issues_count":0,"forks_count":3,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-11-29T03:30:45.908Z","etag":null,"topics":["go","istio","kitex","sdk"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kitex-contrib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-22T11:50:21.000Z","updated_at":"2024-11-29T02:37:39.000Z","dependencies_parsed_at":"2023-01-31T11:01:26.835Z","dependency_job_id":"9d688104-205b-45a3-86ff-13f8bbd730f5","html_url":"https://github.com/kitex-contrib/xds","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":"cloudwego/.github","purl":"pkg:github/kitex-contrib/xds","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitex-contrib%2Fxds","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitex-contrib%2Fxds/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitex-contrib%2Fxds/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitex-contrib%2Fxds/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kitex-contrib","download_url":"https://codeload.github.com/kitex-contrib/xds/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitex-contrib%2Fxds/sbom","scorecard":{"id":561834,"data":{"date":"2025-08-11","repo":{"name":"github.com/kitex-contrib/xds","commit":"c9100afde9d76a388d7bc9ef2b472cfa09707781"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.4,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/pr-check.yml:1","Warn: no topLevel permission defined: .github/workflows/tests.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr-check.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/kitex-contrib/xds/pr-check.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr-check.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/kitex-contrib/xds/pr-check.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr-check.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/kitex-contrib/xds/pr-check.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr-check.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/kitex-contrib/xds/pr-check.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr-check.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/kitex-contrib/xds/pr-check.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr-check.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/kitex-contrib/xds/pr-check.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/kitex-contrib/xds/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/kitex-contrib/xds/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/kitex-contrib/xds/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/kitex-contrib/xds/tests.yml/main?enable=pin","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2024-2611 / GHSA-8r3f-844c-mc37"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T13:56:34.125Z","repository_id":59043412,"created_at":"2025-08-20T13:56:34.125Z","updated_at":"2025-08-20T13:56:34.125Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29397378,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T04:26:15.637Z","status":"ssl_error","status_checked_at":"2026-02-13T04:16:29.732Z","response_time":78,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","istio","kitex","sdk"],"created_at":"2026-02-13T05:53:04.690Z","updated_at":"2026-02-13T05:53:09.688Z","avatar_url":"https://github.com/kitex-contrib.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# xDS support\nEnglish | [中文](README_CN.md)\n\n[xDS](https://www.envoyproxy.io/docs/envoy/latest/api-docs/xds_protocol) is a set of discovery services that enables date-plane to discover various dynamic resources via querying from the management servers.\n\nThis project adds xDS support for Kitex and enables Kitex to perform in Proxyless mode. For more details of the design, please refer to the [proposal](https://github.com/cloudwego/kitex/issues/461).\n\n## Feature\n\n* Service Discovery\n* Traffic Route: supports `exact` `prefix` `regex` match for `header` and `method`\n    * [HTTP route configuration](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_routing#arch-overview-http-routing): configure via [VirtualService](https://istio.io/latest/docs/reference/config/networking/virtual-service/).\n      * Since Istio provides limited support for thrift protocol and most users are familiar with the config of VirtualService, we use a mapping from HTTP to Thrift in this configuration. \n    * [ThriftProxy](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/network/thrift_proxy/v3/thrift_proxy.proto): configure via patching [EnvoyFilter](https://istio.io/latest/docs/reference/config/networking/envoy-filter/).\n      * The configuration in ThriftProxy is very limited.\n* Timeout Configuration:\n    * Configuration inside HTTP route configuration: configure via VirtualService.\n\n* CircuitBreaking\n    * Configuration inside [Cluster](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/outlier_detection.proto) configuration: configure via EnvoyFilter.\n\n* RateLimit\n    * Configuration inside [Local rate Limit](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/local_rate_limit_filter) configuration: configure via EnvoyFilter.\n\n## Usage\nThere are two steps for enabling xDS for Kitex applications: 1. xDS module initialization and 2. Kitex Client/Server Option configuration.\n\n### xDS module\nTo enable xDS mode in Kitex, we should invoke `xds.Init()` to initialize the xds module, including the `xdsResourceManager` and `xdsClient`.\n\n#### Bootstrap\nThe xdsClient is responsible for the interaction with the xDS Server (i.e. Istio). It needs some environment variables for initialization, which need to be set inside the `spec.containers.env` of the Kubernetes Manifest file in YAML format.\n\n*  `POD_NAMESPACE`: the namespace of the current service.\n*  `POD_NAME`: the name of this pod.\n*  `INSTANCE_IP`: the ip of this pod.\n*  `KITEX_XDS_METAS`: the metadata of this xDS node.\n\nAdd the following part to the definition of your container that uses xDS-enabled Kitex client.\n\n```\n- name: POD_NAMESPACE\nvalueFrom:\n  fieldRef:\n    fieldPath: metadata.namespace\n- name: POD_NAME\nvalueFrom:\n  fieldRef:\n    fieldPath: metadata.name\n- name: INSTANCE_IP\nvalueFrom:\n  fieldRef:\n    fieldPath: status.podIP\n- name: KITEX_XDS_METAS\n  value: '{\"CLUSTER_ID\":\"Kubernetes\",\"DNS_AUTO_ALLOCATE\":\"true\",\"DNS_CAPTURE\":\"true\",\"INSTANCE_IPS\":\"$(INSTANCE_IP)\",\"NAMESPACE\":\"$(POD_NAMESPACE)\"}'\n```\n\n### Client-side\n\nFor now, we only provide the support on the client-side. \nTo use a xds-enabled Kitex client, you should specify `destService` using the URL of your target service and add one option `xdssuite.NewClientOption()` that includes `RouteMiddleware` and `Resolver`.\n\n```\n// import \"github.com/kitex-contrib/xds/xdssuite\"\n\nxdssuite.NewClientOption()\n```\n\n* The URL of the target service should be in the format, which follows the format in [Kubernetes](https://kubernetes.io/):\n\n```\n\u003cservice-name\u003e.\u003cnamespace\u003e.svc.cluster.local:\u003cservice-port\u003e\n\u003cservice-name\u003e.\u003cnamespace\u003e.svc:\u003cservice-port\u003e\n\u003cservice-name\u003e.\u003cnamespace\u003e:\u003cservice-port\u003e\n\u003cservice-name\u003e:\u003cservice-port\u003e // access the \u003cservice-name\u003e in same namespace.\n```\n\n#### Traffic route based on Tag Match\n\nWe can define traffic route configuration via [VirtualService](https://istio.io/latest/docs/reference/config/networking/virtual-service/) in Istio.\n\nThe following example indicates that when the tag contains {\"stage\":\"canary\"} in the header, the request will be routed to the `v1` subcluster of `kitex-server`.\n\n```\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n  name: kitex-server\nspec:\n  hosts:\n    - kitex-server\n  http:\n  - name: \"route-based-on-tags\"\n    match:\n      - headers:\n          stage:\n            exact: \"canary\"\n      # support prefix match\n      - headers:\n          stage:\n            prefix: \"can\"\n      # support regex match\n      - headers:\n          stage:\n            regex: \"[canary|prod]\"\n    route:\n    - destination:\n        host: kitex-server\n        subset: v1\n      weight: 100\n    timeout: 0.5s\n```\nThe example of prefix and regex match like this:\n```\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n  name: kitex-server\nspec:\n  hosts:\n    - kitex-server\n  http:\n  - name: \"route-based-on-tags\"\n    match:\n      # support prefix match\n      - headers:\n          stage:\n            prefix: \"can\"\n      # support regex match\n      - headers:\n          stage:\n            regex: \"[canary|prod]\"\n    route:\n    - destination:\n        host: kitex-server\n        subset: v1\n      weight: 100\n    timeout: 0.5s\n```\n\nIn order to match the rules defined in the VirtualService we need to specify the tags (metadata) of the traffic which will be used to match the rules.\n\nFor example: set the key and value to \"stage\" and \"canary\" to match the above rules defined in VirtualService.\n\n* We can first define a MetaExtractor and pass it to `RouterMiddleware` through `xdssuite.WithRouterMetaExtractor`.\n  * Notice: If RouterMetaExtractor is not configured, metainfo.GetAllValues will be used by default.\n```\nvar (\n\trouteKey   = \"stage\"\n\trouteValue = \"canary\"\n)\n\nfunc routeByStage(ctx context.Context) map[string]string {\n\tif v, ok := metainfo.GetValue(ctx, routeKey); ok {\n\t\treturn map[string]string{\n\t\t\trouteKey: v,\n\t\t}\n\t}\n\treturn nil\n}\n\n// add the option\nclient.WithXDSSuite(xds2.ClientSuite{\n\tRouterMiddleware: xdssuite.NewXDSRouterMiddleware(\n\t\t// use this option to specify the meta extractor\n\t\txdssuite.WithRouterMetaExtractor(routeByStage),\n\t),\n\tResolver: xdssuite.NewXDSResolver(),\n}),\n```\n* Set the metadata of the traffic (corresponding to the MetaExtractor) when make RPC Call. \nHere, we use `metainfo.WithValue` to specify the label of the traffic. Metadata will be extracted for route matching.\n```\nctx := metainfo.WithValue(context.Background(), routeKey, routeValue)\n```\n\n#### Traffic route based on Method Match\n\nSame as above, using [VirtualService](https://istio.io/latest/docs/reference/config/networking/virtual-service/) in Istio to define traffic routing configuration.\n\nThe example below shows that requests with method equal to SayHello are routed to the `v1` subcluster of `kitex-server`. It should be noted that when defining rules, you need to include package name and service name, corresponding to `namespace` and `service` in thrift idl.\n\n* uri:  `/${PackageName}.${ServiceName}/${MethodName}`\n\n```\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n  name: kitex-server\nspec:\n  hosts:\n    - kitex-server\n  http:\n  - name: \"route-based-on-path\"\n    match:\n      - uri:\n          # /${PackageName}.${ServiceName}/${MethodName}\n          exact: /proxyless.GreetService/SayHello\n    route:\n    - destination:\n        host: kitex-server\n        subset: v2\n      weight: 100\n    timeout: 0.5s\n```\n\n#### CircuitBreaking\n\n```\napiVersion: networking.istio.io/v1alpha3\nkind: EnvoyFilter\nmetadata:\n  name: circuitbreak\n  # the namespace of pod\n  namespace: default\nspec:\n  configPatches:\n  - applyTo: CLUSTER\n    match:\n      context: SIDECAR_OUTBOUND\n      cluster:\n        # serviceName + namespace + .svc.cluster.local \n        service: kitex-server.default.svc.cluster.local\n    patch:\n      operation: MERGE\n      value:\n        outlier_detection:\n          # the failure percentage threshold\n          failure_percentage_threshold: 10\n          # the failure percentage request volume\n          failure_percentage_request_volume: 101\n  workloadSelector:\n    labels:\n      # the label of the client pod.\n      app.kubernetes.io/name: kitex-client\n```\n\n#### RateLimit\n\n```\napiVersion: networking.istio.io/v1alpha3\nkind: EnvoyFilter\nmetadata:\n  name: filter-local-ratelimit-svc\n  namespace: default\nspec:\n  configPatches:\n    - applyTo: HTTP_FILTER\n      match:\n        context: SIDECAR_INBOUND\n        listener:\n          filterChain:\n            filter:\n              name: \"envoy.filters.network.http_connection_manager\"\n      patch:\n        operation: INSERT_BEFORE\n        value:\n          name: envoy.filters.http.local_ratelimit\n          typed_config:\n            \"@type\": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit\n            stat_prefix: http_local_rate_limiter\n            token_bucket:\n              # the qps limit\n              max_tokens: 4\n              tokens_per_fill: 10\n  workloadSelector:\n    labels:\n      # the label of the server pod.\n      app.kubernetes.io/name: kitex-server\n\n```\n\n#### Retry\n\nSupport using VirtualService and EnvoyFilter to config retry policy, the EnvoyFilter has more configuration.\n\n```\napiVersion: networking.istio.io/v1\nkind: VirtualService\nmetadata:\n  name: retry-sample\n  namespace: default\nspec:\n  hosts:\n  - hello.prod.svc.cluster.local:21001\n  http:\n  - route:\n    - destination:\n        host: hello.prod.svc.cluster.local:21001\n    retries:\n      attempts: 1\n      perTryTimeout: 2s\n```\n\n```\napiVersion: networking.istio.io/v1alpha3\nkind: EnvoyFilter\nmetadata:\n  name: retry-enhance\n  namespace: default\nspec:\n  configPatches:\n  - applyTo: HTTP_ROUTE\n    match:\n      context: SIDECAR_OUTBOUND\n      routeConfiguration:\n        # service name, should obey FQDN\n        name: hello.default.svc.cluster.local:21001\n        vhost: \n          # service name, should obey FQDN\n          name: hello.default.svc.cluster.local:21001\n    patch:\n      operation: MERGE\n      value:\n        route:\n          retryPolicy:\n            numRetries: 3\n            perTryTimeout: 100ms\n            retryBackOff:\n              baseInterval: 100ms\n              maxInterval: 100ms\n            retriableHeaders:\n              - name: \"kitexRetryErrorRate\"\n                stringMatch:\n                  exact: \"0.29\"\n              - name: \"kitexRetryMethods\"\n                stringMatch:\n                  exact: \"Echo,Greet\"\n  workloadSelector:\n    labels:\n      # the label of the service pod.\n      app.kubernetes.io/name: kitex-client\n```\n\n## Example\nThe usage is as follows:\n\n```\nimport (\n\t\"github.com/cloudwego/kitex/client\"\n\t\"github.com/kitex-contrib/xds\"\n\t\"github.com/kitex-contrib/xds/xdssuite\"\n\t\"github.com/cloudwego/kitex-proxyless-test/service/codec/thrift/kitex_gen/proxyless/greetservice\"\n)\n\nfunc main() {\n\t// initialize xds module\n\terr := xds.Init()\n\tif err != nil {\n\t\treturn\n\t}\n\t\n\t// initialize the client\n\tcli, err := greetservice.NewClient(\n\t\tdestService,\n        xdssuite.NewClientOption(),\n\t)\n\t\n\treq := \u0026proxyless.HelloRequest{Message: \"Hello!\"}\n\tresp, err := c.cli.SayHello1(\n\t\tctx, \n\t\treq, \n\t) \n}\n```\n\nDetailed examples can be found here [kitex-proxyless-example](https://github.com/cloudwego/kitex-examples/tree/main/proxyless).\n\n## Limitation\n### mTLS\nmTLS is not supported for now. Please disable mTLS via configuring PeerAuthentication.\n\n```\napiVersion: \"security.istio.io/v1beta1\"\nkind: \"PeerAuthentication\"\nmetadata:\n  name: \"default\"\n  namespace: {your_namespace}\nspec:\n  mtls:\n    mode: DISABLE\n``` \n\n### Limited support for Service Governance\nCurrent version support Service Discovery, Traffic route, Rate Limit, Timeout Configuration via xDS on the client-side and circuit-breaking. \n\nOther features supported via xDS, including Load Balancing etc, will be added in the future.\n\n## Compatibility\nThis package is only tested under Istio1.13.3.\n\nmaintained by: [ppzqh](https://github.com/ppzqh)\n\n## Dependencies\nKitex \u003e= v0.10.3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkitex-contrib%2Fxds","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkitex-contrib%2Fxds","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkitex-contrib%2Fxds/lists"}