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 397c927b Fixed pixiu proxy request 502 (#864)
397c927b is described below

commit 397c927bdeb05c227b85fc1fab98fc71e2f631b9
Author: mfordjody <[email protected]>
AuthorDate: Wed Feb 11 22:40:37 2026 +0800

    Fixed pixiu proxy request 502 (#864)
---
 .asf.yaml                                          |   2 +-
 dubbod/discovery/docker/dockerfile.discovery       |  28 +-
 dubbod/discovery/docker/dockerfile.proxy           |  38 +-
 .../pkg/config/kube/gateway/controller.go          |  20 +-
 .../config/kube/gateway/deployment_controller.go   |  26 +-
 .../pkg/config/kube/gateway/gateway_collection.go  |  29 --
 .../config/kube/gateway/gatewayclass_collection.go |  21 +-
 .../pkg/config/kube/gateway/gateways_collection.go | 117 +++++
 go.mod                                             |   2 +-
 .../dubbo-discovery/files/kube-gateway.yaml        |   2 +-
 .../dubbo-discovery/templates/deployment.yaml      |   2 +-
 .../dubbo-control/dubbo-discovery/values.yaml      |   4 -
 pkg/dubboagent/agent.go                            |   6 +-
 pkg/kube/inject/inject.go                          |   2 +-
 pkg/pixiu/proxy.go                                 |   2 +-
 samples/addons/README.md                           |  13 -
 samples/addons/grafana.yaml                        | 259 ----------
 samples/addons/jaeger.yaml                         | 135 -----
 samples/addons/prometheus.yaml                     | 575 ---------------------
 samples/grpc-app/grpc-app.yaml                     |   6 +-
 samples/httpbin/README.md                          |  58 +++
 samples/httpbin/httpbin.yaml                       |  43 ++
 22 files changed, 346 insertions(+), 1044 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
index 614a9987..8f925bb9 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -20,7 +20,7 @@ notifications:
     jira_options: link label
 
 github:
-  homepage: https://dubbo.apache.org
+  homepage: ""
   description: "Dubbo Service Mesh for Kubernetes."
   features:
     # Enable wiki for documentation
diff --git a/dubbod/discovery/docker/dockerfile.discovery 
b/dubbod/discovery/docker/dockerfile.discovery
index de35f0f8..7ad55c8b 100644
--- a/dubbod/discovery/docker/dockerfile.discovery
+++ b/dubbod/discovery/docker/dockerfile.discovery
@@ -13,7 +13,29 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM gcr.io/distroless/static:debug
-COPY bin/dubbo-discovery /usr/local/bin/dubbo-discovery
-USER 9999:9999
+FROM golang:1.25 AS builder
+
+ARG TARGETOS
+ARG TARGETARCH
+
+WORKDIR /src
+
+ENV CGO_ENABLED=0 \
+    GOOS=${TARGETOS} \
+    GOARCH=${TARGETARCH}
+
+COPY go.mod go.sum ./
+RUN go mod download
+
+COPY . .
+
+RUN go build -v -trimpath -ldflags="-s -w" \
+    -o /out/dubbo-discovery \
+    ./dubbod/discovery/cmd/dubbo-discover/main.go
+
+FROM scratch
+
+COPY --from=builder /out/dubbo-discovery /usr/local/bin/dubbo-discovery
+
+USER 65532:65532
 ENTRYPOINT ["/usr/local/bin/dubbo-discovery"]
diff --git a/dubbod/discovery/docker/dockerfile.proxy 
b/dubbod/discovery/docker/dockerfile.proxy
index bab30727..d934724b 100644
--- a/dubbod/discovery/docker/dockerfile.proxy
+++ b/dubbod/discovery/docker/dockerfile.proxy
@@ -13,8 +13,36 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM gcr.io/distroless/static:debug
-COPY bin/dubbo-agent /usr/local/bin/dubbo-agent
-COPY bin/pixiu-gateway /usr/local/bin/pixiu-gateway
-USER 9999:9999
-ENTRYPOINT ["/usr/local/bin/dubbo-agent"]
+FROM golang:1.25 AS builder
+
+ARG TARGETOS
+ARG TARGETARCH
+
+WORKDIR /src
+
+ENV CGO_ENABLED=0 \
+    GOOS=${TARGETOS} \
+    GOARCH=${TARGETARCH}
+
+COPY go.mod go.sum ./
+RUN go mod download
+
+COPY . .
+
+RUN go build -v -trimpath -ldflags="-s -w" \
+    -o /out/dubbo-agent \
+    ./dubbod/discovery/cmd/dubbo-agent/main.go
+
+RUN git clone --depth=1 https://github.com/apache/dubbo-go-pixiu.git && \
+    cd dubbo-go-pixiu && \
+    go build -v -trimpath -ldflags="-s -w" \
+    -o /out/pixiu-proxy \
+    ./cmd/pixiu/pixiu.go
+
+FROM scratch
+
+COPY --from=builder /out/dubbo-agent /usr/local/bin/dubbo-agent
+COPY --from=builder /out/pixiu-proxy /usr/local/bin/pixiu-proxy
+
+USER 65532:65532
+ENTRYPOINT ["/usr/local/bin/dubbo-agent"]
\ No newline at end of file
diff --git a/dubbod/discovery/pkg/config/kube/gateway/controller.go 
b/dubbod/discovery/pkg/config/kube/gateway/controller.go
index b55348a0..36eb733a 100644
--- a/dubbod/discovery/pkg/config/kube/gateway/controller.go
+++ b/dubbod/discovery/pkg/config/kube/gateway/controller.go
@@ -62,7 +62,9 @@ type Controller struct {
        inputs         Inputs
 }
 
-type Outputs struct{}
+type Outputs struct {
+       Gateways krt.Collection[Gateway]
+}
 
 type Inputs struct {
        Services   krt.Collection[*corev1.Service]
@@ -99,11 +101,23 @@ func NewController(kc kube.Client, waitForCRD func(class 
schema.GroupVersionReso
                HTTPRoutes:     buildClient[*gateway.HTTPRoute](c, kc, 
gvr.HTTPRoute, opts, "informer/HTTPRoutes"),
        }
 
-       GatewayClassStatus, _ := 
GatewayClassesCollection(inputs.GatewayClasses, opts)
+       GatewayClassStatus, GatewayClasses := 
GatewayClassesCollection(inputs.GatewayClasses, opts)
        status.RegisterStatus(c.status, GatewayClassStatus, GetStatus)
 
+       GatewaysStatus, Gateways := GatewaysCollection(
+               inputs.Gateways,
+               GatewayClasses,
+               opts,
+       )
+
+       GatewayFinalStatus := FinalGatewayStatusCollection(GatewaysStatus, opts)
+       status.RegisterStatus(c.status, GatewayFinalStatus, GetStatus)
+
        handlers := []krt.HandlerRegistration{}
-       outputs := Outputs{}
+       outputs := Outputs{
+               Gateways: Gateways,
+       }
+
        c.outputs = outputs
        c.handlers = handlers
        c.inputs = inputs
diff --git a/dubbod/discovery/pkg/config/kube/gateway/deployment_controller.go 
b/dubbod/discovery/pkg/config/kube/gateway/deployment_controller.go
index 7628344b..9872e085 100644
--- a/dubbod/discovery/pkg/config/kube/gateway/deployment_controller.go
+++ b/dubbod/discovery/pkg/config/kube/gateway/deployment_controller.go
@@ -727,7 +727,6 @@ func (d *DeploymentController) generatePixiuConfig(gw 
*gateway.Gateway, httpRout
                                                Name: 
"dgp.filter.httpconnectionmanager",
                                                Config: map[string]interface{}{
                                                        "route_config": 
map[string]interface{}{
-                                                               "name":   
fmt.Sprintf("route-%s", listener.Name),
                                                                "routes": 
d.convertHTTPRoutesToPixiuRoutes(httpRoutes, listener),
                                                        },
                                                        "http_filters": 
[]map[string]interface{}{
@@ -759,6 +758,24 @@ func (d *DeploymentController) generatePixiuConfig(gw 
*gateway.Gateway, httpRout
                                        backendPort = int(*backendRef.Port)
                                }
 
+                               // Prefer Service ClusterIP to avoid DNS 
dependency inside the gateway pod.
+                               backendAddr := 
fmt.Sprintf("%s.%s.svc.cluster.local", backendName, backendNamespace)
+                               if d.services != nil {
+                                       if svc := d.services.Get(backendName, 
backendNamespace); svc != nil {
+                                               if ip := svc.Spec.ClusterIP; ip 
!= "" && ip != corev1.ClusterIPNone {
+                                                       backendAddr = ip
+                                               }
+                                       }
+                               }
+                               // Fallback: if informer filtering prevented us 
from seeing the Service, read it directly.
+                               if backendAddr == 
fmt.Sprintf("%s.%s.svc.cluster.local", backendName, backendNamespace) && 
d.client != nil {
+                                       if svc, err := 
d.client.Kube().CoreV1().Services(backendNamespace).Get(context.Background(), 
backendName, metav1.GetOptions{}); err == nil {
+                                               if ip := svc.Spec.ClusterIP; ip 
!= "" && ip != corev1.ClusterIPNone {
+                                                       backendAddr = ip
+                                               }
+                                       }
+                               }
+
                                clusterName := fmt.Sprintf("%s-%s-%d", 
backendNamespace, backendName, backendPort)
                                if _, exists := clusterMap[clusterName]; 
!exists {
                                        clusterMap[clusterName] = &PixiuCluster{
@@ -769,7 +786,7 @@ func (d *DeploymentController) generatePixiuConfig(gw 
*gateway.Gateway, httpRout
                                                        {
                                                                ID: 1,
                                                                SocketAddress: 
PixiuSocketAddress{
-                                                                       
Address: fmt.Sprintf("%s.%s.svc.cluster.local", backendName, backendNamespace),
+                                                                       
Address: backendAddr,
                                                                        Port:   
 backendPort,
                                                                },
                                                        },
@@ -844,6 +861,11 @@ func (d *DeploymentController) 
convertHTTPRoutesToPixiuRoutes(httpRoutes []*gate
                                                        pathMatch["regex"] = 
match.Path.Value
                                                }
                                        }
+
+                                       if match.Method == nil {
+                                               pathMatch["methods"] = 
[]string{}
+                                       }
+
                                        route["match"] = pathMatch
                                }
 
diff --git a/dubbod/discovery/pkg/config/kube/gateway/gateway_collection.go 
b/dubbod/discovery/pkg/config/kube/gateway/gateway_collection.go
deleted file mode 100644
index e5a67a6f..00000000
--- a/dubbod/discovery/pkg/config/kube/gateway/gateway_collection.go
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package gateway
-
-import (
-       "github.com/apache/dubbo-kubernetes/pkg/config"
-)
-
-type Gateway struct {
-       *config.Config `json:"config"`
-}
-
-func (g Gateway) ResourceName() string {
-       return config.NamespacedName(g.Config).String()
-}
diff --git 
a/dubbod/discovery/pkg/config/kube/gateway/gatewayclass_collection.go 
b/dubbod/discovery/pkg/config/kube/gateway/gatewayclass_collection.go
index 78c2907f..a03c415e 100644
--- a/dubbod/discovery/pkg/config/kube/gateway/gatewayclass_collection.go
+++ b/dubbod/discovery/pkg/config/kube/gateway/gatewayclass_collection.go
@@ -39,10 +39,7 @@ func getKnownControllerNames() []string {
        return names
 }
 
-func GatewayClassesCollection(
-       gatewayClasses krt.Collection[*gateway.GatewayClass],
-       opts krt.OptionsBuilder,
-) (
+func GatewayClassesCollection(gatewayClasses 
krt.Collection[*gateway.GatewayClass], opts krt.OptionsBuilder) (
        krt.StatusCollection[*gateway.GatewayClass, 
gatewayv1.GatewayClassStatus],
        krt.Collection[GatewayClass],
 ) {
@@ -67,3 +64,19 @@ func GatewayClassesCollection(
                }
        }, opts.WithName("GatewayClasses")...)
 }
+
+func fetchClass(ctx krt.HandlerContext, gatewayClasses 
krt.Collection[GatewayClass], gc gatewayv1.ObjectName) *GatewayClass {
+       class := krt.FetchOne(ctx, gatewayClasses, krt.FilterKey(string(gc)))
+       if class == nil {
+               if bc, f := builtinClasses[gc]; f {
+                       // We allow some classes to exist without being in the 
cluster
+                       return &GatewayClass{
+                               Name:       string(gc),
+                               Controller: bc,
+                       }
+               }
+               // No gateway class found, this may be meant for another 
controller; should be skipped.
+               return nil
+       }
+       return class
+}
diff --git a/dubbod/discovery/pkg/config/kube/gateway/gateways_collection.go 
b/dubbod/discovery/pkg/config/kube/gateway/gateways_collection.go
new file mode 100644
index 00000000..2b29a00d
--- /dev/null
+++ b/dubbod/discovery/pkg/config/kube/gateway/gateways_collection.go
@@ -0,0 +1,117 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package gateway
+
+import (
+       "github.com/apache/dubbo-kubernetes/pkg/config"
+       "github.com/apache/dubbo-kubernetes/pkg/kube/krt"
+       "github.com/apache/dubbo-kubernetes/dubbod/discovery/pkg/model/kstatus"
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       gateway "sigs.k8s.io/gateway-api/apis/v1"
+)
+
+type Gateway struct {
+       *config.Config `json:"config"`
+}
+
+func (g Gateway) ResourceName() string {
+       return config.NamespacedName(g.Config).String()
+}
+
+func GatewaysCollection(
+       gateways krt.Collection[*gateway.Gateway],
+       gatewayClasses krt.Collection[GatewayClass],
+       opts krt.OptionsBuilder,
+) (
+       krt.StatusCollection[*gateway.Gateway, gateway.GatewayStatus],
+       krt.Collection[Gateway],
+) {
+       statusCol, gw := krt.NewStatusManyCollection(gateways, func(ctx 
krt.HandlerContext, obj *gateway.Gateway) (*gateway.GatewayStatus, []Gateway) {
+               result := []Gateway{}
+               kgw := obj.Spec
+               status := obj.Status.DeepCopy()
+               class := fetchClass(ctx, gatewayClasses, kgw.GatewayClassName)
+               if class == nil {
+                       return nil, nil
+               }
+               controllerName := class.Controller
+               classInfo, f := classInfos[controllerName]
+               if !f {
+                       return nil, nil
+               }
+               if classInfo.disableRouteGeneration {
+                       // For now we still mark the Gateway as accepted, but 
let higher layers control route generation.
+                       status = setGatewayConditions(status, obj.Generation, 
true, true)
+                       return status, result
+               }
+
+               // Default behavior: GatewayClass is known and managed by this 
controller.
+               // Mark Accepted/Programmed to ensure status no longer stays at 
"Waiting for controller".
+               status = setGatewayConditions(status, obj.Generation, true, 
true)
+               return status, result
+       }, opts.WithName("KubernetesGateway")...)
+
+       return statusCol, gw
+}
+
+func setGatewayConditions(
+       existing *gateway.GatewayStatus,
+       gen int64,
+       accepted, programmed bool,
+) *gateway.GatewayStatus {
+       boolToConditionStatus := func(b bool) metav1.ConditionStatus {
+               if b {
+                       return metav1.ConditionTrue
+               }
+               return metav1.ConditionFalse
+       }
+
+       msg := "Handled by Dubbo controller"
+       conds := kstatus.UpdateConditionIfChanged(existing.Conditions, 
metav1.Condition{
+               Type:               string(gateway.GatewayConditionAccepted),
+               Status:             boolToConditionStatus(accepted),
+               ObservedGeneration: gen,
+               LastTransitionTime: metav1.Now(),
+               Reason:             "Accepted",
+               Message:            msg,
+       })
+       conds = kstatus.UpdateConditionIfChanged(conds, metav1.Condition{
+               Type:               string(gateway.GatewayConditionProgrammed),
+               Status:             boolToConditionStatus(programmed),
+               ObservedGeneration: gen,
+               LastTransitionTime: metav1.Now(),
+               Reason:             "Programmed",
+               Message:            msg,
+       })
+       existing.Conditions = conds
+       return existing
+}
+
+func FinalGatewayStatusCollection(
+       gatewayStatuses krt.StatusCollection[*gateway.Gateway, 
gateway.GatewayStatus],
+       opts krt.OptionsBuilder,
+) krt.StatusCollection[*gateway.Gateway, gateway.GatewayStatus] {
+       return krt.NewCollection(
+               gatewayStatuses,
+               func(ctx krt.HandlerContext, i 
krt.ObjectWithStatus[*gateway.Gateway, gateway.GatewayStatus]) 
*krt.ObjectWithStatus[*gateway.Gateway, gateway.GatewayStatus] {
+                       status := i.Status.DeepCopy()
+                       return &krt.ObjectWithStatus[*gateway.Gateway, 
gateway.GatewayStatus]{
+                               Obj:    i.Obj,
+                               Status: *status,
+                       }
+               }, opts.WithName("GatewayFinalStatus")...)
+}
diff --git a/go.mod b/go.mod
index 44a22eab..0c3d700f 100644
--- a/go.mod
+++ b/go.mod
@@ -15,7 +15,7 @@
 
 module github.com/apache/dubbo-kubernetes
 
-go 1.24.0
+go 1.25.0
 
 require (
        k8s.io/apimachinery v0.34.1
diff --git 
a/manifests/charts/dubbo-control/dubbo-discovery/files/kube-gateway.yaml 
b/manifests/charts/dubbo-control/dubbo-discovery/files/kube-gateway.yaml
index 49c29982..00a2b9f9 100644
--- a/manifests/charts/dubbo-control/dubbo-discovery/files/kube-gateway.yaml
+++ b/manifests/charts/dubbo-control/dubbo-discovery/files/kube-gateway.yaml
@@ -46,7 +46,7 @@ spec:
       serviceAccountName: {{ .ServiceAccount }}
       containers:
       - name: dubbo-proxy
-        image: mfordjody/dubbo-proxy:0.3.5
+        image: dubboregistry/dubbo-proxy:0.3.5
         imagePullPolicy: Always
         ports:
         - containerPort: 15020
diff --git 
a/manifests/charts/dubbo-control/dubbo-discovery/templates/deployment.yaml 
b/manifests/charts/dubbo-control/dubbo-discovery/templates/deployment.yaml
index 21948b2f..8320cc71 100644
--- a/manifests/charts/dubbo-control/dubbo-discovery/templates/deployment.yaml
+++ b/manifests/charts/dubbo-control/dubbo-discovery/templates/deployment.yaml
@@ -19,7 +19,7 @@ spec:
       serviceAccountName: dubbod
       containers:
         - name: discovery
-          image: "mfordjody/dubbo-discovery:0.3.5"
+          image: "dubboregistry/dubbo-discovery:0.3.5"
           imagePullPolicy: Always
           args:
             - "discovery"
diff --git a/manifests/charts/dubbo-control/dubbo-discovery/values.yaml 
b/manifests/charts/dubbo-control/dubbo-discovery/values.yaml
index aee348aa..2ec941ca 100644
--- a/manifests/charts/dubbo-control/dubbo-discovery/values.yaml
+++ b/manifests/charts/dubbo-control/dubbo-discovery/values.yaml
@@ -14,10 +14,6 @@
 # limitations under the License.
 
 _internal_default_values_not_set:
-  hub: ""
-  tag: 0.3.5
-  image: planet
-
   resources:
     requests:
       cpu: 500m
diff --git a/pkg/dubboagent/agent.go b/pkg/dubboagent/agent.go
index eccec379..5749656f 100644
--- a/pkg/dubboagent/agent.go
+++ b/pkg/dubboagent/agent.go
@@ -656,8 +656,8 @@ func (a *Agent) initializePixiuAgent(_ context.Context) 
error {
        binaryPath := os.Getenv("PROXY_BINARY_PATH")
        if binaryPath == "" {
                possiblePaths := []string{
-                       "/usr/local/bin/pixiu-gateway",
-                       "pixiu-gateway",
+                       "/usr/local/bin/pixiu-proxy",
+                       "pixiu-proxy",
                }
 
                found := false
@@ -678,7 +678,7 @@ func (a *Agent) initializePixiuAgent(_ context.Context) 
error {
                }
 
                if !found {
-                       return fmt.Errorf("gateway binary pixiu not found. 
Please set PROXY_BINARY_PATH environment variable or ensure pixiu binary is 
installed at /usr/local/bin/pixiu-gateway")
+                       return fmt.Errorf("gateway binary pixiu not found.")
                }
        }
 
diff --git a/pkg/kube/inject/inject.go b/pkg/kube/inject/inject.go
index a0c6845e..b72b0790 100644
--- a/pkg/kube/inject/inject.go
+++ b/pkg/kube/inject/inject.go
@@ -114,7 +114,7 @@ func RunTemplate(params InjectionParameters) (mergedPod 
*corev1.Pod, templatePod
                MeshGlobalConfig: meshGlobalConfig,
                Values:           params.valuesConfig.asMap,
                Revision:         params.revision,
-               ProxyImage:       getProxyImage(params.valuesConfig.asMap, 
"mfordjody/dubbo-proxy:0.3.5"),
+               ProxyImage:       getProxyImage(params.valuesConfig.asMap, 
"dubboregistry/dubbo-proxy:0.3.5"),
                CompliancePolicy: common_features.CompliancePolicy,
        }
 
diff --git a/pkg/pixiu/proxy.go b/pkg/pixiu/proxy.go
index 23037b28..7e3647f3 100644
--- a/pkg/pixiu/proxy.go
+++ b/pkg/pixiu/proxy.go
@@ -24,7 +24,7 @@ import (
        "path/filepath"
 )
 
-var pixiulog = dubbolog.RegisterScope("gateway", "pixiu gateway debugging")
+var pixiulog = dubbolog.RegisterScope("gateway", "pixiu proxy debugging")
 
 type Proxy interface {
        Run(<-chan error) error
diff --git a/samples/addons/README.md b/samples/addons/README.md
deleted file mode 100644
index 70c25b6d..00000000
--- a/samples/addons/README.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Addons
-
-Example deployments of various plugins that integrate with Dubbo.
-
-The deployments here are intended to get up and running quickly and may not be 
suitable for production environments.
-
-## Getting started
-
-To quickly deploy all addons:
-
-```shell script
-kubectl apply -f samples/addons
-```
\ No newline at end of file
diff --git a/samples/addons/grafana.yaml b/samples/addons/grafana.yaml
deleted file mode 100644
index 60b82fed..00000000
--- a/samples/addons/grafana.yaml
+++ /dev/null
@@ -1,259 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-# Source: grafana/templates/serviceaccount.yaml
-apiVersion: v1
-kind: ServiceAccount
-automountServiceAccountToken: false
-metadata:
-  labels:
-    helm.sh/chart: grafana-8.6.3
-    app.kubernetes.io/name: grafana
-    app.kubernetes.io/instance: grafana
-    app.kubernetes.io/version: "11.3.1"
-  name: grafana
-  namespace: dubbo-system
----
-# Source: grafana/templates/configmap.yaml
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: grafana
-  namespace: dubbo-system
-  labels:
-    helm.sh/chart: grafana-8.6.3
-    app.kubernetes.io/name: grafana
-    app.kubernetes.io/instance: grafana
-    app.kubernetes.io/version: "11.3.1"
-data:
-  grafana.ini: |
-    [analytics]
-    check_for_updates = true
-    [grafana_net]
-    url = https://grafana.net
-    [log]
-    mode = console
-    [paths]
-    data = /var/lib/grafana/
-    logs = /var/log/grafana
-    plugins = /var/lib/grafana/plugins
-    provisioning = /etc/grafana/provisioning
-    [server]
-    domain = ''
-  datasources.yaml: |
-    apiVersion: 1
-    datasources:
-      - access: proxy
-        editable: true
-        isDefault: true
-        jsonData:
-          timeInterval: 15s
-        name: Prometheus
-        orgId: 1
-        type: prometheus
-        url: http://prometheus:9090
-      - access: proxy
-        editable: true
-        isDefault: false
-        jsonData:
-          timeInterval: 15s
-        name: Jaeger
-        orgId: 1
-        type: jaeger
-        url: http://tracing:16686
-  dashboardproviders.yaml: |
-    apiVersion: 1
-    providers:
-      - disableDeletion: false
-        name: dashboards-dubbo-metrics
-        folder: dubbo/metrics
-        options:
-          path: /var/lib/grafana/dashboards/dubbo/metrics
-        orgId: 1
-        type: file
-      - disableDeletion: false
-        name: dashboards-dubbo-traces
-        folder: dubbo/traces
-        options:
-          path: /var/lib/grafana/dashboards/dubbo/traces
-        orgId: 1
-        type: file
----
-# Source: grafana/templates/service.yaml
-apiVersion: v1
-kind: Service
-metadata:
-  name: grafana
-  namespace: dubbo-system
-  labels:
-    helm.sh/chart: grafana-8.6.3
-    app.kubernetes.io/name: grafana
-    app.kubernetes.io/instance: grafana
-    app.kubernetes.io/version: "11.3.1"
-spec:
-  type: NodePort
-  ports:
-    - name: service
-      port: 3000
-      protocol: TCP
-      targetPort: 3000
-  selector:
-    app.kubernetes.io/name: grafana
-    app.kubernetes.io/instance: grafana
----
-# Source: grafana/templates/deployment.yaml
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: grafana
-  namespace: dubbo-system
-  labels:
-    helm.sh/chart: grafana-8.6.3
-    app.kubernetes.io/name: grafana
-    app.kubernetes.io/instance: grafana
-    app.kubernetes.io/version: "11.3.1"
-spec:
-  replicas: 1
-  revisionHistoryLimit: 10
-  selector:
-    matchLabels:
-      app.kubernetes.io/name: grafana
-      app.kubernetes.io/instance: grafana
-  strategy:
-    type: RollingUpdate
-  template:
-    metadata:
-      labels:
-        helm.sh/chart: grafana-8.6.3
-        app.kubernetes.io/name: grafana
-        app.kubernetes.io/instance: grafana
-        app.kubernetes.io/version: "11.3.1"
-    spec:
-      serviceAccountName: grafana
-      automountServiceAccountToken: true
-      enableServiceLinks: true
-      containers:
-        - name: grafana
-          image: 
"sca-registry.cn-hangzhou.cr.aliyuncs.com/dubbo/grafana:11.3.1"
-          imagePullPolicy: IfNotPresent
-          securityContext:
-            allowPrivilegeEscalation: false
-            capabilities:
-              drop:
-                - ALL
-            seccompProfile:
-              type: RuntimeDefault
-          volumeMounts:
-            - name: storage
-              mountPath: "/var/lib/grafana"
-            - name: config
-              mountPath: "/etc/grafana/grafana.ini"
-              subPath: grafana.ini
-            - name: config
-              mountPath: 
"/etc/grafana/provisioning/dashboards/dashboardproviders.yaml"
-              subPath: "dashboardproviders.yaml"
-            - name: config
-              mountPath: 
"/etc/grafana/provisioning/datasources/datasources.yaml"
-              subPath: "datasources.yaml"
-            - mountPath: "/var/lib/grafana/dashboards/dubbo/metrics"
-              name: dashboards-dubbo-metrics
-            - mountPath: "/var/lib/grafana/dashboards/dubbo/traces"
-              name: dashboards-dubbo-traces
-          ports:
-            - name: grafana
-              containerPort: 3000
-              protocol: TCP
-            - name: gossip-tcp
-              containerPort: 9094
-              protocol: TCP
-            - name: gossip-udp
-              containerPort: 9094
-              protocol: UDP
-          env:
-            - name: POD_IP
-              valueFrom:
-                fieldRef:
-                  fieldPath: status.podIP
-            - name: GF_PATHS_DATA
-              value: /var/lib/grafana/
-            - name: GF_PATHS_LOGS
-              value: /var/log/grafana
-            - name: GF_PATHS_PLUGINS
-              value: /var/lib/grafana/plugins
-            - name: GF_PATHS_PROVISIONING
-              value: /etc/grafana/provisioning
-            - name: "GF_AUTH_ANONYMOUS_ENABLED"
-              value: "true"
-            - name: "GF_AUTH_ANONYMOUS_ORG_ROLE"
-              value: "Admin"
-            - name: "GF_AUTH_BASIC_ENABLED"
-              value: "false"
-            - name: "GF_SECURITY_ADMIN_PASSWORD"
-              value: "admin"
-            - name: "GF_SECURITY_ADMIN_USER"
-              value: "admin"
-          livenessProbe:
-            failureThreshold: 10
-            httpGet:
-              path: /api/health
-              port: 3000
-            initialDelaySeconds: 60
-            timeoutSeconds: 30
-          readinessProbe:
-            httpGet:
-              path: /api/health
-              port: 3000
-      volumes:
-        - name: config
-          configMap:
-            name: grafana
-        - configMap:
-            name: dubbo-metrics-grafana-dashboards
-          name: dashboards-dubbo-metrics
-        - configMap:
-            name: dubbo-traces-grafana-dashboards
-          name: dashboards-dubbo-traces
-        - name: storage
-          emptyDir: {}
----
-
-apiVersion: v1
-data:
-  dubbo-metrics-application-dashboard.json: |
-    
{"annotations":{"list":[{"builtIn":1,"datasource":{"type":"grafana","uid":"-- 
Grafana --"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 
1)","name":"Annotations & 
Alerts","type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"graphTooltip":0,"id":39,"links":[],"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":14,"panels":[],"title":"应用概览","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color"
 [...]
-  dubbo-metrics-instance-dashboard.json: |
-    
{"annotations":{"list":[{"builtIn":1,"datasource":{"type":"grafana","uid":"-- 
Grafana --"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 
1)","name":"Annotations & 
Alerts","type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"graphTooltip":0,"id":41,"links":[],"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":1,"panels":[],"title":"实例概览","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":
 [...]
-  dubbo-metrics-service-dashboard.json: |
-    
{"annotations":{"list":[{"builtIn":1,"datasource":{"type":"grafana","uid":"-- 
Grafana --"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 
1)","name":"Annotations & 
Alerts","type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"graphTooltip":0,"id":42,"links":[],"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":5,"panels":[],"title":"接口总览","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":
 [...]
-kind: ConfigMap
-metadata:
-  creationTimestamp: null
-  name: dubbo-metrics-grafana-dashboards
-  namespace: dubbo-system
----        
-apiVersion: v1
-data:
-  dubbo-traces-application-dashboard.json: |
-    
{"annotations":{"list":[{"builtIn":1,"datasource":{"type":"grafana","uid":"-- 
Grafana --"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 
1)","name":"Annotations & 
Alerts","type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"graphTooltip":0,"id":34,"links":[],"panels":[{"datasource":{"type":"jaeger","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"custom":{"align":"auto","cellOptions":{"type":"auto"},"inspect":false},"mappings":[],
 [...]
-  dubbo-traces-instance-dashboard.json: |
-    
{"annotations":{"list":[{"builtIn":1,"datasource":{"type":"grafana","uid":"-- 
Grafana --"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 
1)","name":"Annotations & 
Alerts","type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"graphTooltip":0,"id":35,"links":[],"panels":[{"datasource":{"type":"jaeger","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"custom":{"align":"auto","cellOptions":{"type":"auto"},"inspect":false},"mappings":[],
 [...]
-  dubbo-traces-service-dashboard.json: |
-    
{"annotations":{"list":[{"builtIn":1,"datasource":{"type":"grafana","uid":"-- 
Grafana --"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 
1)","name":"Annotations & 
Alerts","type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"graphTooltip":0,"id":36,"links":[],"panels":[{"datasource":{"type":"jaeger","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"custom":{"align":"auto","cellOptions":{"type":"auto"},"inspect":false},"mappings":[],
 [...]
-kind: ConfigMap
-metadata:
-  creationTimestamp: null
-  name: dubbo-traces-grafana-dashboards
-  namespace: dubbo-system
\ No newline at end of file
diff --git a/samples/addons/jaeger.yaml b/samples/addons/jaeger.yaml
deleted file mode 100644
index cb871859..00000000
--- a/samples/addons/jaeger.yaml
+++ /dev/null
@@ -1,135 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: jaeger
-  namespace: dubbo-system
-  labels:
-    app: jaeger
-spec:
-  selector:
-    matchLabels:
-      app: jaeger
-  template:
-    metadata:
-      labels:
-        app: jaeger
-      annotations:
-        prometheus.io/scrape: "true"
-        prometheus.io/port: "14269"
-    spec:
-      containers:
-        - name: jaeger
-          image: 
"sca-registry.cn-hangzhou.cr.aliyuncs.com/dubbo/jager-all-in-one:1.67.0"
-          env:
-            - name: BADGER_EPHEMERAL
-              value: "false"
-            - name: SPAN_STORAGE_TYPE
-              value: "badger"
-            - name: BADGER_DIRECTORY_VALUE
-              value: "/badger/data"
-            - name: BADGER_DIRECTORY_KEY
-              value: "/badger/key"
-            - name: COLLECTOR_ZIPKIN_HOST_PORT
-              value: ":9411"
-            - name: MEMORY_MAX_TRACES
-              value: "50000"
-            - name: QUERY_BASE_PATH
-              value: /jaeger
-          livenessProbe:
-            httpGet:
-              path: /
-              port: 14269
-          readinessProbe:
-            httpGet:
-              path: /
-              port: 14269
-          volumeMounts:
-            - name: data
-              mountPath: /badger
-          resources:
-            requests:
-              cpu: 10m
-      volumes:
-        - name: data
-          emptyDir: {}
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: tracing
-  namespace: dubbo-system
-  labels:
-    app: jaeger
-spec:
-  type: ClusterIP
-  ports:
-    - name: http-query
-      port: 80
-      protocol: TCP
-      targetPort: 16686
-    # Note: Change port name if you add '--query.grpc.tls.enabled=true'
-    - name: grpc-query
-      port: 16685
-      protocol: TCP
-      targetPort: 16685
-  selector:
-    app: jaeger
----
-# Jaeger implements the Zipkin API. To support swapping out the tracing 
backend, we use a Service named Zipkin.
-apiVersion: v1
-kind: Service
-metadata:
-  labels:
-    name: zipkin
-  name: zipkin
-  namespace: dubbo-system
-spec:
-  ports:
-    - port: 9411
-      targetPort: 9411
-      name: http-query
-  selector:
-    app: jaeger
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: jaeger-collector
-  namespace: dubbo-system
-  labels:
-    app: jaeger
-spec:
-  type: ClusterIP
-  ports:
-  - name: jaeger-collector-http
-    port: 14268
-    targetPort: 14268
-    protocol: TCP
-  - name: jaeger-collector-grpc
-    port: 14250
-    targetPort: 14250
-    protocol: TCP
-  - port: 9411
-    targetPort: 9411
-    name: http-zipkin
-  - port: 4317
-    name: grpc-otel
-  - port: 4318
-    name: http-otel
-  selector:
-    app: jaeger
diff --git a/samples/addons/prometheus.yaml b/samples/addons/prometheus.yaml
deleted file mode 100644
index 08293b82..00000000
--- a/samples/addons/prometheus.yaml
+++ /dev/null
@@ -1,575 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-# Source: prometheus/templates/serviceaccount.yaml
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  labels:
-    app.kubernetes.io/component: server
-    app.kubernetes.io/name: prometheus
-    app.kubernetes.io/instance: prometheus
-    app.kubernetes.io/version: v3.2.1
-    helm.sh/chart: prometheus-27.8.0
-    app.kubernetes.io/part-of: prometheus
-  name: prometheus
-  namespace: dubbo-system
-  annotations:
-    {}
----
-# Source: prometheus/templates/cm.yaml
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  labels:
-    app.kubernetes.io/component: server
-    app.kubernetes.io/name: prometheus
-    app.kubernetes.io/instance: prometheus
-    app.kubernetes.io/version: v3.2.1
-    helm.sh/chart: prometheus-27.8.0
-    app.kubernetes.io/part-of: prometheus
-  name: prometheus
-  namespace: dubbo-system
-data:
-  allow-snippet-annotations: "false"
-  alerting_rules.yml: |
-    {}
-  alerts: |
-    {}
-  prometheus.yml: |
-    global:
-      evaluation_interval: 1m
-      scrape_interval: 15s
-      scrape_timeout: 10s
-    rule_files:
-    - /etc/config/recording_rules.yml
-    - /etc/config/alerting_rules.yml
-    - /etc/config/rules
-    - /etc/config/alerts
-    scrape_configs:
-    - job_name: prometheus
-      static_configs:
-      - targets:
-        - localhost:9090
-    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-      job_name: kubernetes-apiservers
-      kubernetes_sd_configs:
-      - role: endpoints
-      relabel_configs:
-      - action: keep
-        regex: default;kubernetes;https
-        source_labels:
-        - __meta_kubernetes_namespace
-        - __meta_kubernetes_service_name
-        - __meta_kubernetes_endpoint_port_name
-      scheme: https
-      tls_config:
-        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-      job_name: kubernetes-nodes
-      kubernetes_sd_configs:
-      - role: node
-      relabel_configs:
-      - action: labelmap
-        regex: __meta_kubernetes_node_label_(.+)
-      - replacement: kubernetes.default.svc:443
-        target_label: __address__
-      - regex: (.+)
-        replacement: /api/v1/nodes/$1/proxy/metrics
-        source_labels:
-        - __meta_kubernetes_node_name
-        target_label: __metrics_path__
-      scheme: https
-      tls_config:
-        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
-      job_name: kubernetes-nodes-cadvisor
-      kubernetes_sd_configs:
-      - role: node
-      relabel_configs:
-      - action: labelmap
-        regex: __meta_kubernetes_node_label_(.+)
-      - replacement: kubernetes.default.svc:443
-        target_label: __address__
-      - regex: (.+)
-        replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
-        source_labels:
-        - __meta_kubernetes_node_name
-        target_label: __metrics_path__
-      scheme: https
-      tls_config:
-        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-    - honor_labels: true
-      job_name: kubernetes-service-endpoints
-      kubernetes_sd_configs:
-      - role: endpoints
-      relabel_configs:
-      - action: keep
-        regex: true
-        source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scrape
-      - action: drop
-        regex: true
-        source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
-      - action: replace
-        regex: (https?)
-        source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scheme
-        target_label: __scheme__
-      - action: replace
-        regex: (.+)
-        source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_path
-        target_label: __metrics_path__
-      - action: replace
-        regex: (.+?)(?::\d+)?;(\d+)
-        replacement: $1:$2
-        source_labels:
-        - __address__
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-        target_label: __address__
-      - action: labelmap
-        regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+)
-        replacement: __param_$1
-      - action: labelmap
-        regex: __meta_kubernetes_service_label_(.+)
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_namespace
-        target_label: namespace
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_service_name
-        target_label: service
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_pod_node_name
-        target_label: node
-    - honor_labels: true
-      job_name: kubernetes-service-endpoints-slow
-      kubernetes_sd_configs:
-      - role: endpoints
-      relabel_configs:
-      - action: keep
-        regex: true
-        source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
-      - action: replace
-        regex: (https?)
-        source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_scheme
-        target_label: __scheme__
-      - action: replace
-        regex: (.+)
-        source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_path
-        target_label: __metrics_path__
-      - action: replace
-        regex: (.+?)(?::\d+)?;(\d+)
-        replacement: $1:$2
-        source_labels:
-        - __address__
-        - __meta_kubernetes_service_annotation_prometheus_io_port
-        target_label: __address__
-      - action: labelmap
-        regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+)
-        replacement: __param_$1
-      - action: labelmap
-        regex: __meta_kubernetes_service_label_(.+)
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_namespace
-        target_label: namespace
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_service_name
-        target_label: service
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_pod_node_name
-        target_label: node
-      scrape_interval: 5m
-      scrape_timeout: 30s
-    - honor_labels: true
-      job_name: prometheus-pushgateway
-      kubernetes_sd_configs:
-      - role: service
-      relabel_configs:
-      - action: keep
-        regex: pushgateway
-        source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_probe
-    - honor_labels: true
-      job_name: kubernetes-services
-      kubernetes_sd_configs:
-      - role: service
-      metrics_path: /probe
-      params:
-        module:
-        - http_2xx
-      relabel_configs:
-      - action: keep
-        regex: true
-        source_labels:
-        - __meta_kubernetes_service_annotation_prometheus_io_probe
-      - source_labels:
-        - __address__
-        target_label: __param_target
-      - replacement: blackbox
-        target_label: __address__
-      - source_labels:
-        - __param_target
-        target_label: instance
-      - action: labelmap
-        regex: __meta_kubernetes_service_label_(.+)
-      - source_labels:
-        - __meta_kubernetes_namespace
-        target_label: namespace
-      - source_labels:
-        - __meta_kubernetes_service_name
-        target_label: service
-    - honor_labels: true
-      job_name: kubernetes-pods
-      kubernetes_sd_configs:
-      - role: pod
-      relabel_configs:
-      - action: keep
-        regex: true
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_scrape
-      - action: drop
-        regex: true
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow
-      - action: replace
-        regex: (https?)
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_scheme
-        target_label: __scheme__
-      - action: replace
-        regex: (.+)
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_path
-        target_label: __metrics_path__
-      - action: replace
-        regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})
-        replacement: '[$2]:$1'
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_ip
-        target_label: __address__
-      - action: replace
-        regex: (\d+);((([0-9]+?)(\.|$)){4})
-        replacement: $2:$1
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_ip
-        target_label: __address__
-      - action: labelmap
-        regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+)
-        replacement: __param_$1
-      - action: labelmap
-        regex: __meta_kubernetes_pod_label_(.+)
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_namespace
-        target_label: namespace
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_pod_name
-        target_label: pod
-      - action: drop
-        regex: Pending|Succeeded|Failed|Completed
-        source_labels:
-        - __meta_kubernetes_pod_phase
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_pod_node_name
-        target_label: node
-    - honor_labels: true
-      job_name: kubernetes-pods-slow
-      kubernetes_sd_configs:
-      - role: pod
-      relabel_configs:
-      - action: keep
-        regex: true
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow
-      - action: replace
-        regex: (https?)
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_scheme
-        target_label: __scheme__
-      - action: replace
-        regex: (.+)
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_path
-        target_label: __metrics_path__
-      - action: replace
-        regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})
-        replacement: '[$2]:$1'
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_ip
-        target_label: __address__
-      - action: replace
-        regex: (\d+);((([0-9]+?)(\.|$)){4})
-        replacement: $2:$1
-        source_labels:
-        - __meta_kubernetes_pod_annotation_prometheus_io_port
-        - __meta_kubernetes_pod_ip
-        target_label: __address__
-      - action: labelmap
-        regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+)
-        replacement: __param_$1
-      - action: labelmap
-        regex: __meta_kubernetes_pod_label_(.+)
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_namespace
-        target_label: namespace
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_pod_name
-        target_label: pod
-      - action: drop
-        regex: Pending|Succeeded|Failed|Completed
-        source_labels:
-        - __meta_kubernetes_pod_phase
-      - action: replace
-        source_labels:
-        - __meta_kubernetes_pod_node_name
-        target_label: node
-      scrape_interval: 5m
-      scrape_timeout: 30s
-  recording_rules.yml: |
-    {}
-  rules: |
-    {}
----
-# Source: prometheus/templates/clusterrole.yaml
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  labels:
-    app.kubernetes.io/component: server
-    app.kubernetes.io/name: prometheus
-    app.kubernetes.io/instance: prometheus
-    app.kubernetes.io/version: v3.2.1
-    helm.sh/chart: prometheus-27.8.0
-    app.kubernetes.io/part-of: prometheus
-  name: prometheus
-rules:
-  - apiGroups:
-      - ""
-    resources:
-      - nodes
-      - nodes/proxy
-      - nodes/metrics
-      - services
-      - endpoints
-      - pods
-      - ingresses
-      - configmaps
-    verbs:
-      - get
-      - list
-      - watch
-  - apiGroups:
-      - "extensions"
-      - "networking.k8s.io"
-    resources:
-      - ingresses/status
-      - ingresses
-    verbs:
-      - get
-      - list
-      - watch
-  - apiGroups:
-      - "discovery.k8s.io"
-    resources:
-      - endpointslices
-    verbs:
-      - get
-      - list
-      - watch
-  - nonResourceURLs:
-      - "/metrics"
-    verbs:
-      - get
----
-# Source: prometheus/templates/clusterrolebinding.yaml
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  labels:
-    app.kubernetes.io/component: server
-    app.kubernetes.io/name: prometheus
-    app.kubernetes.io/instance: prometheus
-    app.kubernetes.io/version: v3.2.1
-    helm.sh/chart: prometheus-27.8.0
-    app.kubernetes.io/part-of: prometheus
-  name: prometheus
-subjects:
-  - kind: ServiceAccount
-    name: prometheus
-    namespace: dubbo-system
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: prometheus
----
-# Source: prometheus/templates/service.yaml
-apiVersion: v1
-kind: Service
-metadata:
-  labels:
-    app.kubernetes.io/component: server
-    app.kubernetes.io/name: prometheus
-    app.kubernetes.io/instance: prometheus
-    app.kubernetes.io/version: v3.2.1
-    helm.sh/chart: prometheus-27.8.0
-    app.kubernetes.io/part-of: prometheus
-  name: prometheus
-  namespace: dubbo-system
-spec:
-  ports:
-    - name: http
-      port: 9090
-      protocol: TCP
-      targetPort: 9090
-  selector:
-    app.kubernetes.io/component: server
-    app.kubernetes.io/name: prometheus
-    app.kubernetes.io/instance: prometheus
-  sessionAffinity: None
-  type: "ClusterIP"
----
-# Source: prometheus/templates/deploy.yaml
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  labels:
-    app.kubernetes.io/component: server
-    app.kubernetes.io/name: prometheus
-    app.kubernetes.io/instance: prometheus
-    app.kubernetes.io/version: v3.2.1
-    helm.sh/chart: prometheus-27.8.0
-    app.kubernetes.io/part-of: prometheus
-  name: prometheus
-  namespace: dubbo-system
-spec:
-  selector:
-    matchLabels:
-      app.kubernetes.io/component: server
-      app.kubernetes.io/name: prometheus
-      app.kubernetes.io/instance: prometheus
-  replicas: 1
-  revisionHistoryLimit: 10
-  strategy:
-    type: Recreate
-    rollingUpdate: null
-  template:
-    metadata:
-      labels:
-        app.kubernetes.io/component: server
-        app.kubernetes.io/name: prometheus
-        app.kubernetes.io/instance: prometheus
-        app.kubernetes.io/version: v3.2.1
-        helm.sh/chart: prometheus-27.8.0
-        app.kubernetes.io/part-of: prometheus
-        
-        sidecar.dubbo.apache.org/inject: "false"
-    spec:
-      enableServiceLinks: true
-      serviceAccountName: prometheus
-      containers:
-        - name: prometheus-server-configmap-reload
-          image: 
"sca-registry.cn-hangzhou.cr.aliyuncs.com/dubbo/prometheus-config-reloader:v0.81.0"
-          imagePullPolicy: "IfNotPresent"
-          args:
-            - --watched-dir=/etc/config
-            - --listen-address=0.0.0.0:8080
-            - --reload-url=http://127.0.0.1:9090/-/reload
-          ports:
-            - containerPort: 8080
-              name: metrics
-          livenessProbe:
-            httpGet:
-              path: /healthz
-              port: metrics
-              scheme: HTTP
-            initialDelaySeconds: 2
-            periodSeconds: 10
-          readinessProbe:
-            httpGet:
-              path: /healthz
-              port: metrics
-              scheme: HTTP
-            periodSeconds: 10
-          volumeMounts:
-            - name: config-volume
-              mountPath: /etc/config
-              readOnly: true
-
-        - name: prometheus-server
-          image: 
"sca-registry.cn-hangzhou.cr.aliyuncs.com/dubbo/prometheus:v3.2.1"
-          imagePullPolicy: "IfNotPresent"
-          args:
-            - --storage.tsdb.retention.time=15d
-            - --config.file=/etc/config/prometheus.yml
-            - --storage.tsdb.path=/data
-            - --web.console.libraries=/etc/prometheus/console_libraries
-            - --web.console.templates=/etc/prometheus/consoles
-            - --web.enable-lifecycle
-          ports:
-            - containerPort: 9090
-          readinessProbe:
-            httpGet:
-              path: /-/ready
-              port: 9090
-              scheme: HTTP
-            initialDelaySeconds: 0
-            periodSeconds: 5
-            timeoutSeconds: 4
-            failureThreshold: 3
-            successThreshold: 1
-          livenessProbe:
-            httpGet:
-              path: /-/healthy
-              port: 9090
-              scheme: HTTP
-            initialDelaySeconds: 30
-            periodSeconds: 15
-            timeoutSeconds: 10
-            failureThreshold: 3
-            successThreshold: 1
-          volumeMounts:
-            - name: config-volume
-              mountPath: /etc/config
-            - name: storage-volume
-              mountPath: /data
-              subPath: ""
-      dnsPolicy: ClusterFirst
-      terminationGracePeriodSeconds: 300
-      volumes:
-        - name: config-volume
-          configMap:
-            name: prometheus
-        - name: storage-volume
-          emptyDir:
-            {}
diff --git a/samples/grpc-app/grpc-app.yaml b/samples/grpc-app/grpc-app.yaml
index 06d0c5db..f02a7507 100644
--- a/samples/grpc-app/grpc-app.yaml
+++ b/samples/grpc-app/grpc-app.yaml
@@ -51,7 +51,7 @@ spec:
     spec:
       containers:
         - name: app
-          image: mfordjody/grpc-provider:dev-debug
+          image: dubboregistry/grpc-provider:master
           imagePullPolicy: Always
           ports:
             - containerPort: 17070
@@ -120,7 +120,7 @@ spec:
     spec:
       containers:
         - name: app
-          image: mfordjody/grpc-provider:dev-debug
+          image: dubboregistry/grpc-provider:master
           imagePullPolicy: Always
           ports:
             - containerPort: 17070
@@ -188,7 +188,7 @@ spec:
       containers:
         - name: app
           # Replace with your own image containing the consumer binary
-          image: mfordjody/grpc-consumer:dev-debug
+          image: dubboregistry/grpc-consumer:master
           imagePullPolicy: Always
           ports:
             - containerPort: 17171
diff --git a/samples/httpbin/README.md b/samples/httpbin/README.md
new file mode 100644
index 00000000..e49ea78e
--- /dev/null
+++ b/samples/httpbin/README.md
@@ -0,0 +1,58 @@
+# Httpbin Service
+
+```bash
+kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
+{ kubectl kustomize 
"github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.4.0" | kubectl apply 
-f -; }
+```
+
+```yaml
+kubectl create namespace dubbo-ingress
+kubectl apply -f - <<EOF
+apiVersion: gateway.networking.k8s.io/v1
+kind: Gateway
+metadata:
+  name: gateway
+  namespace: dubbo-ingress
+spec:
+  gatewayClassName: dubbo
+  listeners:
+  - name: default
+    hostname: "*.example.com"
+    port: 80
+    protocol: HTTP
+    allowedRoutes:
+      namespaces:
+        from: All
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: http
+  namespace: default
+spec:
+  parentRefs:
+  - name: gateway
+    namespace: dubbo-ingress
+  hostnames: ["httpbin.example.com"]
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /get
+    backendRefs:
+    - name: httpbin
+      port: 8000
+EOF
+```
+
+```bash
+NODE_IP=$(kubectl get nodes -o 
jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
+SVC_PORT=$(kubectl get svc gateway-dubbo -n dubbo-ingress -o 
jsonpath='{.spec.ports[?(@.port==80)].nodePort}')
+curl -s -I -HHost:httpbin.example.com "http://$NODE_IP:$SVC_PORT/get";
+```
+
+```bash
+kubectl delete httproute http
+kubectl delete gateways.gateway.networking.k8s.io gateway -n dubbo-ingress
+kubectl delete ns dubbo-ingress
+```
\ No newline at end of file
diff --git a/samples/httpbin/httpbin.yaml b/samples/httpbin/httpbin.yaml
new file mode 100644
index 00000000..941fc383
--- /dev/null
+++ b/samples/httpbin/httpbin.yaml
@@ -0,0 +1,43 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: httpbin
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: httpbin
+  labels:
+    app: httpbin
+    service: httpbin
+spec:
+  ports:
+    - name: http
+      port: 8000
+      targetPort: 8080
+  selector:
+    app: httpbin
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: httpbin
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: httpbin
+      version: v1
+  template:
+    metadata:
+      labels:
+        app: httpbin
+        version: v1
+    spec:
+      serviceAccountName: httpbin
+      containers:
+        - image: docker.io/mccutchen/go-httpbin:2.19.0
+          imagePullPolicy: IfNotPresent
+          name: httpbin
+          ports:
+            - containerPort: 8080
\ No newline at end of file

Reply via email to