This is an automated email from the ASF dual-hosted git repository. ronething pushed a commit to branch fix/issue_2689 in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git
commit aea71d543de5284a74837d3701753b39e3d15e58 Author: Ashing Zheng <[email protected]> AuthorDate: Tue Jan 6 16:21:47 2026 +0800 debug: issue test Signed-off-by: Ashing Zheng <[email protected]> --- go.mod | 3 --- go.sum | 6 ------ internal/adc/cache/store.go | 12 ++++++++++++ internal/controller/apisixroute_controller.go | 23 ++++++++++++++++++++++- internal/controller/httproute_controller.go | 4 ++++ internal/provider/apisix/provider.go | 15 +++++++++++++++ 6 files changed, 53 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index 757f8e28..cab91fbc 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,6 @@ require ( github.com/olekukonko/tablewriter v1.1.1 github.com/onsi/ginkgo/v2 v2.22.0 github.com/onsi/gomega v1.36.1 - github.com/panjf2000/ants/v2 v2.11.3 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.19.1 github.com/samber/lo v1.47.0 @@ -35,7 +34,6 @@ require ( k8s.io/apiextensions-apiserver v0.32.3 k8s.io/apimachinery v0.32.3 k8s.io/client-go v0.32.3 - k8s.io/code-generator v0.32.3 k8s.io/kubectl v0.30.3 k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 sigs.k8s.io/controller-runtime v0.20.4 @@ -213,7 +211,6 @@ require ( gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect k8s.io/apiserver v0.32.3 // indirect k8s.io/component-base v0.32.3 // indirect - k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect moul.io/http2curl/v2 v2.3.0 // indirect diff --git a/go.sum b/go.sum index eddf72b5..a1c9c8d3 100644 --- a/go.sum +++ b/go.sum @@ -333,8 +333,6 @@ github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw= github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= -github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= -github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7/go.mod h1:zO8QMzTeZd5cpnIkz/Gn6iK0jDfGicM1nynOkkPIl28= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -597,12 +595,8 @@ k8s.io/apiserver v0.32.3 h1:kOw2KBuHOA+wetX1MkmrxgBr648ksz653j26ESuWNY8= k8s.io/apiserver v0.32.3/go.mod h1:q1x9B8E/WzShF49wh3ADOh6muSfpmFL0I2t+TG0Zdgc= k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU= k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY= -k8s.io/code-generator v0.32.3 h1:31p2TVzC9+hVdSkAFruAk3JY+iSfzrJ83Qij1yZutyw= -k8s.io/code-generator v0.32.3/go.mod h1:+mbiYID5NLsBuqxjQTygKM/DAdKpAjvBzrJd64NU1G8= k8s.io/component-base v0.32.3 h1:98WJvvMs3QZ2LYHBzvltFSeJjEx7t5+8s71P7M74u8k= k8s.io/component-base v0.32.3/go.mod h1:LWi9cR+yPAv7cu2X9rZanTiFKB2kHA+JjmhkKjCZRpI= -k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 h1:si3PfKm8dDYxgfbeA6orqrtLkvvIeH8UqffFJDl0bz4= -k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= diff --git a/internal/adc/cache/store.go b/internal/adc/cache/store.go index d41188ed..76fcc146 100644 --- a/internal/adc/cache/store.go +++ b/internal/adc/cache/store.go @@ -69,12 +69,24 @@ func (s *Store) Insert(name string, resourceTypes []string, resources *adctypes. if err != nil { return err } + s.log.V(1).Info("Found existing services to update", "count", len(services), "selector", selector) for _, service := range services { + s.log.V(1).Info("Deleting existing service", "service_id", service.ID, "service_name", service.Name) if err := targetCache.DeleteService(service); err != nil { return err } } for _, service := range resources.Services { + // Log upstream nodes for debugging + if service.Upstream != nil && len(service.Upstream.Nodes) > 0 { + nodesInfo := make([]string, 0, len(service.Upstream.Nodes)) + for _, node := range service.Upstream.Nodes { + nodesInfo = append(nodesInfo, fmt.Sprintf("%s:%d", node.Host, node.Port)) + } + s.log.V(1).Info("Inserting service with upstream nodes", "service_id", service.ID, "service_name", service.Name, "nodes", nodesInfo) + } else { + s.log.V(1).Info("Inserting service without upstream nodes", "service_id", service.ID, "service_name", service.Name) + } if err := targetCache.InsertService(service); err != nil { return err } diff --git a/internal/controller/apisixroute_controller.go b/internal/controller/apisixroute_controller.go index d8c225dc..9ee672fd 100644 --- a/internal/controller/apisixroute_controller.go +++ b/internal/controller/apisixroute_controller.go @@ -471,7 +471,23 @@ func (r *ApisixRouteReconciler) validateHTTPBackend(tctx *provider.TranslateCont // backend.subset specifies a subset of upstream nodes. // It specifies that the target pod's label should be a superset of the subset labels of the ApisixUpstream of the serviceName subsetLabels := r.getSubsetLabels(tctx, serviceNN, backend.Subset) - tctx.EndpointSlices[serviceNN] = r.filterEndpointSlicesBySubsetLabels(tctx, endpoints.Items, subsetLabels) + filteredEndpoints := r.filterEndpointSlicesBySubsetLabels(tctx, endpoints.Items, subsetLabels) + tctx.EndpointSlices[serviceNN] = filteredEndpoints + + // Log endpoint information for debugging + if len(filteredEndpoints) > 0 { + endpointIPs := make([]string, 0) + for _, epSlice := range filteredEndpoints { + for _, ep := range epSlice.Endpoints { + for _, addr := range ep.Addresses { + endpointIPs = append(endpointIPs, addr) + } + } + } + r.Log.V(1).Info("Updated EndpointSlices for service", "service", serviceNN, "endpoint_count", len(filteredEndpoints), "endpoint_ips", endpointIPs) + } else { + r.Log.V(1).Info("No endpoints found for service", "service", serviceNN) + } return nil } @@ -520,6 +536,9 @@ func (r *ApisixRouteReconciler) listApisixRoutesForService(ctx context.Context, serviceName = endpointSlice.Labels[discoveryv1.LabelServiceName] arList apiv2.ApisixRouteList ) + + r.Log.V(1).Info("EndpointSlice changed, listing ApisixRoutes for service", "namespace", namespace, "service", serviceName, "endpointslice", endpointSlice.Name) + if err := r.List(ctx, &arList, client.MatchingFields{ indexer.ServiceIndexRef: indexer.GenIndexKey(namespace, serviceName), }); err != nil { @@ -528,8 +547,10 @@ func (r *ApisixRouteReconciler) listApisixRoutesForService(ctx context.Context, } requests := make([]reconcile.Request, 0, len(arList.Items)) for _, ar := range arList.Items { + r.Log.V(1).Info("Triggering reconcile for ApisixRoute due to EndpointSlice change", "apisixroute", utils.NamespacedName(&ar), "service", serviceName) requests = append(requests, reconcile.Request{NamespacedName: utils.NamespacedName(&ar)}) } + r.Log.V(1).Info("Triggered reconciles for ApisixRoutes", "count", len(requests), "service", serviceName) return pkgutils.DedupComparable(requests) } diff --git a/internal/controller/httproute_controller.go b/internal/controller/httproute_controller.go index 34615b9f..32bd35f6 100644 --- a/internal/controller/httproute_controller.go +++ b/internal/controller/httproute_controller.go @@ -267,6 +267,8 @@ func (r *HTTPRouteReconciler) listHTTPRoutesByServiceRef(ctx context.Context, ob namespace := endpointSlice.GetNamespace() serviceName := endpointSlice.Labels[discoveryv1.LabelServiceName] + r.Log.V(1).Info("EndpointSlice changed, listing HTTPRoutes for service", "namespace", namespace, "service", serviceName, "endpointslice", endpointSlice.Name) + hrList := &gatewayv1.HTTPRouteList{} if err := r.List(ctx, hrList, client.MatchingFields{ indexer.ServiceIndexRef: indexer.GenIndexKey(namespace, serviceName), @@ -276,6 +278,7 @@ func (r *HTTPRouteReconciler) listHTTPRoutesByServiceRef(ctx context.Context, ob } requests := make([]reconcile.Request, 0, len(hrList.Items)) for _, hr := range hrList.Items { + r.Log.V(1).Info("Triggering reconcile for HTTPRoute due to EndpointSlice change", "httproute", client.ObjectKey{Namespace: hr.Namespace, Name: hr.Name}, "service", serviceName) requests = append(requests, reconcile.Request{ NamespacedName: client.ObjectKey{ Namespace: hr.Namespace, @@ -283,6 +286,7 @@ func (r *HTTPRouteReconciler) listHTTPRoutesByServiceRef(ctx context.Context, ob }, }) } + r.Log.V(1).Info("Triggered reconciles for HTTPRoutes", "count", len(requests), "service", serviceName) return requests } diff --git a/internal/provider/apisix/provider.go b/internal/provider/apisix/provider.go index 029675e2..d1e84fa4 100644 --- a/internal/provider/apisix/provider.go +++ b/internal/provider/apisix/provider.go @@ -19,6 +19,7 @@ package apisix import ( "context" + "fmt" "net/http" "sync" "time" @@ -183,6 +184,20 @@ func (d *apisixProvider) Update(ctx context.Context, tctx *provider.TranslateCon Consumers: result.Consumers, }, } + + // Log service upstream nodes for debugging + for _, service := range result.Services { + if service.Upstream != nil && len(service.Upstream.Nodes) > 0 { + nodesInfo := make([]string, 0, len(service.Upstream.Nodes)) + for _, node := range service.Upstream.Nodes { + nodesInfo = append(nodesInfo, fmt.Sprintf("%s:%d", node.Host, node.Port)) + } + d.log.V(1).Info("Updating service with upstream nodes", "service_id", service.ID, "service_name", service.Name, "nodes", nodesInfo, "object", rk) + } else { + d.log.V(1).Info("Updating service without upstream nodes", "service_id", service.ID, "service_name", service.Name, "object", rk) + } + } + d.log.V(1).Info("updating config", "task", task) return d.client.UpdateConfig(ctx, task)
