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

wankai 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 e30c2128fe KubernetesCoordinator: make self instance return real pod 
IP address instead of `127.0.0.1`. (#13577)
e30c2128fe is described below

commit e30c2128fe879e61430d5d5823e6e54b3dc81740
Author: Wan Kai <[email protected]>
AuthorDate: Thu Nov 13 11:30:18 2025 +0800

    KubernetesCoordinator: make self instance return real pod IP address 
instead of `127.0.0.1`. (#13577)
---
 docs/en/changes/changes.md                         |  2 ++
 .../plugin/kubernetes/KubernetesCoordinator.java   | 12 +++++++-
 .../KubernetesLabelSelectorEndpointGroup.java      | 34 ++++++++++++++++------
 3 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 07ef81a351..b31cc331e4 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -4,6 +4,8 @@
 
 #### OAP Server
 
+* KubernetesCoordinator: make self instance return real pod IP address instead 
of `127.0.0.1`.
+
 #### UI
 
 #### Documentation
diff --git 
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
 
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
index f06ee72818..16fbecfbc3 100644
--- 
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
+++ 
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesCoordinator.java
@@ -18,6 +18,7 @@
 
 package org.apache.skywalking.oap.server.cluster.plugin.kubernetes;
 
+import com.linecorp.armeria.client.Endpoint;
 import io.fabric8.kubernetes.client.KubernetesClientBuilder;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.core.CoreModule;
@@ -152,7 +153,16 @@ public class KubernetesCoordinator extends 
ClusterCoordinator {
                     .collect(Collectors.toList());
 
             // The endpoint group will never include itself, add it.
-            final var selfInstance = new RemoteInstance(new 
Address("127.0.0.1", port, true));
+            Endpoint selfEndpoint = null;
+            if (endpointGroup instanceof KubernetesLabelSelectorEndpointGroup) 
{
+                selfEndpoint = ((KubernetesLabelSelectorEndpointGroup) 
endpointGroup).getSelfEndpoint();
+            }
+            final RemoteInstance selfInstance;
+            if (selfEndpoint == null) {
+                selfInstance = new RemoteInstance(new Address("127.0.0.1", 
port, true));
+            } else {
+                selfInstance = new RemoteInstance(new 
Address(selfEndpoint.host(), selfEndpoint.port(), true));
+            }
             instances.add(selfInstance);
 
             if (log.isDebugEnabled()) {
diff --git 
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesLabelSelectorEndpointGroup.java
 
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesLabelSelectorEndpointGroup.java
index 36fa6d6aae..63f6f9f411 100644
--- 
a/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesLabelSelectorEndpointGroup.java
+++ 
b/oap-server/server-cluster-plugin/cluster-kubernetes-plugin/src/main/java/org/apache/skywalking/oap/server/cluster/plugin/kubernetes/KubernetesLabelSelectorEndpointGroup.java
@@ -28,7 +28,10 @@ import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.informers.ResourceEventHandler;
 import io.fabric8.kubernetes.client.informers.SharedIndexInformer;
 import io.fabric8.kubernetes.client.informers.cache.Lister;
+import java.util.ArrayList;
+import java.util.List;
 import lombok.Data;
+import lombok.Getter;
 import lombok.experimental.Accessors;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.library.util.StringUtil;
@@ -36,7 +39,6 @@ import 
org.apache.skywalking.oap.server.library.util.StringUtil;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
 
 @Slf4j
 public class KubernetesLabelSelectorEndpointGroup extends DynamicEndpointGroup 
{
@@ -48,6 +50,8 @@ public class KubernetesLabelSelectorEndpointGroup extends 
DynamicEndpointGroup {
     private final String portName;
     private final SharedIndexInformer<Pod> podInformer;
     private final String selfUid;
+    @Getter
+    private volatile Endpoint selfEndpoint;
 
     private KubernetesLabelSelectorEndpointGroup(Builder builder) {
         super(builder.selectionStrategy);
@@ -92,14 +96,26 @@ public class KubernetesLabelSelectorEndpointGroup extends 
DynamicEndpointGroup {
             }
             final var podLister = new Lister<>(podInformer.getIndexer());
             final var pods = podLister.namespace(namespace).list();
-
-            final var newEndpoints = pods.stream()
-                    .filter(this::isPodReady)
-                    .filter(pod -> 
StringUtil.isNotBlank(pod.getStatus().getPodIP()))
-                    .filter(pod -> !pod.getMetadata().getUid().equals(selfUid))
-                    .map(this::createEndpoint)
-                    .filter(endpoint -> endpoint != null)
-                    .collect(Collectors.toList());
+            final List<Endpoint> newEndpoints = new ArrayList<>();
+            for (Pod pod : pods) {
+                if (!isPodReady(pod)) {
+                    continue;
+                }
+                if (StringUtil.isBlank(pod.getStatus().getPodIP())) {
+                    continue;
+                }
+                if (pod.getMetadata().getUid().equals(selfUid)) {
+                    Endpoint endpoint = createEndpoint(pod);
+                    if (endpoint != null) {
+                        selfEndpoint = endpoint;
+                    }
+                    continue;
+                }
+                Endpoint endpoint = createEndpoint(pod);
+                if (endpoint != null) {
+                    newEndpoints.add(endpoint);
+                }
+            }
 
             log.debug("Updating endpoints to: {}", newEndpoints);
             setEndpoints(newEndpoints);

Reply via email to