2# Licensed to the Apache Software Foundation (ASF) under one or more
3# contributor license agreements. See the NOTICE file distributed with
4# this work for additional information regarding copyright ownership.
5# The ASF licenses this file to You under the Apache License, Version 2.0
6# (the "License"); you may not use this file except in compliance with
7# the License. You may obtain a copy of the License at
9# http://www.apache.org/licenses/LICENSE-2.0
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
20 # - my-registry-secrets
21 # - other-registry-secrets
22 # -- Global Docker registry secret names as an array
25 # -- Apache APISIX image repository
26 repository: cgr.dev/chainguard-private/apache-apisix
27 # -- Apache APISIX image pull policy
28 pullPolicy: IfNotPresent
29 # -- Apache APISIX image tag
30 # Overrides the image tag whose default is the chart appVersion.
31 tag: latest@sha256:5f3bc6e0266f57a9641668879c27e89a2b8bf2948cd9e4debeb3822ca1a11551
32# -- set false to use `Deployment`, set true to use `DaemonSet`
34# -- if useDaemonSet is true or autoscaling.enabled is true, replicaCount not become effective
36# -- Set [priorityClassName](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#pod-priority) for Apache APISIX pods
38# -- Annotations to add to each pod
40# -- Set the securityContext for Apache APISIX pods
43# -- Set the securityContext for Apache APISIX container
48# readOnlyRootFilesystem: true
52# -- See https://kubernetes.io/docs/tasks/run-application/configure-pdb/ for more details
54 # -- Enable or disable podDisruptionBudget
56 # -- Set the `minAvailable` of podDisruptionBudget. You can specify only one of `maxUnavailable` and `minAvailable` in a single PodDisruptionBudget.
57 # See [Specifying a Disruption Budget for your Application](https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget)
60 # -- Set the maxUnavailable of podDisruptionBudget
62# -- Set pod resource requests & limits
64# -- Use the host's network namespace
66# We usually recommend not to specify default resources and to leave this as a conscious
67# choice for the user. This also increases chances charts run on environments with little
68# resources, such as Minikube. If you do want to specify resources, uncomment the following
69# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
77# -- Node labels for Apache APISIX pod assignment
79# -- List of node taints to tolerate
81# -- Set affinity for Apache APISIX deploy
83# -- Topology Spread Constraints for pod assignment spread across your cluster among failure-domains
84# ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods
85topologySpreadConstraints: []
86# -- timezone is the timezone where apisix uses.
87# For example: "UTC" or "Asia/Shanghai"
88# This value will be set on apisix container's environment variable TZ.
89# You may need to set the timezone to be consistent with your local time zone,
90# otherwise the apisix's logs may used to retrieve event maybe in wrong timezone.
92# -- extraEnvVars An array to add extra env vars
106# -- Additional Kubernetes resources to deploy with the release.
108# -- Additional `volume`, See [Kubernetes Volumes](https://kubernetes.io/docs/concepts/storage/volumes/) for the detail.
113# -- Additional `volume`, See [Kubernetes Volumes](https://kubernetes.io/docs/concepts/storage/volumes/) for the detail.
116# mountPath: /usr/share/extras
119# -- Additional `initContainers`, See [Kubernetes initContainers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) for the detail.
120extraInitContainers: []
121# - name: init-myservice
123# command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
125# -- Additional `containers`, See [Kubernetes containers](https://kubernetes.io/docs/concepts/containers/) for the detail.
128 # -- Init container image
129 image: cgr.dev/chainguard-private/netcat
130 # -- Init container tag
131 tag: latest@sha256:82075322d49ed368eab79d40c6adcacf07e1fdf38dd0b147417e26d191238d1a
134 # -- HPA version, the value is "v2" or "v2beta1", default "v2"
138 targetCPUUtilizationPercentage: 80
139 targetMemoryUtilizationPercentage: 80
149 # -- Apache APISIX service type for user access itself
151 # -- Setting how the Service route external traffic
152 # If you want to keep the client source IP, you can set this to Local.
154 # ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip
155 externalTrafficPolicy: Cluster
158 # service.beta.kubernetes.io/aws-load-balancer-type: nlb
160 # -- Apache APISIX service settings for http
165 # -- Support multiple http ports, See [Configuration](https://github.com/apache/apisix/blob/0bc65ea9acd726f79f80ae0abd8f50b7eb172e3d/conf/config-default.yaml#L24)
166 additionalContainerPorts: []
168 # enable_http2: true # If not set, the default value is `false`.
169 # - ip: 127.0.0.2 # Specific IP, If not set, the default value is `0.0.0.0`.
172 # -- Apache APISIX service settings for tls
176 # -- Apache APISIX service settings for stream. L4 proxy (TCP/UDP)
181 # - secretName: apisix-tls
183 # - chart-example.local
184 # -- Override default labels assigned to Apache APISIX gateway resources
187 # app.kubernetes.io/name: "{{ .Release.Name }}"
188 # app.kubernetes.io/instance: '{{ include "apisix.name" . }}'
189# -- Using ingress access Apache APISIX service
192 # -- (number) Service port to send traffic. Defaults to `service.http.servicePort`.
194 # -- Ingress annotations
196 # kubernetes.io/ingress.class: nginx
197 # kubernetes.io/tls-acme: "true"
203 # -- Enable Control API
206 # -- Control annotations
208 # -- Control service type
210 # loadBalancerIP: a.b.c.d
211 # loadBalancerSourceRanges:
213 # -- IPs for which nodes in the cluster will also accept traffic for the servic
215 # -- NodePort (only if control.service.type is NodePort)
218 # -- which ip to listen on for Apache APISIX Control API
220 # -- which port to use for Apache APISIX Control API
222 # -- Service port to use for Apache APISIX Control API
224 # -- Using ingress access Apache APISIX Control service
227 # -- Ingress annotations
229 # kubernetes.io/ingress.class: nginx
230 # kubernetes.io/tls-acme: "true"
231 # -- Ingress Class Name
234 - host: apisix-control.local
238 # - secretName: apisix-tls
240 # - chart-example.local
241# -- Observability configuration.
244 # -- Enable or disable Apache APISIX serviceMonitor
246 # -- namespace where the serviceMonitor is deployed, by default, it is the same as the namespace of the apisix
248 # -- name of the serviceMonitor, by default, it is the same as the apisix fullname
250 # -- interval at which metrics should be scraped
252 # -- @param serviceMonitor.labels ServiceMonitor extra labels
254 # -- @param serviceMonitor.annotations ServiceMonitor annotations
257 # -- Enable nginx IPv6 resolver
260 # -- Whether the APISIX version number should be shown in Server header
261 enableServerTokens: true
262 # -- Use Pod metadata.uid as the APISIX id.
263 setIDFromPodUID: false
264 # -- Whether to add a custom lua module
267 # -- extend lua_package_path to load third party code
269 # -- the hook module which will be used to inject third party code into APISIX
270 # use the lua require style like: "module.say_hello"
272 # -- configmap that stores the codes
274 # -- Name of the ConfigMap where the lua module codes store
276 # mounts decides how to mount the codes to the container.
278 # -- Name of the ConfigMap key, for setting the mapping relationship between ConfigMap key and the lua module code path.
280 # -- Filepath of the plugin code, for setting the mapping relationship between ConfigMap key and the lua module code path.
285 # -- Support multiple https ports, See [Configuration](https://github.com/apache/apisix/blob/0bc65ea9acd726f79f80ae0abd8f50b7eb172e3d/conf/config-default.yaml#L99)
286 additionalContainerPorts: []
287 # - ip: 127.0.0.3 # Specific IP, If not set, the default value is `0.0.0.0`.
290 # -- Specifies the name of Secret contains trusted CA certificates in the PEM format used to verify the certificate when APISIX needs to do SSL/TLS handshaking with external services (e.g. etcd)
292 # -- Filename be used in the apisix.ssl.existingCASecret
295 # -- TLS protocols allowed to use.
296 sslProtocols: "TLSv1.2 TLSv1.3"
297 # -- TLS ciphers allowed to use.
298 sslCiphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA"
299 # -- Define SNI to fallback if none is presented by client
302 # -- Defines how apisix handles routing:
303 # - radixtree_uri: match route by uri(base on radixtree)
304 # - radixtree_host_uri: match route by host + uri(base on radixtree)
305 # - radixtree_uri_with_parameter: match route by uri with parameters
306 http: radixtree_host_uri
308 # -- Enable full customized config.yaml
310 # -- If apisix.fullCustomConfig.enabled is true, full customized config.yaml.
311 # Please note that other settings about APISIX config will be ignored
314 # -- Apache APISIX deployment mode
315 # Optional: traditional, decoupled, standalone
317 # ref: https://apisix.apache.org/docs/apisix/deployment-modes/
320 # Optional: traditional, data_plane, control_plane
322 # ref: https://apisix.apache.org/docs/apisix/deployment-modes/
326 config_provider: "etcd"
327 # -- Standalone rules configuration
329 # ref: https://apisix.apache.org/docs/apisix/deployment-modes/#standalone
331 # -- Rules which are set to the default apisix.yaml configmap.
332 # If apisix.delpoyment.standalone.existingConfigMap is empty, these are used.
341 # -- Specifies the name of the ConfigMap that contains the rule configurations.
342 # The configuration must be set to the key named `apisix.yaml` in the configmap.
343 existingConfigMap: ""
345 # -- Enable Admin API
347 # -- Enable Embedded Admin UI
348 enable_admin_ui: true
349 # -- admin service type
351 # loadBalancerIP: a.b.c.d
352 # loadBalancerSourceRanges:
354 # -- IPs for which nodes in the cluster will also accept traffic for the servic
356 # -- which ip to listen on for Apache APISIX admin API. Set to `"[::]"` when on IPv6 single stack
358 # -- which port to use for Apache APISIX admin API
360 # -- Service port to use for Apache APISIX admin API
362 # -- Admin API support CORS response headers
364 # -- Admin API credentials
366 # -- Apache APISIX admin API admin role credentials
367 admin: edd1c9f034335f136f87ad84b625c8f1
368 # -- Apache APISIX admin API viewer role credentials
369 viewer: 4054f7cf07e344346cd3f287985e76a2
370 # -- The APISIX Helm chart supports storing user credentials in a secret.
371 # The secret needs to contain two keys, admin and viewer, with their respective values set.
373 # -- Name of the admin role key in the secret, overrides the default key name "admin"
375 # -- Name of the viewer role key in the secret, overrides the default key name "viewer"
378 # -- The client IP CIDR allowed to access Apache APISIX Admin API service.
381 # -- Using ingress access Apache APISIX admin service
384 # -- Ingress annotations
386 # kubernetes.io/ingress.class: nginx
387 # kubernetes.io/tls-acme: "true"
389 - host: apisix-admin.local
393 # - secretName: apisix-tls
395 # - chart-example.local
397 workerRlimitNofile: "20480"
398 workerConnections: "10620"
399 workerProcesses: auto
400 enableCPUAffinity: true
401 # -- Timeout during which a keep-alive client connection will stay open on the server side.
402 keepaliveTimeout: 60s
404 # access log and error log configuration
406 # -- Enable access log or not, default true
407 enableAccessLog: true
409 accessLog: "/dev/stdout"
410 # -- Access log format
411 accessLogFormat: '$remote_addr - $remote_user [$time_local] $http_host \"$request\" $status $body_bytes_sent $request_time \"$http_referer\" \"$http_user_agent\" $upstream_addr $upstream_status $upstream_response_time \"$upstream_scheme://$upstream_host$upstream_uri\"'
412 # -- Allows setting json or default characters escaping in variables
413 accessLogFormatEscape: default
415 errorLog: "/dev/stderr"
417 errorLogLevel: "warn"
418 # -- Custom configuration snippet.
419 configurationSnippet:
426 # -- Add custom [lua_shared_dict](https://github.com/openresty/lua-nginx-module?tab=readme-ov-file#lua_shared_dict) settings,
427 # click [here](https://github.com/apache/apisix-helm-chart/blob/master/charts/apisix/values.yaml#L27-L30) to learn the format of a shared dict
428 customLuaSharedDicts: []
434 # -- Override default [lua_shared_dict](https://github.com/apache/apisix/blob/master/conf/config.yaml.example#L250-L276) settings,
435 # click [here](https://github.com/apache/apisix-helm-chart/blob/master/charts/apisix/values.yaml#L27-L30) to learn the format of a shared dict
437 # - name: prometheus-metrics
440 # -- Override default meta-level [lua_shared_dict](https://github.com/apache/apisix/blob/master/conf/config.yaml.example) settings,
441 # meta-level shared dicts are shared across both HTTP and stream subsystems.
442 # Since APISIX 3.16.0, `upstream-healthcheck` is a meta-level shared dict.
443 # click [here](https://github.com/apache/apisix-helm-chart/blob/master/charts/apisix/values.yaml#L27-L30) to learn the format of a shared dict
444 metaLuaSharedDicts: []
445 # - name: upstream-healthcheck
448 # -- Enable or disable Apache APISIX integration service discovery
450 # -- Service discovery registry. Refer to [configuration under discovery](https://github.com/apache/apisix/blob/master/conf/config.yaml.example#L307) for example.
451 # Also see [example of using external service discovery](https://apisix.apache.org/docs/ingress-controller/1.8.0/tutorials/external-service-discovery/).
453 # Integration service discovery registry. E.g eureka\dns\nacos\consul_kv
455 # https://apisix.apache.org/docs/apisix/discovery/#configuration-for-eureka
456 # https://apisix.apache.org/docs/apisix/discovery/dns/#service-discovery-via-dns
457 # https://apisix.apache.org/docs/apisix/discovery/consul_kv/#configuration-for-consul-kv
458 # https://apisix.apache.org/docs/apisix/discovery/nacos/#configuration-for-nacos
459 # https://apisix.apache.org/docs/apisix/discovery/kubernetes/#configuration
465 # - "http://${username}:${password}@${eureka_host1}:${eureka_port1}"
466 # - "http://${username}:${password}@${eureka_host2}:${eureka_port2}"
476 # the minimal Kubernetes example:
481 # The prerequisites for the above minimal Kubernetes example:
482 # 1. [Optional] Set `.serviceAccount.create` to `true` to create a dedicated ServiceAccount.
483 # It is recommended to do so, otherwise the default ServiceAccount "default" will be used.
484 # 2. [Required] Set `.rbac.create` to `true` to create and bind the necessary RBAC resources.
485 # This grants the ServiceAccount in use to List-Watch Kubernetes Endpoints resources.
486 # 3. [Required] Include the following environment variables in `.nginx.envs` to pass them into
487 # nginx worker processes (https://nginx.org/en/docs/ngx_core_module.html#env):
488 # - KUBERNETES_SERVICE_HOST
489 # - KUBERNETES_SERVICE_PORT
490 # This is for allowing the default `host` and `port` of `.discovery.registry.kubernetes.service`.
502 # -- Enable or disable the vault integration
504 # -- The host address where the vault server is running.
506 # -- HTTP timeout for each request.
508 # -- The generated token from vault instance that can grant access to read data from the vault.
510 # -- Prefix allows you to better enforcement of policies.
513 # ref: https://apisix.apache.org/docs/apisix/plugins/prometheus/
515 # -- path of the metrics endpoint
516 path: /apisix/prometheus/metrics
517 # -- prefix of the metrics
518 metricPrefix: apisix_
519 # -- container port where the metrics are exposed
521 # -- Customize the list of APISIX plugins to enable. By default, APISIX's [default plugins](https://github.com/apache/apisix/blob/master/apisix/cli/config.lua#L196) are automatically used.
523 # -- Customize the list of APISIX stream_plugins to enable. By default, APISIX's [default stream_plugins](https://github.com/apache/apisix/blob/master/apisix/cli/config.lua#L294) are automatically used.
525 # -- Set APISIX plugin attributes. By default, APISIX's [plugin_attr](https://github.com/apache/apisix/blob/master/apisix/cli/config.lua#L295) are automatically used.
526 # See [configuration example](https://github.com/apache/apisix/blob/master/conf/config.yaml.example#L591).
529 # -- Enable External Plugins. See [external plugin](https://apisix.apache.org/docs/apisix/next/external-plugin/)
531 # -- the command and its arguements to run as a subprocess
532 cmd: ["/path/to/apisix-plugin-runner/runner", "run"]
534 # -- Enable Wasm Plugins. See [wasm plugin](https://apisix.apache.org/docs/apisix/next/wasm/)
537 # -- customPlugins allows you to mount your own HTTP plugins.
539 # -- Whether to configure some custom plugins
541 # -- the lua_path that tells APISIX where it can find plugins,
542 # note the last ';' is required.
543 luaPath: "/opts/custom_plugins/?.lua"
546 - name: "plugin-name"
549 # -- plugin codes can be saved inside configmap object.
551 # -- name of configmap.
552 name: "configmap-name"
553 # -- since keys in configmap is flat, mountPath allows to define the mount
554 # path, so that plugin codes can be mounted hierarchically.
556 - key: "the-file-name"
561 # -- When configured, APISIX will trust the `X-Forwarded-*` Headers passed in requests from the IP/CIDR in the list.
564# -- external etcd configuration. If etcd.enabled is false, these configuration will be used.
566 # -- if etcd.enabled is false, use external etcd, support multiple address, if your etcd cluster enables TLS, please use https scheme, e.g. https://127.0.0.1:2379.
568 # host or ip e.g. http://172.20.128.89:2379
569 - http://etcd.host:2379
570 # -- if etcd.enabled is false, user for external etcd. Set empty to disable authentication
572 # -- if etcd.enabled is true, use etcd.auth.rbac.rootPassword instead.
573 # -- if etcd.enabled is false and externalEtcd.existingSecret is not empty, the password should store in the corresponding secret
574 # -- if etcd.enabled is false and externalEtcd.existingSecret is empty, externalEtcd.password is the passsword for external etcd.
576 # -- if externalEtcd.existingSecret is the name of secret containing the external etcd password
578 # -- externalEtcd.secretPasswordKey Key inside the secret containing the external etcd password
579 secretPasswordKey: "etcd-root-password"
580# -- etcd configuration
581# use the FQDN address or the IP of the etcd
583 # -- install built-in etcd by default, set false if do not want to install built-in etcd together,
584 # this etcd is based on bitnamilegacy/etcd helm chart and latest bitnami docker image, only for development and testing purposes,
585 # if you want to use etcd in production, we recommend you to install etcd by yourself and use `externalEtcd` to connect it.
587 # -- docker image for built-in etcd
590 repository: bitnamilegacy/etcd
591 # -- `bitnamilegacy/etcd` only provide `latest` tag now, ref: https://github.com/bitnami/containers/issues/83267,
592 # you can switch `etcd.image.repository` to `bitnamilegacy/etcd` to use old versioned tags.
594 # -- apisix configurations prefix
596 # -- Set the timeout value in seconds for subsequent socket operations from apisix to etcd cluster
598 # -- if etcd.enabled is true, set more values of bitnamilegacy/etcd helm chart
601 # -- No authentication by default. Switch to enable RBAC authentication
603 # -- root password for etcd. Requires etcd.auth.rbac.create to be true.
606 # -- enable etcd client certificate
608 # -- name of the secret contains etcd client cert
610 # -- etcd client cert filename using in etcd.auth.tls.existingSecret
612 # -- etcd client cert key filename using in etcd.auth.tls.existingSecret
614 # -- whether to verify the etcd endpoint certificate when setup a TLS connection to etcd
616 # -- specify the TLS Server Name Indication extension, the ETCD endpoint hostname will be used when this setting is unset.
618 # -- ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
619 # -- added for backward compatibility with old kubernetes versions, as seccompProfile is not supported in kubernetes < 1.19
620 containerSecurityContext:
625 autoCompactionRetention: "1h"
626 autoCompactionMode: "periodic"
627# -- Ingress controller configuration