FAQ
#
How do I bind a Service with an Upstream?All resources are uniquely identified by the namespace/name/port combination. If this combination is the same, the Service and the Upstream will be binded.
#
While modifying a CRD, how does the binded resources perceive it?This is a cascading update problem. See Design for more details.
#
Can I use both CRDs and the Admin API together to configure Routes?No. CRDs are declarative and when applied they are translated to APISIX configuration. Configuring APISIX through Admin API would not change the CRDs.
#
Why is there an error like "list upstreams failed, err: http get failed, url: httpbin.org, err: status: 401"?APISIX Ingress controller does not support configuring admin_key
for APISIX. Removing admin_key
from both your configuration file (config.yaml
and config-default.yaml
) when deploying APISIX will fix this issue.
#
How does APISIX Ingress controller retry?If an error occurs while parsing the CRD and translating the configuration to APISIX, a retry will be triggered.
Delays are used while retrying. It retries once per second at first and after five retries, it will be decreased to one retry per minute until it succeeds.
#
How do I update the CRDs when updating APISIX Ingress controller?The Helm chart will skip applying these CRDs if they already exist.
In such cases, you can apply the CRDs manually:
kubectl apply -k samples/deploy/crd/
note
With Helm 3, old CRD-install hooks were replaced by a simpler system. You can now create a special directory called crds
in your charts for holding CRDs.
These CRDs are not templated but will be installed by default when running helm install
. If the CRD already exists, it will be skipped with a warning. You can skip the CRD installation step by passing the --skip-crds
flag.
#
Why is there an error like "no matches for kind "ApisixRoute" in version "apisix.apache.org/v2beta3"" when I try to create a Route?Make sure that you have the correct version of the CRDs installed in your cluster (see updating CRDs). ApisixRoute
has two versions: v2beta3
and v2
.
Also check your ApisixRoute
definition for the correct version by running:
kubectl get crd apisixroutes.apisix.apache.org -o jsonpath='{ .spec.versions[*].name }' -A
#
How do I modify the Admin API key in APISIX Ingress?You can change the Admin API key in two ways:
- Modify the key in both apisix/values.yaml and apisix/apisix-ingress-controller/values.yaml files.
- You can also set this imperatively by passing the flag
--set ingress-controller.config.apisix.adminKey=<new key> --set admin.credentials.admin=<new key>
to thehelm install
command.
#
Why does my Ingress resource not have an address?- Using the External address of LoadBalancer service.
You will need to get the apisix-gateway service an external IP assigned for it to reflect on the Ingress's status.
While installing APISIX helm chart make sure to override gateway type with
--set gateway.type=LoadBalancer
.Also make sure to pass ingressPublishService while installing Ingress controller with
--set ingress-controller.config.ingressPublishService=<namespace/service-name>
. If namespace is not specified thendefault
namespace will be chosen.
Note: External IP is allocated either by cloud provider or some other controller like metallb(if you're using kind or minikube) so if you're deploying Ingress controller on minikube or kind then make sure to install and configure something like metallb with an address pool which can allocate external IP for service of type LoadBalancer.
- Using the address given explicitly by
ingress_status_address
In case the gatewayservice
is not of type LoadBalancer, this field should be configured in the config-default.yaml used by the Ingress controller. This field takes precedence over ExternalIP of the service so ifingress_status_address
array has non zero elements(addresses) present then it will used over the ExternalIP of the gateway service.