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