skills/core/ingress-debug/SKILL.md
Diagnose Ingress failures (rules not matching, backend unreachable, TLS errors, no address assigned). Checks Ingress resources, IngressClass, backend Services, and controller health to identify why external traffic is not routed correctly.
npx skillsauth add scitix/siclaw ingress-debugInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
When external traffic cannot reach a Service through an Ingress — 404, 502, TLS errors, or no address assigned — follow this flow to identify the root cause.
Scope: This skill is for diagnosis only. Once you identify the root cause, report it to the user and stop. Do NOT attempt to modify Ingress resources, Services, or TLS secrets — that should be left to the user.
kubectl get ingress <ingress-name> -n <ns>
Note:
kubectl describe ingress <ingress-name> -n <ns>
Focus on:
For each backend referenced by the Ingress rules:
kubectl get svc <backend-service> -n <ns>
kubectl get endpoints <backend-service> -n <ns>
If the backend Service has no endpoints, traffic will fail with 502/503. Use the service-debug skill for deeper diagnosis.
Find the Ingress controller pods (common labels):
kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
If not using nginx-ingress, check other common namespaces:
kubectl get pods --all-namespaces -l app.kubernetes.io/component=controller | head -20
Verify controller pods are Running and Ready. Check controller logs for errors:
kubectl logs -n <controller-ns> <controller-pod> --tail=100
kubectl get ingressclass
Verify the IngressClass referenced by the Ingress exists. If the Ingress does not specify an IngressClass, it relies on the cluster's default:
kubectl get ingressclass -o jsonpath='{range .items[?(@.metadata.annotations.ingressclass\.kubernetes\.io/is-default-class=="true")]}{.metadata.name}{"\n"}{end}'
The Ingress has no external IP/hostname assigned.
Common causes:
kubernetes.io/ingress.class annotation instead of spec.ingressClassNameCheck the controller logs for messages about skipping or ignoring this Ingress.
The Ingress controller received the request but no rule matched.
Host header in the request does not match any rule's host field. Verify DNS resolves to the Ingress address and the host is correct.path. Check the pathType (Prefix, Exact, ImplementationSpecific) — it affects matching behavior.kubectl get ingress <ingress-name> -n <ns> -o jsonpath='{range .spec.rules[*]}{.host}: {range .http.paths[*]}{.path} ({.pathType}) -> {.backend.service.name}:{.backend.service.port.number}{"\n"}{end}{end}'
The Ingress controller matched a rule but cannot reach the backend.
kubectl get endpoints <backend-service> -n <ns>. Use service-debug if endpoints are empty.kubectl get svc <backend-service> -n <ns> -o jsonpath='{range .spec.ports[*]}port={.port} targetPort={.targetPort}{"\n"}{end}'
HTTPS requests fail with certificate errors or the controller cannot serve TLS.
Check the TLS secret:
kubectl get secret <tls-secret-name> -n <ns>
If the secret does not exist, the controller cannot serve TLS for that host. Verify the secret type is kubernetes.io/tls and contains tls.crt and tls.key:
kubectl get secret <tls-secret-name> -n <ns> -o jsonpath='{.type}'
Common issues:
Common nginx-ingress annotations:
nginx.ingress.kubernetes.io/ssl-redirect — controls HTTP→HTTPS redirectnginx.ingress.kubernetes.io/force-ssl-redirect — forces redirect even without TLS configuredCheck the Ingress annotations:
kubectl get ingress <ingress-name> -n <ns> -o jsonpath='{.metadata.annotations}'
Requests reach the Ingress but time out or get reset.
nginx.ingress.kubernetes.io/proxy-body-size.kubectl top pods -n <controller-ns> -l app.kubernetes.io/name=ingress-nginx
HTTPRoute, Gateway), different resources and controllers apply.ingressClassName matches the correct controller.development
Guide for writing and improving Siclaw skills. Read this when creating or modifying a skill. Covers skill directory layout, SKILL.md format, script execution modes, and best practices.
development
Guides the user to the Siclaw Web page to manage Skills. Use this guide when the user requests to create, edit, or view a Skill in a Channel conversation.
development
Retrieve and analyze Volcano scheduler logs. Filter by keyword, time range, or pod name to debug scheduling decisions.
tools
View Volcano scheduler configuration. Check scheduler ConfigMap, actions, plugins, and tier settings.