Common Issues and Solutions
When issues arise while working with the Ingress Controller, the gateway and controller logs are usually the best place to start, as they often reveal the underlying issue quickly.
This document covers common issues you may encounter and provides practical guidance to troubleshoot and resolve them efficiently.
GatewayProxy Missing or Misconfigured
GatewayProxy defines the provider connection used when a Gateway or IngressClass references it. If your resources are not being synchronized to the gateway, a common cause is that the referenced GatewayProxy is missing or incorrectly configured.
Verify that the GatewayProxy resource exists:
kubectl get gatewayproxy --all-namespaces
If GatewayProxy exists, review the GatewayProxy configuration:
kubectl describe gatewayproxy <gatewayproxy-name> -n <namespace>
For a Gateway, the referenced GatewayProxy must be in the same namespace. An IngressClass can specify the GatewayProxy namespace in spec.parameters. Confirm the provider Service or endpoints and any referenced authentication Secret. These checks do not prove provider connectivity; if the references are correct, continue with configuration synchronization troubleshooting.
IngressClassName Missing or Unspecified
The following resources are processed when their ingressClassName selects a matching IngressClass or, if the field is omitted, a matching default IngressClass exists:
IngressApisixRouteApisixUpstreamApisixTlsApisixPluginConfigApisixGlobalRuleApisixConsumer
If an explicit ingressClassName is incorrect, or the field is omitted and no matching default exists, the resource will not be synchronized to the gateway.
For Ingress resources, the controller first checks spec.ingressClassName, then falls back to the kubernetes.io/ingress.class annotation. If neither is set, the controller can use a matching default IngressClass.
Verify which IngressClass resources (cluster-scoped) exist:
kubectl get ingressclass
Review the IngressClass configuration to ensure it references the intended Ingress Controller:
kubectl describe ingressclass <ingressclass-name>
Verify that your resources have specified the correct ingressClassName, for instance:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
ingressClassName: apisix
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80