This is an automated email from the ASF dual-hosted git repository.
zhongxjian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-kubernetes.git
The following commit(s) were added to refs/heads/master by this push:
new 94325aab Change description and replace networking api (#845)
94325aab is described below
commit 94325aabf10115fa75e0d2d91a0e9ea6b1d7bef5
Author: mfordjody <[email protected]>
AuthorDate: Thu Jan 8 19:21:55 2026 +0800
Change description and replace networking api (#845)
---
.asf.yaml | 9 +++--
README.md | 18 +++++-----
dubbod/planet/pkg/config/kube/crdclient/types.go | 42 ++++++++++++------------
pkg/config/schema/kubeclient/common.go | 4 +--
pkg/config/schema/kubeclient/resources.go | 14 ++++----
pkg/config/schema/kubetypes/resources.go | 6 ++--
pkg/kube/client.go | 10 +++---
7 files changed, 54 insertions(+), 49 deletions(-)
diff --git a/.asf.yaml b/.asf.yaml
index d01745e7..4bdd12a8 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -20,8 +20,8 @@ notifications:
jira_options: link label
github:
- homepage: https://dubbo.apache.org/
- description: "Provides a proxyless service mesh for Dubbo microservices on
Kubernetes."
+ homepage: https://dubbo.apache.org
+ description: "Grant Dubbo the ability to connect, secure, control, and
observe."
features:
# Enable wiki for documentation
wiki: false
@@ -35,7 +35,10 @@ github:
# foo: bar
labels:
- dubbo
- - kubernetes
+ - consul
+ - dubbo-go-pixiu
+ - microservice
- microservices
+ - kubernetes
- service-mesh
diff --git a/README.md b/README.md
index 057959ba..8b663575 100644
--- a/README.md
+++ b/README.md
@@ -6,24 +6,26 @@

<p align="left">
- <a href="https://dubbo.apache.org/">
+ <a href="https://dubbo.apache.org">
<img src="logo/dubbo-transparentbackground-unframed.svg" alt="Apache
Dubbo" title="Apache Dubbo" width="240" height="320" >
</a>
</p>
-This project is an open-source proxyless service mesh for Dubbo microservices.
Built on the Istio control plane architecture, it leverages its core
capabilities and integrates deeply with Kubernetes, providing full service mesh
functionality with minimal resource overhead, enabling high-performance
inter-service communication, traffic management, and security features.
+This project is gRPC service mesh built for Dubbo, with low resource usage,
enabling high-performance inter-service communication, traffic control, and
security.
-## Project Structure
+## Introduction
-The main repositories of Dubbo on Kubernetes include:
+The repositories include:
-- **dubboctl** — The command-line management tool that provides control plane
management, development framework scaffolding, and application deployment.
-- **dubbod** — The dubbo control plane. used to implement a Dubbo proxyless
service mesh.
-- **operator** — Provides user-friendly options to operate the Dubbo proxyless
service mesh.
+- **api** — API definitions for Dubbo.
+- **client-go** — Go client library for the Dubbo API.
+- **dubboctl** — Command-line tool that provides control plane management,
development framework setup, and application deployment capabilities.
+- **dubbod** — The control plane, communicating based on gRPC and xDS APIs.
+- **operator** — Provides user-friendly options for operating the service mesh.
## Quick Start
-Please refer to [official
website](https://cn.dubbo.apache.org/zh-cn/overview/home/)
+Please refer to [official
website](https://cn.dubbo.apache.org/zh-cn/overview/mesh/)
## Contributing
diff --git a/dubbod/planet/pkg/config/kube/crdclient/types.go
b/dubbod/planet/pkg/config/kube/crdclient/types.go
index dca35f46..a4f6d0ab 100644
--- a/dubbod/planet/pkg/config/kube/crdclient/types.go
+++ b/dubbod/planet/pkg/config/kube/crdclient/types.go
@@ -23,12 +23,12 @@ import (
dubboapimetav1alpha1
"github.com/apache/dubbo-kubernetes/api/meta/v1alpha1"
orgapachedubboapinetworkingv1alpha3
"github.com/apache/dubbo-kubernetes/api/networking/v1alpha3"
+ apiorgapachedubboapinetworkingv1alpha3
"github.com/apache/dubbo-kubernetes/client-go/pkg/apis/networking/v1alpha3"
"github.com/apache/dubbo-kubernetes/pkg/config"
"github.com/apache/dubbo-kubernetes/pkg/config/schema/gvk"
"github.com/apache/dubbo-kubernetes/pkg/kube"
"github.com/apache/dubbo-kubernetes/pkg/util/protomarshal"
istioioapisecurityv1beta1 "istio.io/api/security/v1beta1"
- apiistioioapinetworkingv1 "istio.io/client-go/pkg/apis/networking/v1"
apiistioioapisecurityv1 "istio.io/client-go/pkg/apis/security/v1"
k8sioapiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
k8sioapiappsv1 "k8s.io/api/apps/v1"
@@ -59,7 +59,7 @@ func create(c kube.Client, cfg config.Config, objMeta
metav1.ObjectMeta) (metav1
// Use Dynamic client to access it, but reuse Istio's
DestinationRule spec structure
spec :=
cfg.Spec.(*orgapachedubboapinetworkingv1alpha3.DestinationRule)
clonedSpec := protomarshal.Clone(spec)
- obj := &apiistioioapinetworkingv1.DestinationRule{
+ obj := &apiorgapachedubboapinetworkingv1alpha3.DestinationRule{
ObjectMeta: objMeta,
}
assignSpec(&obj.Spec, clonedSpec)
@@ -106,7 +106,7 @@ func create(c kube.Client, cfg config.Config, objMeta
metav1.ObjectMeta) (metav1
// Use Dynamic client to access it, but reuse Istio's
VirtualService spec structure
spec :=
cfg.Spec.(*orgapachedubboapinetworkingv1alpha3.VirtualService)
clonedSpec := protomarshal.Clone(spec)
- obj := &apiistioioapinetworkingv1.VirtualService{
+ obj := &apiorgapachedubboapinetworkingv1alpha3.VirtualService{
ObjectMeta: objMeta,
}
assignSpec(&obj.Spec, clonedSpec)
@@ -152,7 +152,7 @@ func update(c kube.Client, cfg config.Config, objMeta
metav1.ObjectMeta) (metav1
// DestinationRule uses networking.dubbo.apache.org API group,
use Dynamic client
spec :=
cfg.Spec.(*orgapachedubboapinetworkingv1alpha3.DestinationRule)
clonedSpec := protomarshal.Clone(spec)
- obj := &apiistioioapinetworkingv1.DestinationRule{
+ obj := &apiorgapachedubboapinetworkingv1alpha3.DestinationRule{
ObjectMeta: objMeta,
}
assignSpec(&obj.Spec, clonedSpec)
@@ -197,7 +197,7 @@ func update(c kube.Client, cfg config.Config, objMeta
metav1.ObjectMeta) (metav1
// VirtualService uses networking.dubbo.apache.org API group,
use Dynamic client
spec :=
cfg.Spec.(*orgapachedubboapinetworkingv1alpha3.VirtualService)
clonedSpec := protomarshal.Clone(spec)
- obj := &apiistioioapinetworkingv1.VirtualService{
+ obj := &apiorgapachedubboapinetworkingv1alpha3.VirtualService{
ObjectMeta: objMeta,
}
assignSpec(&obj.Spec, clonedSpec)
@@ -242,7 +242,7 @@ func updateStatus(c kube.Client, cfg config.Config, objMeta
metav1.ObjectMeta) (
// DestinationRule uses networking.dubbo.apache.org API group,
use Dynamic client
status := cfg.Status.(*dubboapimetav1alpha1.DubboStatus)
clonedStatus := protomarshal.Clone(status)
- obj := &apiistioioapinetworkingv1.DestinationRule{
+ obj := &apiorgapachedubboapinetworkingv1alpha3.DestinationRule{
ObjectMeta: objMeta,
}
assignSpec(&obj.Status, clonedStatus)
@@ -287,7 +287,7 @@ func updateStatus(c kube.Client, cfg config.Config, objMeta
metav1.ObjectMeta) (
// VirtualService uses networking.dubbo.apache.org API group,
use Dynamic client
status := cfg.Status.(*dubboapimetav1alpha1.DubboStatus)
clonedStatus := protomarshal.Clone(status)
- obj := &apiistioioapinetworkingv1.VirtualService{
+ obj := &apiorgapachedubboapinetworkingv1alpha3.VirtualService{
ObjectMeta: objMeta,
}
assignSpec(&obj.Status, clonedStatus)
@@ -337,11 +337,11 @@ func patch(c kube.Client, orig config.Config, origMeta
metav1.ObjectMeta, mod co
modSpec :=
mod.Spec.(*orgapachedubboapinetworkingv1alpha3.DestinationRule)
clonedOrigSpec := protomarshal.Clone(origSpec)
clonedModSpec := protomarshal.Clone(modSpec)
- oldRes := &apiistioioapinetworkingv1.DestinationRule{
+ oldRes :=
&apiorgapachedubboapinetworkingv1alpha3.DestinationRule{
ObjectMeta: origMeta,
}
assignSpec(&oldRes.Spec, clonedOrigSpec)
- modRes := &apiistioioapinetworkingv1.DestinationRule{
+ modRes :=
&apiorgapachedubboapinetworkingv1alpha3.DestinationRule{
ObjectMeta: modMeta,
}
assignSpec(&modRes.Spec, clonedModSpec)
@@ -382,11 +382,11 @@ func patch(c kube.Client, orig config.Config, origMeta
metav1.ObjectMeta, mod co
modSpec :=
mod.Spec.(*orgapachedubboapinetworkingv1alpha3.VirtualService)
clonedOrigSpec := protomarshal.Clone(origSpec)
clonedModSpec := protomarshal.Clone(modSpec)
- oldRes := &apiistioioapinetworkingv1.VirtualService{
+ oldRes :=
&apiorgapachedubboapinetworkingv1alpha3.VirtualService{
ObjectMeta: origMeta,
}
assignSpec(&oldRes.Spec, clonedOrigSpec)
- modRes := &apiistioioapinetworkingv1.VirtualService{
+ modRes :=
&apiorgapachedubboapinetworkingv1alpha3.VirtualService{
ObjectMeta: modMeta,
}
assignSpec(&modRes.Spec, clonedModSpec)
@@ -560,17 +560,17 @@ var translationMap = map[config.GroupVersionKind]func(r
runtime.Object) config.C
}
},
gvk.DestinationRule: func(r runtime.Object) config.Config {
- var obj *apiistioioapinetworkingv1.DestinationRule
+ var obj *apiorgapachedubboapinetworkingv1alpha3.DestinationRule
// Handle unstructured objects from Dynamic client
// First try to convert from unstructured, as Dynamic client
returns unstructured objects
// Note: r may be controllers.Object which embeds
runtime.Object, so we need to check the concrete type
switch v := r.(type) {
case *unstructured.Unstructured:
- obj = &apiistioioapinetworkingv1.DestinationRule{}
+ obj =
&apiorgapachedubboapinetworkingv1alpha3.DestinationRule{}
if err :=
runtime.DefaultUnstructuredConverter.FromUnstructured(v.Object, obj); err !=
nil {
panic(fmt.Sprintf("failed to convert
unstructured to DestinationRule: %v", err))
}
- case *apiistioioapinetworkingv1.DestinationRule:
+ case *apiorgapachedubboapinetworkingv1alpha3.DestinationRule:
// Handle typed objects from Istio client
obj = v
default:
@@ -578,12 +578,12 @@ var translationMap = map[config.GroupVersionKind]func(r
runtime.Object) config.C
uObj, err :=
runtime.DefaultUnstructuredConverter.ToUnstructured(r)
if err == nil {
u := &unstructured.Unstructured{Object: uObj}
- obj =
&apiistioioapinetworkingv1.DestinationRule{}
+ obj =
&apiorgapachedubboapinetworkingv1alpha3.DestinationRule{}
if err :=
runtime.DefaultUnstructuredConverter.FromUnstructured(u.Object, obj); err !=
nil {
panic(fmt.Sprintf("failed to convert
object %T to DestinationRule: %v", r, err))
}
} else {
- panic(fmt.Sprintf("unexpected object type for
DestinationRule: %T, expected *unstructured.Unstructured or
*apiistioioapinetworkingv1.DestinationRule, conversion error: %v", r, err))
+ panic(fmt.Sprintf("unexpected object type for
DestinationRule: %T, expected *unstructured.Unstructured or
*apiorgapachedubboapinetworkingv1alpha3.DestinationRule, conversion error: %v",
r, err))
}
}
return config.Config{
@@ -770,17 +770,17 @@ var translationMap = map[config.GroupVersionKind]func(r
runtime.Object) config.C
}
},
gvk.VirtualService: func(r runtime.Object) config.Config {
- var obj *apiistioioapinetworkingv1.VirtualService
+ var obj *apiorgapachedubboapinetworkingv1alpha3.VirtualService
// Handle unstructured objects from Dynamic client
// First try to convert from unstructured, as Dynamic client
returns unstructured objects
// Note: r may be controllers.Object which embeds
runtime.Object, so we need to check the concrete type
switch v := r.(type) {
case *unstructured.Unstructured:
- obj = &apiistioioapinetworkingv1.VirtualService{}
+ obj =
&apiorgapachedubboapinetworkingv1alpha3.VirtualService{}
if err :=
runtime.DefaultUnstructuredConverter.FromUnstructured(v.Object, obj); err !=
nil {
panic(fmt.Sprintf("failed to convert
unstructured to VirtualService: %v", err))
}
- case *apiistioioapinetworkingv1.VirtualService:
+ case *apiorgapachedubboapinetworkingv1alpha3.VirtualService:
// Handle typed objects from Istio client
obj = v
default:
@@ -788,12 +788,12 @@ var translationMap = map[config.GroupVersionKind]func(r
runtime.Object) config.C
uObj, err :=
runtime.DefaultUnstructuredConverter.ToUnstructured(r)
if err == nil {
u := &unstructured.Unstructured{Object: uObj}
- obj =
&apiistioioapinetworkingv1.VirtualService{}
+ obj =
&apiorgapachedubboapinetworkingv1alpha3.VirtualService{}
if err :=
runtime.DefaultUnstructuredConverter.FromUnstructured(u.Object, obj); err !=
nil {
panic(fmt.Sprintf("failed to convert
object %T to VirtualService: %v", r, err))
}
} else {
- panic(fmt.Sprintf("unexpected object type for
VirtualService: %T, expected *unstructured.Unstructured or
*apiistioioapinetworkingv1.VirtualService, conversion error: %v", r, err))
+ panic(fmt.Sprintf("unexpected object type for
VirtualService: %T, expected *unstructured.Unstructured or
*apiorgapachedubboapinetworkingv1alpha3.VirtualService, conversion error: %v",
r, err))
}
}
return config.Config{
diff --git a/pkg/config/schema/kubeclient/common.go
b/pkg/config/schema/kubeclient/common.go
index 428c349f..dba71e02 100644
--- a/pkg/config/schema/kubeclient/common.go
+++ b/pkg/config/schema/kubeclient/common.go
@@ -18,11 +18,11 @@ package kubeclient
import (
"context"
+ dubboclient
"github.com/apache/dubbo-kubernetes/client-go/pkg/clientset/versioned"
"github.com/apache/dubbo-kubernetes/pkg/config/schema/kubetypes"
"github.com/apache/dubbo-kubernetes/pkg/kube/informerfactory"
ktypes "github.com/apache/dubbo-kubernetes/pkg/kube/kubetypes"
"github.com/apache/dubbo-kubernetes/pkg/typemap"
- istioclient "istio.io/client-go/pkg/clientset/versioned"
kubeext "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -46,7 +46,7 @@ type ClientGetter interface {
// Dynamic client.
Dynamic() dynamic.Interface
- Dubbo() istioclient.Interface
+ Dubbo() dubboclient.Interface
// Metadata returns the Metadata kube client.
Metadata() metadata.Interface
diff --git a/pkg/config/schema/kubeclient/resources.go
b/pkg/config/schema/kubeclient/resources.go
index 8f7beedb..1b7ad4a6 100644
--- a/pkg/config/schema/kubeclient/resources.go
+++ b/pkg/config/schema/kubeclient/resources.go
@@ -20,12 +20,12 @@ import (
"context"
"fmt"
+ apiorgapachedubboapinetworkingv1alpha3
"github.com/apache/dubbo-kubernetes/client-go/pkg/apis/networking/v1alpha3"
"github.com/apache/dubbo-kubernetes/pkg/config/schema/gvr"
"github.com/apache/dubbo-kubernetes/pkg/kube/informerfactory"
ktypes "github.com/apache/dubbo-kubernetes/pkg/kube/kubetypes"
"github.com/apache/dubbo-kubernetes/pkg/log"
"github.com/apache/dubbo-kubernetes/pkg/util/ptr"
- apiistioioapinetworkingv1 "istio.io/client-go/pkg/apis/networking/v1"
apiistioioapisecurityv1 "istio.io/client-go/pkg/apis/security/v1"
k8sioapiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
k8sioapiappsv1 "k8s.io/api/apps/v1"
@@ -71,10 +71,10 @@ func GetWriteClient[T runtime.Object](c ClientGetter,
namespace string) ktypes.W
return
c.Kube().CoreV1().ServiceAccounts(namespace).(ktypes.WriteAPI[T])
case *apiistioioapisecurityv1.PeerAuthentication:
return
c.Dubbo().SecurityV1().PeerAuthentications(namespace).(ktypes.WriteAPI[T])
- case *apiistioioapinetworkingv1.VirtualService:
- return
c.Dubbo().NetworkingV1().VirtualServices(namespace).(ktypes.WriteAPI[T])
- case *apiistioioapinetworkingv1.DestinationRule:
- return
c.Dubbo().NetworkingV1().DestinationRules(namespace).(ktypes.WriteAPI[T])
+ case *apiorgapachedubboapinetworkingv1alpha3.VirtualService:
+ return
c.Dubbo().NetworkingV1alpha3().VirtualServices(namespace).(ktypes.WriteAPI[T])
+ case *apiorgapachedubboapinetworkingv1alpha3.DestinationRule:
+ return
c.Dubbo().NetworkingV1alpha3().DestinationRules(namespace).(ktypes.WriteAPI[T])
case *sigsk8siogatewayapiapisv1.GatewayClass:
return
c.GatewayAPI().GatewayV1().GatewayClasses().(ktypes.WriteAPI[T])
case *sigsk8siogatewayapiapisv1.Gateway:
@@ -119,9 +119,9 @@ func gvrToObject(g schema.GroupVersionResource)
runtime.Object {
case gvr.PeerAuthentication:
return &apiistioioapisecurityv1.PeerAuthentication{}
case gvr.VirtualService:
- return &apiistioioapinetworkingv1.VirtualService{}
+ return &apiorgapachedubboapinetworkingv1alpha3.VirtualService{}
case gvr.DestinationRule:
- return &apiistioioapinetworkingv1.DestinationRule{}
+ return &apiorgapachedubboapinetworkingv1alpha3.DestinationRule{}
case gvr.GatewayClass:
return &sigsk8siogatewayapiapisv1.GatewayClass{}
case gvr.KubernetesGateway:
diff --git a/pkg/config/schema/kubetypes/resources.go
b/pkg/config/schema/kubetypes/resources.go
index b13d79c5..b8072c87 100644
--- a/pkg/config/schema/kubetypes/resources.go
+++ b/pkg/config/schema/kubetypes/resources.go
@@ -18,9 +18,9 @@ package kubetypes
import (
dubboapimeshv1alpha1
"github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
+ apiorgapachedubboapinetworkingv1alpha3
"github.com/apache/dubbo-kubernetes/client-go/pkg/apis/networking/v1alpha3"
"github.com/apache/dubbo-kubernetes/pkg/config"
"github.com/apache/dubbo-kubernetes/pkg/config/schema/gvk"
- apiistioioapinetworkingv1 "istio.io/client-go/pkg/apis/networking/v1"
apiistioioapisecurityv1 "istio.io/client-go/pkg/apis/security/v1"
k8sioapiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
k8sioapiappsv1 "k8s.io/api/apps/v1"
@@ -40,9 +40,9 @@ func getGvk(obj any) (config.GroupVersionKind, bool) {
return gvk.MeshGlobalConfig, true
case *apiistioioapisecurityv1.PeerAuthentication:
return gvk.PeerAuthentication, true
- case *apiistioioapinetworkingv1.DestinationRule:
+ case *apiorgapachedubboapinetworkingv1alpha3.DestinationRule:
return gvk.DestinationRule, true
- case *apiistioioapinetworkingv1.VirtualService:
+ case *apiorgapachedubboapinetworkingv1alpha3.VirtualService:
return gvk.VirtualService, true
case *k8sioapicorev1.ConfigMap:
return gvk.ConfigMap, true
diff --git a/pkg/kube/client.go b/pkg/kube/client.go
index 123e4207..c55e030a 100644
--- a/pkg/kube/client.go
+++ b/pkg/kube/client.go
@@ -23,6 +23,7 @@ import (
gatewayapiclient
"sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
"time"
+ dubboclient
"github.com/apache/dubbo-kubernetes/client-go/pkg/clientset/versioned"
"github.com/apache/dubbo-kubernetes/pkg/cluster"
"github.com/apache/dubbo-kubernetes/pkg/config"
"github.com/apache/dubbo-kubernetes/pkg/config/schema/collections"
@@ -31,7 +32,6 @@ import (
"github.com/apache/dubbo-kubernetes/pkg/lazy"
"github.com/apache/dubbo-kubernetes/pkg/sleep"
"go.uber.org/atomic"
- istioclient "istio.io/client-go/pkg/clientset/versioned"
kubeExtClient
"k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -68,7 +68,7 @@ type client struct {
clusterID cluster.ID
informerWatchesPending *atomic.Int32
started atomic.Bool
- dubbo istioclient.Interface
+ dubbo dubboclient.Interface
gatewayapi gatewayapiclient.Interface
crdWatcher kubetypes.CrdWatcher
fastSync bool
@@ -87,7 +87,7 @@ type Client interface {
Informers() informerfactory.InformerFactory
- Dubbo() istioclient.Interface
+ Dubbo() dubboclient.Interface
ObjectFilter() kubetypes.DynamicObjectFilter
@@ -157,7 +157,7 @@ func newClientInternal(clientFactory *clientFactory, opts
...ClientOption) (*cli
return nil, err
}
- c.dubbo, err = istioclient.NewForConfig(c.config)
+ c.dubbo, err = dubboclient.NewForConfig(c.config)
if err != nil {
return nil, err
}
@@ -243,7 +243,7 @@ func (c *client) Informers()
informerfactory.InformerFactory {
return c.informerFactory
}
-func (c *client) Dubbo() istioclient.Interface {
+func (c *client) Dubbo() dubboclient.Interface {
return c.dubbo
}