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

ronething pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new 59af65e1 fix: adc backend server on different mode (#2455)
59af65e1 is described below

commit 59af65e1bcfeb605f1e416fc6b603f17241cba16
Author: 悟空 <rainchan...@163.com>
AuthorDate: Sat Jul 5 12:34:51 2025 +0800

    fix: adc backend server on different mode (#2455)
---
 internal/provider/adc/config.go      | 53 +++++++++++++++++++++---------------
 test/e2e/crds/gatewayproxy.go        | 18 ++++++++++++
 test/e2e/framework/k8s.go            |  6 ++--
 test/e2e/gatewayapi/httproute.go     | 34 ++++-------------------
 test/e2e/scaffold/apisix_deployer.go | 24 ++++++++--------
 test/e2e/scaffold/scaffold.go        | 24 ++++++++++------
 6 files changed, 87 insertions(+), 72 deletions(-)

diff --git a/internal/provider/adc/config.go b/internal/provider/adc/config.go
index ec6d94fc..7eb55fc5 100644
--- a/internal/provider/adc/config.go
+++ b/internal/provider/adc/config.go
@@ -92,31 +92,40 @@ func (d *adcClient) getConfigsForGatewayProxy(tctx 
*provider.TranslateContext, g
                if !ok {
                        return nil, fmt.Errorf("no service found for service 
reference: %s", namespacedName)
                }
-               endpoint := tctx.EndpointSlices[namespacedName]
-               if endpoint == nil {
-                       return nil, nil
-               }
-               upstreamNodes, err := 
d.translator.TranslateBackendRefWithFilter(tctx, gatewayv1.BackendRef{
-                       BackendObjectReference: 
gatewayv1.BackendObjectReference{
-                               Name:      
gatewayv1.ObjectName(provider.ControlPlane.Service.Name),
-                               Namespace: 
(*gatewayv1.Namespace)(&gatewayProxy.Namespace),
-                               Port:      
ptr.To(gatewayv1.PortNumber(provider.ControlPlane.Service.Port)),
-                       },
-               }, func(endpoint *discoveryv1.Endpoint) bool {
-                       if endpoint.Conditions.Terminating != nil && 
*endpoint.Conditions.Terminating {
-                               log.Debugw("skip terminating endpoint", 
zap.Any("endpoint", endpoint))
-                               return false
+
+               // APISIXStandalone, configurations need to be sent to each 
data plane instance;
+               // In other cases, the service is directly accessed as the adc 
backend server address.
+               if d.BackendMode == BackendModeAPISIXStandalone {
+                       endpoint := tctx.EndpointSlices[namespacedName]
+                       if endpoint == nil {
+                               return nil, nil
+                       }
+                       upstreamNodes, err := 
d.translator.TranslateBackendRefWithFilter(tctx, gatewayv1.BackendRef{
+                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                       Name:      
gatewayv1.ObjectName(provider.ControlPlane.Service.Name),
+                                       Namespace: 
(*gatewayv1.Namespace)(&gatewayProxy.Namespace),
+                                       Port:      
ptr.To(gatewayv1.PortNumber(provider.ControlPlane.Service.Port)),
+                               },
+                       }, func(endpoint *discoveryv1.Endpoint) bool {
+                               if endpoint.Conditions.Terminating != nil && 
*endpoint.Conditions.Terminating {
+                                       log.Debugw("skip terminating endpoint", 
zap.Any("endpoint", endpoint))
+                                       return false
+                               }
+                               return true
+                       })
+                       if err != nil {
+                               return nil, err
+                       }
+                       for _, node := range upstreamNodes {
+                               config.ServerAddrs = append(config.ServerAddrs, 
"http://"+net.JoinHostPort(node.Host, strconv.Itoa(node.Port)))
+                       }
+               } else {
+                       config.ServerAddrs = []string{
+                               fmt.Sprintf("http://%s.%s:%d";, 
provider.ControlPlane.Service.Name, gatewayProxy.Namespace, 
provider.ControlPlane.Service.Port),
                        }
-                       return true
-               })
-               if err != nil {
-                       return nil, err
-               }
-               for _, node := range upstreamNodes {
-                       config.ServerAddrs = append(config.ServerAddrs, 
"http://"+net.JoinHostPort(node.Host, strconv.Itoa(node.Port)))
                }
 
-               log.Debugf("add server address to config.ServiceAddrs: %v", 
config.ServerAddrs)
+               log.Debugw("add server address to config.ServiceAddrs", 
zap.Strings("config.ServerAddrs", config.ServerAddrs))
        }
 
        return &config, nil
diff --git a/test/e2e/crds/gatewayproxy.go b/test/e2e/crds/gatewayproxy.go
index 57098df4..70773f6f 100644
--- a/test/e2e/crds/gatewayproxy.go
+++ b/test/e2e/crds/gatewayproxy.go
@@ -30,6 +30,7 @@ import (
        "k8s.io/apimachinery/pkg/util/wait"
        "k8s.io/utils/ptr"
 
+       "github.com/apache/apisix-ingress-controller/internal/provider/adc"
        "github.com/apache/apisix-ingress-controller/test/e2e/framework"
        "github.com/apache/apisix-ingress-controller/test/e2e/scaffold"
 )
@@ -173,4 +174,21 @@ spec:
                        }
                })
        })
+
+       Context("Backend server", func() {
+               It("backend server on apisix/apisix-standalone mode", func() {
+                       var (
+                               keyword string
+                       )
+
+                       if framework.ProviderType == adc.BackendModeAPISIX {
+                               keyword = fmt.Sprintf(`{"config.ServerAddrs": 
["%s"]}`, s.Deployer.GetAdminEndpoint())
+                       } else {
+                               keyword = fmt.Sprintf(`{"config.ServerAddrs": 
["http://%s:9180"]}`, s.GetPodIP(s.Namespace(), 
"app.kubernetes.io/name=apisix"))
+                       }
+
+                       By(fmt.Sprintf("wait for keyword: %s", keyword))
+                       s.WaitControllerManagerLog(keyword, 60, time.Minute)
+               })
+       })
 })
diff --git a/test/e2e/framework/k8s.go b/test/e2e/framework/k8s.go
index 4848b62d..3fb71598 100644
--- a/test/e2e/framework/k8s.go
+++ b/test/e2e/framework/k8s.go
@@ -201,8 +201,9 @@ func (f *Framework) Scale(name string, replicas int32) {
                fmt.Sprintf("ensure service %s/%s has %v endpoints failed", 
_namespace, name, replicas))
 }
 
-func (f *Framework) GetPodIP(selector string) string {
-       pods := f.GetPods("", selector)
+func (f *Framework) GetPodIP(namespace, selector string) string {
+       pods := f.GetPods(namespace, selector)
+       f.GomegaT.Expect(pods).ShouldNot(BeEmpty())
        return pods[0].Status.PodIP
 }
 
@@ -211,7 +212,6 @@ func (f *Framework) GetPods(namespace, selector string) 
[]corev1.Pod {
                LabelSelector: selector,
        })
        f.GomegaT.Expect(err).ShouldNot(HaveOccurred())
-       f.GomegaT.Expect(podList.Items).ShouldNot(BeEmpty())
        return podList.Items
 }
 
diff --git a/test/e2e/gatewayapi/httproute.go b/test/e2e/gatewayapi/httproute.go
index ae487e93..6ac6f262 100644
--- a/test/e2e/gatewayapi/httproute.go
+++ b/test/e2e/gatewayapi/httproute.go
@@ -34,7 +34,6 @@ import (
        "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
-       "github.com/apache/apisix-ingress-controller/internal/provider/adc"
        "github.com/apache/apisix-ingress-controller/test/e2e/framework"
        "github.com/apache/apisix-ingress-controller/test/e2e/scaffold"
 )
@@ -42,9 +41,7 @@ import (
 var _ = Describe("Test HTTPRoute", Label("networking.k8s.io", "httproute"), 
func() {
        s := scaffold.NewDefaultScaffold()
 
-       getGatewayProxySpec := func(endpoint, adminKey string) string {
-               if framework.ProviderType == adc.BackendModeAPISIXStandalone {
-                       var gatewayProxyYaml = `
+       var gatewayProxyYaml = `
 apiVersion: apisix.apache.org/v1alpha1
 kind: GatewayProxy
 metadata:
@@ -54,32 +51,15 @@ spec:
     type: ControlPlane
     controlPlane:
       service:
-        name: apisix-standalone
+        name: %s
         port: 9180
       auth:
         type: AdminKey
         adminKey:
           value: "%s"
 `
-                       return fmt.Sprintf(gatewayProxyYaml, adminKey)
-               }
-               var gatewayProxyYaml = `
-apiVersion: apisix.apache.org/v1alpha1
-kind: GatewayProxy
-metadata:
-  name: apisix-proxy-config
-spec:
-  provider:
-    type: ControlPlane
-    controlPlane:
-      endpoints:
-      - %s
-      auth:
-        type: AdminKey
-        adminKey:
-          value: "%s"
-`
-               return fmt.Sprintf(gatewayProxyYaml, endpoint, adminKey)
+       getGatewayProxySpec := func() string {
+               return fmt.Sprintf(gatewayProxyYaml, framework.ProviderType, 
s.AdminKey())
        }
 
        var gatewayClassYaml = `
@@ -153,8 +133,7 @@ spec:
 
        var beforeEachHTTP = func() {
                By("create GatewayProxy")
-               gatewayProxy := 
getGatewayProxySpec(s.Deployer.GetAdminEndpoint(), s.AdminKey())
-               err := s.CreateResourceFromString(gatewayProxy)
+               err := s.CreateResourceFromString(getGatewayProxySpec())
                Expect(err).NotTo(HaveOccurred(), "creating GatewayProxy")
                time.Sleep(5 * time.Second)
 
@@ -184,8 +163,7 @@ spec:
 
        var beforeEachHTTPS = func() {
                By("create GatewayProxy")
-               gatewayProxy := 
getGatewayProxySpec(s.Deployer.GetAdminEndpoint(), s.AdminKey())
-               err := s.CreateResourceFromString(gatewayProxy)
+               err := s.CreateResourceFromString(getGatewayProxySpec())
                Expect(err).NotTo(HaveOccurred(), "creating GatewayProxy")
                time.Sleep(5 * time.Second)
 
diff --git a/test/e2e/scaffold/apisix_deployer.go 
b/test/e2e/scaffold/apisix_deployer.go
index a0e2d531..67f20a86 100644
--- a/test/e2e/scaffold/apisix_deployer.go
+++ b/test/e2e/scaffold/apisix_deployer.go
@@ -168,14 +168,12 @@ func (s *APISIXDeployer) DeployDataplane(deployOpts 
DeployDataplaneOptions) {
                opts.Replicas = deployOpts.Replicas
        }
 
-       for _, tunnel := range []*k8s.Tunnel{
-               s.adminTunnel,
-               s.apisixHttpTunnel,
-               s.apisixHttpsTunnel,
+       for _, close := range []func(){
+               s.closeAdminTunnel,
+               s.closeApisixHttpTunnel,
+               s.closeApisixHttpsTunnel,
        } {
-               if tunnel != nil {
-                       tunnel.Close()
-               }
+               close()
        }
 
        svc := s.deployDataplane(&opts)
@@ -302,14 +300,18 @@ func (s *APISIXDeployer) createAdminTunnel(svc 
*corev1.Service) (*k8s.Tunnel, er
        if err := adminTunnel.ForwardPortE(s.t); err != nil {
                return nil, err
        }
-       s.addFinalizers(func() {
-               adminTunnel.Close()
-               s.adminTunnel = nil
-       })
+       s.addFinalizers(s.closeAdminTunnel)
 
        return adminTunnel, nil
 }
 
+func (s *APISIXDeployer) closeAdminTunnel() {
+       if s.adminTunnel != nil {
+               s.adminTunnel.Close()
+               s.adminTunnel = nil
+       }
+}
+
 func (s *APISIXDeployer) CreateAdditionalGateway(namePrefix string) (string, 
*corev1.Service, error) {
        // Create a new namespace for this additional gateway
        additionalNS := fmt.Sprintf("%s-%d", namePrefix, time.Now().Unix())
diff --git a/test/e2e/scaffold/scaffold.go b/test/e2e/scaffold/scaffold.go
index f2f97a2d..fe533a82 100644
--- a/test/e2e/scaffold/scaffold.go
+++ b/test/e2e/scaffold/scaffold.go
@@ -313,23 +313,31 @@ func (s *Scaffold) createDataplaneTunnels(
        if err := httpTunnel.ForwardPortE(s.t); err != nil {
                return nil, nil, err
        }
-       s.addFinalizers(func() {
-               httpTunnel.Close()
-               s.apisixHttpTunnel = nil
-       })
+       s.addFinalizers(s.closeApisixHttpTunnel)
 
        if err := httpsTunnel.ForwardPortE(s.t); err != nil {
                httpTunnel.Close()
                return nil, nil, err
        }
-       s.addFinalizers(func() {
-               httpsTunnel.Close()
-               s.apisixHttpsTunnel = nil
-       })
+       s.addFinalizers(s.closeApisixHttpsTunnel)
 
        return httpTunnel, httpsTunnel, nil
 }
 
+func (s *Scaffold) closeApisixHttpTunnel() {
+       if s.apisixHttpTunnel != nil {
+               s.apisixHttpTunnel.Close()
+               s.apisixHttpTunnel = nil
+       }
+}
+
+func (s *Scaffold) closeApisixHttpsTunnel() {
+       if s.apisixHttpsTunnel != nil {
+               s.apisixHttpsTunnel.Close()
+               s.apisixHttpsTunnel = nil
+       }
+}
+
 // GetAdditionalGateway returns resources associated with a specific gateway
 func (s *Scaffold) GetAdditionalGateway(identifier string) (*GatewayResources, 
bool) {
        resources, exists := s.additionalGateways[identifier]

Reply via email to