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);