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: 悟空 <[email protected]>
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]