You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2022/04/27 11:21:05 UTC

[skywalking] branch master updated: Support receive Kubernetes process from the Rover (#8960)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new a93667184f Support receive Kubernetes process from the Rover (#8960)
a93667184f is described below

commit a93667184fb6caba5d04e51e312996613bc08d50
Author: mrproliu <74...@qq.com>
AuthorDate: Wed Apr 27 19:20:50 2022 +0800

    Support receive Kubernetes process from the Rover (#8960)
---
 .github/workflows/skywalking.yaml                  |   4 +
 apm-protocol/apm-network/src/main/proto            |   2 +-
 docs/en/changes/changes.md                         |   1 +
 .../ebpf/EBPFProfilingMutationService.java         |   9 +-
 .../ebpf/analyze/EBPFProfilingAnalyzer.java        |   4 +-
 .../handler/EBPFProcessServiceHandler.java         |  47 ++++++++-
 .../e2e-v2/cases/profiling/ebpf/docker-compose.yml |  13 +--
 test/e2e-v2/cases/rover/process/istio/e2e.yaml     | 105 +++++++++++++++++++++
 .../rover/process/istio/expected/process.yml}      |  36 ++++---
 .../process/istio/expected/service-instance.yml}   |  20 ++--
 .../cases/rover/process/istio/expected/service.yml |  59 ++++++++++++
 .../env => cases/rover/process/istio/kind.yaml}    |  23 +++--
 test/e2e-v2/cases/rover/process/istio/rover.yaml   |  92 ++++++++++++++++++
 test/e2e-v2/script/env                             |   2 +-
 14 files changed, 365 insertions(+), 52 deletions(-)

diff --git a/.github/workflows/skywalking.yaml b/.github/workflows/skywalking.yaml
index 3f7d4a6bc5..bc29119ef7 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -451,6 +451,10 @@ jobs:
             config: test/e2e-v2/cases/vm/prometheus-node-exporter/e2e.yaml
           - name: So11y
             config: test/e2e-v2/cases/so11y/e2e.yaml
+
+          - name: Rover with Istio Process 1.13.1
+            config: test/e2e-v2/cases/rover/process/istio/e2e.yaml
+            env: ISTIO_VERSION=1.13.1
     steps:
       - uses: actions/checkout@v3
         with:
diff --git a/apm-protocol/apm-network/src/main/proto b/apm-protocol/apm-network/src/main/proto
index f9066463de..fd2a115f33 160000
--- a/apm-protocol/apm-network/src/main/proto
+++ b/apm-protocol/apm-network/src/main/proto
@@ -1 +1 @@
-Subproject commit f9066463deb7f9d1fbe8110eab3524694b0db298
+Subproject commit fd2a115f33eb55495369c83ee476495d4cb5b686
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 7f365445a4..139229e277 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -28,6 +28,7 @@
 * Fix the problem that some configurations (such as group.id) did not take effect due to the override order when using the kafkaConsumerConfig property to extend the configuration in Kafka Fetcher.
 * Remove build time from the OAP version.
 * Add data-generator module to run OAP in testing mode, generating mock data for testing.
+* Support receive Kubernetes processes from gRPC protocol.
 
 #### UI
 
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/EBPFProfilingMutationService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/EBPFProfilingMutationService.java
index 2f7430b159..84405fcecc 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/EBPFProfilingMutationService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/EBPFProfilingMutationService.java
@@ -40,6 +40,7 @@ import org.apache.skywalking.oap.server.library.util.StringUtil;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Comparator;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -150,9 +151,13 @@ public class EBPFProfilingMutationService implements Service {
 
         // query exist processes
         final List<EBPFProfilingTask> tasks = getProcessProfilingTaskDAO().queryTasks(
-                Arrays.asList(request.getServiceId()), request.getTargetType(), calculateStartTime(request), 0);
+                Arrays.asList(request.getServiceId()), request.getTargetType(), request.getStartTime(), 0);
         if (CollectionUtils.isNotEmpty(tasks)) {
-            return "already have profiling task at this time";
+            final EBPFProfilingTask mostRecentTask = tasks.stream()
+                    .min(Comparator.comparingLong(EBPFProfilingTask::getTaskStartTime)).get();
+            if (mostRecentTask.getTaskStartTime() < calculateStartTime(request)) {
+                return "Task's time range overlaps with other tasks";
+            }
         }
         return null;
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/analyze/EBPFProfilingAnalyzer.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/analyze/EBPFProfilingAnalyzer.java
index 41f11635ab..4d768feb8d 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/analyze/EBPFProfilingAnalyzer.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/analyze/EBPFProfilingAnalyzer.java
@@ -118,8 +118,8 @@ public class EBPFProfilingAnalyzer {
         }
 
         if (totalDuration > maxAnalyzeTimeRangeInMillisecond) {
-            return "time range is out of " +
-                    TimeUnit.MILLISECONDS.toMinutes(this.maxAnalyzeTimeRangeInMillisecond) + " minute";
+            return "The time range should not be out of " +
+                    TimeUnit.MILLISECONDS.toMinutes(this.maxAnalyzeTimeRangeInMillisecond) + " minutes";
         }
         return null;
     }
diff --git a/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/EBPFProcessServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/EBPFProcessServiceHandler.java
index 526d1d06e4..c4e9a96179 100644
--- a/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/EBPFProcessServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/EBPFProcessServiceHandler.java
@@ -23,8 +23,11 @@ import io.grpc.stub.StreamObserver;
 import io.vavr.Tuple;
 import io.vavr.Tuple2;
 import org.apache.skywalking.apm.network.common.v3.Commands;
+import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
 import org.apache.skywalking.apm.network.ebpf.profiling.process.v3.EBPFHostProcessDownstream;
 import org.apache.skywalking.apm.network.ebpf.profiling.process.v3.EBPFHostProcessMetadata;
+import org.apache.skywalking.apm.network.ebpf.profiling.process.v3.EBPFKubernetesProcessDownstream;
+import org.apache.skywalking.apm.network.ebpf.profiling.process.v3.EBPFKubernetesProcessMetadata;
 import org.apache.skywalking.apm.network.ebpf.profiling.process.v3.EBPFProcessDownstream;
 import org.apache.skywalking.apm.network.ebpf.profiling.process.v3.EBPFProcessEntityMetadata;
 import org.apache.skywalking.apm.network.ebpf.profiling.process.v3.EBPFProcessPingPkgList;
@@ -38,7 +41,6 @@ import org.apache.skywalking.oap.server.core.analysis.IDManager;
 import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
 import org.apache.skywalking.oap.server.core.analysis.manual.process.ProcessDetectType;
-import org.apache.skywalking.oap.server.core.analysis.manual.process.ProcessTraffic;
 import org.apache.skywalking.oap.server.core.config.NamingControl;
 import org.apache.skywalking.oap.server.core.source.Process;
 import org.apache.skywalking.oap.server.core.source.ServiceLabel;
@@ -74,6 +76,8 @@ public class EBPFProcessServiceHandler extends EBPFProcessServiceGrpc.EBPFProces
             Tuple2<Process, EBPFProcessDownstream> processData = null;
             if (ebpfProcessProperties.hasHostProcess()) {
                 processData = prepareReportHostProcess(ebpfProcessProperties.getHostProcess(), agentId);
+            } else if (ebpfProcessProperties.hasK8SProcess()) {
+                processData = prepareReportKubernetesProcess(ebpfProcessProperties.getK8SProcess(), agentId);
             }
 
             if (processData != null) {
@@ -151,9 +155,9 @@ public class EBPFProcessServiceHandler extends EBPFProcessServiceGrpc.EBPFProces
         process.setDetectType(ProcessDetectType.VM);
         process.setAgentId(agentId);
         final JsonObject properties = new JsonObject();
-        properties.addProperty(ProcessTraffic.PropertyUtil.HOST_IP, hostProcess.getHostIP());
-        properties.addProperty(ProcessTraffic.PropertyUtil.PID, hostProcess.getPid());
-        properties.addProperty(ProcessTraffic.PropertyUtil.COMMAND_LINE, hostProcess.getCmd());
+        for (KeyStringValuePair kv : hostProcess.getPropertiesList()) {
+            properties.addProperty(kv.getKey(), kv.getValue());
+        }
         process.setProperties(properties);
         process.setLabels(hostProcess.getEntity().getLabelsList());
 
@@ -172,6 +176,41 @@ public class EBPFProcessServiceHandler extends EBPFProcessServiceGrpc.EBPFProces
         return Tuple.of(process, downstream);
     }
 
+    private Tuple2<Process, EBPFProcessDownstream> prepareReportKubernetesProcess(EBPFKubernetesProcessMetadata kubernetesProcessMetadata, String agentId) {
+        final Process process = new Process();
+
+        // entity
+        process.setServiceName(namingControl.formatServiceName(kubernetesProcessMetadata.getEntity().getServiceName()));
+        process.setServiceNormal(true);
+        process.setLayer(Layer.valueOf(kubernetesProcessMetadata.getEntity().getLayer()));
+        process.setInstanceName(namingControl.formatInstanceName(kubernetesProcessMetadata.getEntity().getInstanceName()));
+        process.setName(kubernetesProcessMetadata.getEntity().getProcessName());
+
+        // metadata
+        process.setDetectType(ProcessDetectType.KUBERNETES);
+        process.setAgentId(agentId);
+        final JsonObject properties = new JsonObject();
+        for (KeyStringValuePair kv : kubernetesProcessMetadata.getPropertiesList()) {
+            properties.addProperty(kv.getKey(), kv.getValue());
+        }
+        process.setProperties(properties);
+        process.setLabels(kubernetesProcessMetadata.getEntity().getLabelsList());
+
+        // timestamp
+        process.setTimeBucket(
+                TimeBucket.getTimeBucket(System.currentTimeMillis(), DownSampling.Minute));
+
+        process.prepare();
+        final String processId = process.getEntityId();
+        final EBPFProcessDownstream downstream = EBPFProcessDownstream.newBuilder()
+                .setProcessId(processId)
+                .setK8SProcess(EBPFKubernetesProcessDownstream.newBuilder()
+                        .setPid(kubernetesProcessMetadata.getPid())
+                        .build())
+                .build();
+        return Tuple.of(process, downstream);
+    }
+
     /**
      * Append service label
      */
diff --git a/test/e2e-v2/cases/profiling/ebpf/docker-compose.yml b/test/e2e-v2/cases/profiling/ebpf/docker-compose.yml
index 6e66c6acb6..cff480fde8 100644
--- a/test/e2e-v2/cases/profiling/ebpf/docker-compose.yml
+++ b/test/e2e-v2/cases/profiling/ebpf/docker-compose.yml
@@ -39,12 +39,13 @@ services:
       ROVER_BACKEND_ADDR: oap:11800
       ROVER_PROCESS_DISCOVERY_HEARTBEAT_PERIOD: 2s
       ROVER_PROCESS_DISCOVERY_VM_ACTIVE: "true"
-      ROVER_PROCESS_DISCOVERY_VM_FINDER_MATCH_CMD_REGEX: sqrt
-      ROVER_PROCESS_DISCOVERY_VM_FINDER_LAYER: OS_LINUX
-      ROVER_PROCESS_DISCOVERY_VM_FINDER_SERVICE_NAME: sqrt
-      ROVER_PROCESS_DISCOVERY_VM_FINDER_INSTANCE_NAME: test-instance
-      ROVER_PROCESS_DISCOVERY_VM_FINDER_PROCESS_NAME: "{{.Process.ExeName}}"
-      ROVER_PROCESS_DISCOVERY_VM_FINDER_PROCESS_LABELS: e2e-label1,e2e-label2
+      ROVER_PROCESS_DISCOVERY_SCAN_MODE: REGEX
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_MATCH_CMD: sqrt
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LAYER: OS_LINUX
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_SERVICE_NAME: sqrt
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_INSTANCE_NAME: test-instance
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_PROCESS_NAME: "{{.Process.ExeName}}"
+      ROVER_PROCESS_DISCOVERY_REGEX_SCANNER_LABELS: e2e-label1,e2e-label2
       ROVER_PROFILING_ACTIVE: "true"
       ROVER_PROFILING_CHECK_INTERVAL: 2s
       ROVER_PROFILING_FLUSH_INTERVAL: 5s
diff --git a/test/e2e-v2/cases/rover/process/istio/e2e.yaml b/test/e2e-v2/cases/rover/process/istio/e2e.yaml
new file mode 100644
index 0000000000..647402453c
--- /dev/null
+++ b/test/e2e-v2/cases/rover/process/istio/e2e.yaml
@@ -0,0 +1,105 @@
+# 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.
+
+# This file is used to show how to write configuration files and can be used to test.
+
+setup:
+  env: kind
+  file: kind.yaml
+  init-system-environment: ../../../../script/env
+  kind:
+    import-images:
+      - skywalking/ui:latest
+      - skywalking/oap:latest
+    expose-ports:
+      - namespace: istio-system
+        resource: service/skywalking-ui
+        port: 80
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+    - name: install kubectl
+      command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh kubectl
+    - name: install istio
+      command: |
+        bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh istioctl
+        istioctl install -y --set profile=demo
+        kubectl label namespace default istio-injection=enabled
+    - name: Install helm
+      command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh helm
+    - name: Install kubectl
+      command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh kubectl
+    - name: Install SkyWalking
+      command: |
+        rm -rf skywalking-kubernetes && git clone https://github.com/apache/skywalking-kubernetes.git
+        cd skywalking-kubernetes
+        git reset --hard $SW_KUBERNETES_COMMIT_SHA
+        cd chart
+        helm dep up skywalking
+        helm -n istio-system install skywalking skywalking \
+                       --set fullnameOverride=skywalking \
+                       --set elasticsearch.replicas=1 \
+                       --set elasticsearch.minimumMasterNodes=1 \
+                       --set elasticsearch.imageTag=7.5.1 \
+                       --set oap.replicas=1 \
+                       --set ui.image.repository=skywalking/ui \
+                       --set ui.image.tag=latest \
+                       --set oap.image.tag=latest \
+                       --set oap.image.repository=skywalking/oap \
+                       --set oap.storageType=elasticsearch
+      wait:
+        - namespace: istio-system
+          resource: deployments/skywalking-oap
+          for: condition=available
+    - name: Deploy demo services
+      command: |
+        kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/platform/kube/bookinfo.yaml
+        kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/bookinfo-gateway.yaml
+        kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/destination-rule-all.yaml
+        kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_VERSION/samples/bookinfo/networking/virtual-service-all-v1.yaml
+      wait:
+        - namespace: default
+          resource: pod
+          for: condition=Ready
+    - name: Install SkyWalking Rover
+      command: |
+        envsubst < test/e2e-v2/cases/rover/process/istio/rover.yaml | kubectl apply -f -
+      wait:
+        - namespace: default
+          resource: pod
+          for: condition=Ready
+  timeout: 25m
+
+verify:
+  retry:
+    count: 20
+    interval: 3s
+  cases:
+    # service list
+    - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql service ls
+      expected: expected/service.yml
+    # service instance list
+    - query: swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=default::productpage
+      expected: expected/service-instance.yml
+    # process list
+    - query: |
+        swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql process list --service-name=default::productpage --instance-name=$( \
+          swctl --display yaml --base-url=http://${service_skywalking_ui_host}:${service_skywalking_ui_80}/graphql instance list --service-name=default::productpage |yq e '.[0].name' - \
+        )
+      expected: expected/process.yml
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/cases/rover/process/istio/expected/process.yml
similarity index 52%
copy from test/e2e-v2/script/env
copy to test/e2e-v2/cases/rover/process/istio/expected/process.yml
index 6d282bce78..c86d7d2310 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/cases/rover/process/istio/expected/process.yml
@@ -13,15 +13,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-SW_AGENT_JAVA_COMMIT=65032a9b485411363b5297fadc970115d22b13b8
-SW_AGENT_SATELLITE_COMMIT=1987e1d566ac90f6b58a45fd9bfa27bf8faad635
-SW_AGENT_NGINX_LUA_COMMIT=c3cee4841798a147d83b96a10914d4ac0e11d0aa
-SW_AGENT_NODEJS_COMMIT=2e7560518aff846befd4d6bc815fe5e38c704a11
-SW_AGENT_GO_COMMIT=4af380c2db6243106b0fc650b6003ce3b3eb82a0
-SW_AGENT_PYTHON_COMMIT=c76a6ec51a478ac91abb20ec8f22a99b8d4d6a58
-SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
-SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
-SW_KUBERNETES_COMMIT_SHA=0f3ec68e5a7e1608cec8688716b848ed15e971e5
-SW_ROVER_COMMIT=f7f5ac31aa2288861ca729ed349f0da9e66d4558
-
-SW_CTL_COMMIT=9ad35d097e8966ac9324f1d570b1a2d264b38ca1
+{{- contains . }}
+- id: {{ notEmpty .id }}
+  name: envoy
+  serviceid: {{ b64enc "default::productpage" }}.1
+  servicename: default::productpage
+  instanceid: {{ notEmpty .instanceid }}
+  instancename: {{ notEmpty .instancename }}
+  layer: MESH_DP
+  agentid: {{ notEmpty .agentid }}
+  detecttype: KUBERNETES
+  attributes:
+    {{- contains .attributes }}
+    - name: host_ip
+      value: {{ notEmpty .value }}
+    - name: container_ip
+      value: {{ notEmpty .value }}
+    - name: pid
+      value: {{ notEmpty .value }}
+    - name: command_line
+      value: {{ notEmpty .value }}
+    {{- end }}
+  labels:
+    - mesh-envoy
+{{- end }}
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/cases/rover/process/istio/expected/service-instance.yml
similarity index 52%
copy from test/e2e-v2/script/env
copy to test/e2e-v2/cases/rover/process/istio/expected/service-instance.yml
index 6d282bce78..b8e3c0f53e 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/cases/rover/process/istio/expected/service-instance.yml
@@ -13,15 +13,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-SW_AGENT_JAVA_COMMIT=65032a9b485411363b5297fadc970115d22b13b8
-SW_AGENT_SATELLITE_COMMIT=1987e1d566ac90f6b58a45fd9bfa27bf8faad635
-SW_AGENT_NGINX_LUA_COMMIT=c3cee4841798a147d83b96a10914d4ac0e11d0aa
-SW_AGENT_NODEJS_COMMIT=2e7560518aff846befd4d6bc815fe5e38c704a11
-SW_AGENT_GO_COMMIT=4af380c2db6243106b0fc650b6003ce3b3eb82a0
-SW_AGENT_PYTHON_COMMIT=c76a6ec51a478ac91abb20ec8f22a99b8d4d6a58
-SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
-SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
-SW_KUBERNETES_COMMIT_SHA=0f3ec68e5a7e1608cec8688716b848ed15e971e5
-SW_ROVER_COMMIT=f7f5ac31aa2288861ca729ed349f0da9e66d4558
-
-SW_CTL_COMMIT=9ad35d097e8966ac9324f1d570b1a2d264b38ca1
+{{- contains . }}
+- id: {{ notEmpty .id }}
+  name: {{ notEmpty .name }}
+  attributes: []
+  language: UNKNOWN
+  instanceuuid: {{ notEmpty .instanceuuid }}
+  layer: MESH_DP
+{{- end }}
diff --git a/test/e2e-v2/cases/rover/process/istio/expected/service.yml b/test/e2e-v2/cases/rover/process/istio/expected/service.yml
new file mode 100644
index 0000000000..5aa540b05a
--- /dev/null
+++ b/test/e2e-v2/cases/rover/process/istio/expected/service.yml
@@ -0,0 +1,59 @@
+# 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.
+
+{{- contains . }}
+- id: {{ b64enc "default::details" }}.1
+  name: default::details
+  group: default
+  shortname: details
+  layers:
+    - MESH_DP
+  normal: true
+- id: {{ b64enc "istio-system::istio-ingressgateway" }}.1
+  name: istio-system::istio-ingressgateway
+  group: istio-system
+  shortname: istio-ingressgateway
+  layers:
+    - MESH_DP
+  normal: true
+- id: {{ b64enc "default::productpage" }}.1
+  name: default::productpage
+  group: default
+  shortname: productpage
+  layers:
+    - MESH_DP
+  normal: true
+- id: {{ b64enc "default::ratings" }}.1
+  name: default::ratings
+  group: default
+  shortname: ratings
+  layers:
+    - MESH_DP
+  normal: true
+- id: {{ b64enc "default::reviews" }}.1
+  name: default::reviews
+  group: default
+  shortname: reviews
+  layers:
+    - MESH_DP
+  normal: true
+- id: {{ b64enc "istio-system::istio-egressgateway" }}.1
+  name: istio-system::istio-egressgateway
+  group: istio-system
+  shortname: istio-egressgateway
+  layers:
+    - MESH_DP
+  normal: true
+{{- end }}
\ No newline at end of file
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/cases/rover/process/istio/kind.yaml
similarity index 52%
copy from test/e2e-v2/script/env
copy to test/e2e-v2/cases/rover/process/istio/kind.yaml
index 6d282bce78..2f9384fc40 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/cases/rover/process/istio/kind.yaml
@@ -13,15 +13,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-SW_AGENT_JAVA_COMMIT=65032a9b485411363b5297fadc970115d22b13b8
-SW_AGENT_SATELLITE_COMMIT=1987e1d566ac90f6b58a45fd9bfa27bf8faad635
-SW_AGENT_NGINX_LUA_COMMIT=c3cee4841798a147d83b96a10914d4ac0e11d0aa
-SW_AGENT_NODEJS_COMMIT=2e7560518aff846befd4d6bc815fe5e38c704a11
-SW_AGENT_GO_COMMIT=4af380c2db6243106b0fc650b6003ce3b3eb82a0
-SW_AGENT_PYTHON_COMMIT=c76a6ec51a478ac91abb20ec8f22a99b8d4d6a58
-SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
-SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
-SW_KUBERNETES_COMMIT_SHA=0f3ec68e5a7e1608cec8688716b848ed15e971e5
-SW_ROVER_COMMIT=f7f5ac31aa2288861ca729ed349f0da9e66d4558
-
-SW_CTL_COMMIT=9ad35d097e8966ac9324f1d570b1a2d264b38ca1
+# this config file contains all config fields with comments
+# NOTE: this is not a particularly useful config file
+kind: Cluster
+apiVersion: kind.x-k8s.io/v1alpha4
+nodes:
+  # the control plane node config
+  - role: control-plane
+  # the three workers
+  - role: worker
+  - role: worker
+  - role: worker
diff --git a/test/e2e-v2/cases/rover/process/istio/rover.yaml b/test/e2e-v2/cases/rover/process/istio/rover.yaml
new file mode 100644
index 0000000000..b064754824
--- /dev/null
+++ b/test/e2e-v2/cases/rover/process/istio/rover.yaml
@@ -0,0 +1,92 @@
+# 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: v1
+kind: ServiceAccount
+metadata:
+  name: skywalking-rover
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: skywalking-rover
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: skywalking-rover
+subjects:
+  - kind: ServiceAccount
+    name: skywalking-rover
+    namespace: default
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: skywalking-rover
+rules:
+  - apiGroups: [""]
+    resources: ["pods", "nodes", "services"]
+    verbs: ["get", "watch", "list"]
+---
+
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+  name: skywalking-rover
+spec:
+  selector:
+    matchLabels:
+      name: skywalking-rover
+  template:
+    metadata:
+      labels:
+        name: skywalking-rover
+    spec:
+      serviceAccountName: skywalking-rover
+      serviceAccount: skywalking-rover
+      containers:
+        - name: skywalking-rover
+          # SkyWalking Rover image path
+          image: ghcr.io/apache/skywalking-rover/skywalking-rover:$SW_ROVER_COMMIT
+          securityContext:
+            capabilities:
+              add:
+                - SYS_PTRACE
+                - SYS_ADMIN
+            privileged: true
+          volumeMounts:
+            - name: host
+              mountPath: /host
+              readOnly: true
+          env:
+            - name: ROVER_PROCESS_DISCOVERY_KUBERNETES_ACTIVE
+              value: "true"
+            - name: ROVER_PROCESS_DISCOVERY_KUBERNETES_NODE_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: spec.nodeName
+            - name: ROVER_BACKEND_ADDR
+              # backend OAP address
+              value: skywalking-oap.istio-system:11800
+            - name: ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_K8S_SERVICE_ACTIVE
+              value: "false"
+      hostPID: true
+      hostNetwork: true
+      dnsPolicy: ClusterFirstWithHostNet
+      volumes:
+        - name: host
+          hostPath:
+            path: /
+            type: Directory
\ No newline at end of file
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/script/env
index 6d282bce78..d2868f37af 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/script/env
@@ -22,6 +22,6 @@ SW_AGENT_PYTHON_COMMIT=c76a6ec51a478ac91abb20ec8f22a99b8d4d6a58
 SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
 SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
 SW_KUBERNETES_COMMIT_SHA=0f3ec68e5a7e1608cec8688716b848ed15e971e5
-SW_ROVER_COMMIT=f7f5ac31aa2288861ca729ed349f0da9e66d4558
+SW_ROVER_COMMIT=de66f0e0d10ba4d40137ec4c5475ae97931b4056
 
 SW_CTL_COMMIT=9ad35d097e8966ac9324f1d570b1a2d264b38ca1