Skip to content

fix(apisix): make ingress-controller Admin API access configurable and support IPv6 - #1023

Merged
AlinsRan merged 4 commits into
apache:masterfrom
AlinsRan:fix/921-admin-allow
Oct 15, 2026
Merged

AlinsRan merged 4 commits into
apache:masterfrom
AlinsRan:fix/921-admin-allow

Conversation

@AlinsRan

@AlinsRan AlinsRan commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #921

Problem

When ingress-controller.enabled=true, the ConfigMap template always appended 0.0.0.0/0 to deployment.admin.allow_admin. Users had no way to narrow the Admin API access granted for the ingress controller, and IPv6 clients were never allowed: on an IPv6 single-stack cluster (apisix.admin.ip: "[::]"), the ingress controller connects from an IPv6 Pod address and gets 403.

Change

Add apisix.admin.allow.ingressControllerExtraIpList, the CIDRs appended to ipList when the ingress-controller sub-chart is enabled:

apisix:
  admin:
    allow:
      ipList:
        - 127.0.0.1/24
      ingressControllerExtraIpList:
        - 0.0.0.0/0
        - "::/0"
  • ipList behavior is unchanged.
  • The default extra list keeps the previous behavior (the ingress controller can reach the Admin API out of the box) and adds ::/0 for IPv6.
  • Users can narrow it to the ingress controller Pod CIDR, or set it to [] to append nothing.
  • The option lives next to ipList rather than under ingress-controller, because it configures APISIX's own Admin ACL and should not share the sub-chart's values namespace.
  • The resulting list is de-duplicated.
  • Chart version bumped to 2.18.2; README regenerated with helm-docs.

Rendered allow_admin:

values ingress-controller disabled ingress-controller enabled
defaults 127.0.0.1/24 127.0.0.1/24, 0.0.0.0/0, ::/0
custom ipList custom list custom list, 0.0.0.0/0, ::/0
ingressControllerExtraIpList: [10.244.0.0/16] 127.0.0.1/24 127.0.0.1/24, 10.244.0.0/16
ingressControllerExtraIpList: [] 127.0.0.1/24 127.0.0.1/24
ipList: [] 0.0.0.0/0 0.0.0.0/0, ::/0

Compatibility

No breaking change: with ingress-controller disabled the output is identical to master; with it enabled the only addition is ::/0.

Verification

  • helm lint passes, and helm template renders the expected allow_admin for each row in the table above.
  • Checked against APISIX 3.19.0 with admin_listen.ip: "[::]" and a remote IPv6 client: allow ::/0 passes the ACL, while allow 0.0.0.0/0 and allow ::1 both return 403 (::1 only matches loopback). With the default IPv4 admin listener, ::/0 has no effect.

…troller is enabled

Previously 0.0.0.0/0 was always appended to allow_admin when the
ingress-controller sub-chart was enabled, which silently overrode any
user-defined ipList and never allowed IPv6 clients.

ipList now defaults to null. When unset, the chart renders 127.0.0.1/24
and, with ingress-controller enabled, 0.0.0.0/0 and ::/0. When set, the
list is used as-is.

Fixes apache#921
Replace the implicit 0.0.0.0/0 appended for the ingress-controller with a
configurable list that defaults to 0.0.0.0/0 and ::/0. This keeps existing
installs working, lets users narrow or disable the extra access, and adds
IPv6 support. ipList keeps a concrete default (127.0.0.1/24 and ::1).
@AlinsRan AlinsRan changed the title fix(apisix): respect user-defined admin.allow.ipList when ingress-controller is enabled fix(apisix): make ingress-controller Admin API access configurable and support IPv6 Oct 15, 2026
@AlinsRan
AlinsRan merged commit 53115d6 into apache:master Oct 15, 2026
2 checks passed
@AlinsRan
AlinsRan deleted the fix/921-admin-allow branch October 15, 2026 06:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Admin API allowlist bypassed when ingress-controller enabled (+ missing IPv6)

3 participants