frank-gateway

Frank!Gateway - Apache APISIX with WeAreFrank plugins for SOAP/FSC/OIDC

0.3.0

Parameters

General

These are all overrides for the frankgateway dependency alias, so everything must be nested under the frankgateway: key (otherwise it never reaches the subchart, see apache/apisix-helm-chart's values.yaml). Chart version 2.14.0 no longer has a separate dashboard subchart/dependency, so there is no key for that.

Gotcha: the subchart itself also has its own top-level apisix: key (a 1-to-1 mirror of the APISIX config.yaml apisix: section, which includes deployment: among others). To override something in there you need frankgateway.apisix.* from our values.yaml — frankgateway: is the dependency alias and apisix: is their own config section.

Image

Custom GHCR image for the APISIX container, built with WeAreFrank plugins (SOAP/FSC/OIDC).

NameDescriptionValue
frankgateway.image.repositoryAPISIX container image repositoryghcr.io/wearefrank/frank-gateway
frankgateway.image.tagAPISIX container image tag (immutable tags are recommended)1.0.0

Deployment mode

NameDescriptionValue
frankgateway.apisix.enableServerTokenshides apisix version in header and error pages (we don't want to leak our version to the public)false
frankgateway.apisix.deployment.modeAPISIX deployment mode (we run standalone, without etcd)standalone
frankgateway.apisix.deployment.roleAPISIX deployment role required for standalone YAML configurationdata_plane
frankgateway.apisix.deployment.standalone.configInline APISIX routes configuration (YAML string); customers override this with their own routes`routes:
`

ssl settings and ciphers to limit the use of unsecure ciphers

NameDescriptionValue
frankgateway.apisix.ssl.enabledEnable TLS/SSL termination in APISIX (we always want this)true
frankgateway.apisix.ssl.sslProtocolsTLS protocol versions to support (space-separated list, e.g. "TLSv1.2 TLSv1.3")TLSv1.2 TLSv1.3
frankgateway.apisix.ssl.sslCiphersTLS cipher suites to supportECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256

Custom plugins

Lua plugins baked into the WeAreFrank image (SOAP/FSC/OIDC/etc.), loaded via the APISIX custom-plugins mechanism rather than upstream's plugins/apisix.plugins. Plugin code is baked into the image under /usr/local/apisix/custom-plugins/apisix/plugins.

NameDescriptionValue
frankgateway.apisix.customPlugins.enabledEnable custom (WeAreFrank) Lua plugins baked into the imagetrue
frankgateway.apisix.customPlugins.luaPathLua module search path pattern used to locate custom plugin code/usr/local/apisix/custom-plugins/?.lua
frankgateway.apisix.customPlugins.pluginsCustom plugin definitions: each entry has name (must match its Lua module name), attrs (passed through to the APISIX plugin config), and an optional configMap (name/mounts) to mount plugin config from an existing ConfigMap.
frankgateway.apisix.pluginsEnabled APISIX plugin list; custom plugins (see customPlugins.plugins above) must also be listed here, or APISIX won't load them["real-ip","client-control","proxy-control","request-id","opentelemetry","ext-plugin-pre-req","fault-injection","mocking","serverless-pre-function","cors","ip-restriction","ua-restriction","referer-restriction","csrf","uri-blocker","request-validation","chaitin-waf","multi-auth","openid-connect","cas-auth","authz-casbin","authz-casdoor","wolf-rbac","ldap-auth","hmac-auth","basic-auth","jwt-auth","jwe-decrypt","key-auth","consumer-restriction","forward-auth","opa","authz-keycloak","proxy-cache","body-transformer","proxy-mirror","proxy-rewrite","workflow","api-breaker","limit-conn","limit-count","limit-req","response-extractor","gzip","server-info","traffic-split","redirect","response-rewrite","degraphql","grpc-transcode","grpc-web","public-api","prometheus","datadog","loki-logger","elasticsearch-logger","echo","loggly","http-logger","splunk-hec-logging","skywalking-logger","google-cloud-logging","sls-logger","tcp-logger","kafka-logger","rocketmq-logger","syslog","udp-logger","file-logger","clickhouse-logger","inspect","example-plugin","cert-auth","frank-sender","generic-oauth-client","jwt-client","limit-size","soap-action-router","openid-connect-client","fsc","serverless-post-function","ext-plugin-post-req","ext-plugin-post-resp"]

etcd

We use standalone/yaml mode and don't talk to etcd at all (internal or external).

NameDescriptionValue
frankgateway.etcd.enabledEnable the bundled etcd subchartfalse
frankgateway.externalEtcd.userExternal etcd username, emptied to avoid an unused etcd secret/env var since etcd.enabled is false""

Ingress controller

NameDescriptionValue
frankgateway.ingress-controller.enabledEnable the bundled APISIX ingress-controller subchartfalse

Troubleshooting: helm dependency update fails

This chart depends on the official apisix chart via https://apache.github.io/apisix-helm-chart. This URL occasionally has DNS resolution issues (see apache/apisix-helm-chart#959).

If you get an error like:

Error: looks like "..." is not a valid chart repository or cannot be reached:
Get "https://apache.github.io/apisix-helm-chart/index.yaml": dial tcp: lookup apache.github.io: no such host

use the alternative repo hosted by API7.ai instead:

helm repo add apisix https://charts.apiseven.com --force-update
helm repo update
helm dependency update .

Note: these two repos have not always been exactly in sync in the past (apache/apisix-helm-chart#610). After falling back, always double-check the chart version with helm dependency list.

Gotcha: nesting of values.yaml overrides for the frankgateway dependency alias

All overrides for the frankgateway dependency alias must be nested under the frankgateway: key in our values.yaml — otherwise they never reach the subchart.

Extra gotcha: the subchart itself also has its own top-level apisix: key in its own values.yaml (a 1-to-1 mirror of the APISIX config.yaml apisix: section, which includes deployment: among others). So to override e.g. deployment.mode from our chart you need frankgateway.apisix.deployment.modefrankgateway: is the dependency alias, and apisix: is their own config section. Keys like image, etcd and ingress-controller do sit directly at the top level of the subchart, so those are simply frankgateway.image, frankgateway.etcd, etc. (no double nesting).

Always verify values changes with helm template frank-gateway . --debug and specifically check deployment.role_traditional.config_provider and the container command/volumes in the rendered Deployment — with incorrect nesting, Helm silently swallows the override and falls back to the subchart's defaults (traditional mode + etcd), without an error message.

Separate gotcha: with etcd.enabled: false, the chart by default assumes you're using an external etcd (externalEtcd.user defaults to "root"), and generates an unused etcd secret + APISIX_ETCD_PASSWORD env var in the Deployment. For standalone/yaml mode without etcd (internal or external), set frankgateway.externalEtcd.user: "" to avoid that.

Application Version

1.0.0

Chart Versions

0.3.0 - 09/09/2026
0.2.0 - 25/08/2026
0.1.0 - 24/08/2026