charts/apisix/values.yaml (263 lines of code) (raw):

# # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. global: # e.g. # imagePullSecrets: # - my-registry-secrets # - other-registry-secrets # -- Global Docker registry secret names as an array imagePullSecrets: [] image: # -- Apache APISIX image repository repository: apache/apisix # -- Apache APISIX image pull policy pullPolicy: IfNotPresent # -- Apache APISIX image tag # Overrides the image tag whose default is the chart appVersion. tag: 3.11.0-debian # -- set false to use `Deployment`, set true to use `DaemonSet` useDaemonSet: false # -- if useDaemonSet is true or autoscaling.enabled is true, replicaCount not become effective replicaCount: 1 # -- Set [priorityClassName](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#pod-priority) for Apache APISIX pods priorityClassName: "" # -- Annotations to add to each pod podAnnotations: {} # -- Set the securityContext for Apache APISIX pods podSecurityContext: {} # fsGroup: 2000 # -- Set the securityContext for Apache APISIX container securityContext: {} # capabilities: # drop: # - ALL # readOnlyRootFilesystem: true # runAsNonRoot: true # runAsUser: 1000 # -- See https://kubernetes.io/docs/tasks/run-application/configure-pdb/ for more details podDisruptionBudget: # -- Enable or disable podDisruptionBudget enabled: false # -- Set the `minAvailable` of podDisruptionBudget. You can specify only one of `maxUnavailable` and `minAvailable` in a single PodDisruptionBudget. # See [Specifying a Disruption Budget for your Application](https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget) # for more details minAvailable: 90% # -- Set the maxUnavailable of podDisruptionBudget maxUnavailable: 1 # -- Set pod resource requests & limits resources: {} # -- Use the host's network namespace # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following # lines, adjust them as necessary, and remove the curly braces after 'resources:'. # limits: # cpu: 100m # memory: 128Mi # requests: # cpu: 100m # memory: 128Mi hostNetwork: false # -- Node labels for Apache APISIX pod assignment nodeSelector: {} # -- List of node taints to tolerate tolerations: [] # -- Set affinity for Apache APISIX deploy affinity: {} # -- Topology Spread Constraints for pod assignment spread across your cluster among failure-domains # ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods topologySpreadConstraints: [] # -- timezone is the timezone where apisix uses. # For example: "UTC" or "Asia/Shanghai" # This value will be set on apisix container's environment variable TZ. # You may need to set the timezone to be consistent with your local time zone, # otherwise the apisix's logs may used to retrieve event maybe in wrong timezone. timezone: "" # -- extraEnvVars An array to add extra env vars # e.g: # extraEnvVars: # - name: FOO # value: "bar" # - name: FOO2 # valueFrom: # secretKeyRef: # name: SECRET_NAME # key: KEY extraEnvVars: [] updateStrategy: {} # type: RollingUpdate # -- Additional Kubernetes resources to deploy with the release. extraDeploy: [] # -- Additional `volume`, See [Kubernetes Volumes](https://kubernetes.io/docs/concepts/storage/volumes/) for the detail. extraVolumes: [] # - name: extras # emptyDir: {} # -- Additional `volume`, See [Kubernetes Volumes](https://kubernetes.io/docs/concepts/storage/volumes/) for the detail. extraVolumeMounts: [] # - name: extras # mountPath: /usr/share/extras # readOnly: true # -- Additional `initContainers`, See [Kubernetes initContainers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) for the detail. extraInitContainers: [] # - name: init-myservice # image: busybox:1.28 # 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"] # -- Additional `containers`, See [Kubernetes containers](https://kubernetes.io/docs/concepts/containers/) for the detail. extraContainers: [] initContainer: # -- Init container image image: busybox # -- Init container tag tag: 1.28 autoscaling: enabled: false # -- HPA version, the value is "v2" or "v2beta1", default "v2" version: v2 minReplicas: 1 maxReplicas: 100 targetCPUUtilizationPercentage: 80 targetMemoryUtilizationPercentage: 80 nameOverride: "" fullnameOverride: "" serviceAccount: create: false annotations: {} name: "" rbac: create: false service: # -- Apache APISIX service type for user access itself type: NodePort # -- Setting how the Service route external traffic # If you want to keep the client source IP, you can set this to Local. # ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip externalTrafficPolicy: Cluster # type: LoadBalancer # annotations: # service.beta.kubernetes.io/aws-load-balancer-type: nlb externalIPs: [] # -- Apache APISIX service settings for http http: enabled: true servicePort: 80 containerPort: 9080 # -- Support multiple http ports, See [Configuration](https://github.com/apache/apisix/blob/0bc65ea9acd726f79f80ae0abd8f50b7eb172e3d/conf/config-default.yaml#L24) additionalContainerPorts: [] # - port: 9081 # enable_http2: true # If not set, the default value is `false`. # - ip: 127.0.0.2 # Specific IP, If not set, the default value is `0.0.0.0`. # port: 9082 # enable_http2: true # -- Apache APISIX service settings for tls tls: servicePort: 443 # nodePort: 4443 # -- Apache APISIX service settings for stream. L4 proxy (TCP/UDP) stream: enabled: false tcp: [] udp: [] # - secretName: apisix-tls # hosts: # - chart-example.local # -- Override default labels assigned to Apache APISIX gateway resources labelsOverride: {} # labelsOverride: # app.kubernetes.io/name: "{{ .Release.Name }}" # app.kubernetes.io/instance: '{{ include "apisix.name" . }}' # -- Using ingress access Apache APISIX service ingress: enabled: false # -- (number) Service port to send traffic. Defaults to `service.http.servicePort`. servicePort: # -- Ingress annotations annotations: {} # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" hosts: - host: apisix.local paths: [] tls: [] control: # -- Enable Control API enabled: true service: # -- Control annotations annotations: {} # -- Control service type type: ClusterIP # loadBalancerIP: a.b.c.d # loadBalancerSourceRanges: # - "143.231.0.0/16" # -- IPs for which nodes in the cluster will also accept traffic for the servic externalIPs: [] # -- NodePort (only if control.service.type is NodePort) # nodePort: 32000 # -- which ip to listen on for Apache APISIX Control API ip: "127.0.0.1" # -- which port to use for Apache APISIX Control API port: 9090 # -- Service port to use for Apache APISIX Control API servicePort: 9090 # -- Using ingress access Apache APISIX Control service ingress: enabled: false # -- Ingress annotations annotations: {} # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" # -- Ingress Class Name # className: "nginx" hosts: - host: apisix-control.local paths: - "/*" tls: [] # - secretName: apisix-tls # hosts: # - chart-example.local # -- Observability configuration. metrics: serviceMonitor: # -- Enable or disable Apache APISIX serviceMonitor enabled: false # -- namespace where the serviceMonitor is deployed, by default, it is the same as the namespace of the apisix namespace: "" # -- name of the serviceMonitor, by default, it is the same as the apisix fullname name: "" # -- interval at which metrics should be scraped interval: 15s # -- @param serviceMonitor.labels ServiceMonitor extra labels labels: {} # -- @param serviceMonitor.annotations ServiceMonitor annotations annotations: {} apisix: # -- Enable nginx IPv6 resolver enableIPv6: true enableHTTP2: true # -- Whether the APISIX version number should be shown in Server header enableServerTokens: true # -- Use Pod metadata.uid as the APISIX id. setIDFromPodUID: false # -- Whether to add a custom lua module luaModuleHook: enabled: false # -- extend lua_package_path to load third party code luaPath: "" # -- the hook module which will be used to inject third party code into APISIX # use the lua require style like: "module.say_hello" hookPoint: "" # -- configmap that stores the codes configMapRef: # -- Name of the ConfigMap where the lua module codes store name: "" # mounts decides how to mount the codes to the container. mounts: # -- Name of the ConfigMap key, for setting the mapping relationship between ConfigMap key and the lua module code path. - key: "" # -- Filepath of the plugin code, for setting the mapping relationship between ConfigMap key and the lua module code path. path: "" ssl: enabled: false containerPort: 9443 # -- Support multiple https ports, See [Configuration](https://github.com/apache/apisix/blob/0bc65ea9acd726f79f80ae0abd8f50b7eb172e3d/conf/config-default.yaml#L99) additionalContainerPorts: [] # - ip: 127.0.0.3 # Specific IP, If not set, the default value is `0.0.0.0`. # port: 9445 # enable_http3: true # -- 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) existingCASecret: "" # -- Filename be used in the apisix.ssl.existingCASecret certCAFilename: "" enableHTTP3: false # -- TLS protocols allowed to use. sslProtocols: "TLSv1.2 TLSv1.3" # -- Define SNI to fallback if none is presented by client fallbackSNI: "" router: # -- Defines how apisix handles routing: # - radixtree_uri: match route by uri(base on radixtree) # - radixtree_host_uri: match route by host + uri(base on radixtree) # - radixtree_uri_with_parameter: match route by uri with parameters http: radixtree_host_uri fullCustomConfig: # -- Enable full customized config.yaml enabled: false # -- If apisix.fullCustomConfig.enabled is true, full customized config.yaml. # Please note that other settings about APISIX config will be ignored config: {} deployment: # -- Apache APISIX deployment mode # Optional: traditional, decoupled, standalone # # ref: https://apisix.apache.org/docs/apisix/deployment-modes/ mode: traditional # -- Deployment role # Optional: traditional, data_plane, control_plane # # ref: https://apisix.apache.org/docs/apisix/deployment-modes/ role: "traditional" admin: # -- Enable Admin API enabled: true # -- admin service type type: ClusterIP # loadBalancerIP: a.b.c.d # loadBalancerSourceRanges: # - "143.231.0.0/16" # -- IPs for which nodes in the cluster will also accept traffic for the servic externalIPs: [] # -- which ip to listen on for Apache APISIX admin API. Set to `"[::]"` when on IPv6 single stack ip: 0.0.0.0 # -- which port to use for Apache APISIX admin API port: 9180 # -- Service port to use for Apache APISIX admin API servicePort: 9180 # -- Admin API support CORS response headers cors: true # -- Admin API credentials credentials: # -- Apache APISIX admin API admin role credentials admin: edd1c9f034335f136f87ad84b625c8f1 # -- Apache APISIX admin API viewer role credentials viewer: 4054f7cf07e344346cd3f287985e76a2 # -- The APISIX Helm chart supports storing user credentials in a secret. # The secret needs to contain two keys, admin and viewer, with their respective values set. secretName: "" # -- Name of the admin role key in the secret, overrides the default key name "admin" secretAdminKey: "" # -- Name of the viewer role key in the secret, overrides the default key name "viewer" secretViewerKey: "" allow: # -- The client IP CIDR allowed to access Apache APISIX Admin API service. ipList: - 127.0.0.1/24 # -- Using ingress access Apache APISIX admin service ingress: enabled: false # -- Ingress annotations annotations: {} # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" hosts: - host: apisix-admin.local paths: - "/apisix" tls: [] # - secretName: apisix-tls # hosts: # - chart-example.local nginx: workerRlimitNofile: "20480" workerConnections: "10620" workerProcesses: auto enableCPUAffinity: true # -- Timeout during which a keep-alive client connection will stay open on the server side. keepaliveTimeout: 60s envs: [] # access log and error log configuration logs: # -- Enable access log or not, default true enableAccessLog: true # -- Access log path accessLog: "/dev/stdout" # -- Access log format 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\"' # -- Allows setting json or default characters escaping in variables accessLogFormatEscape: default # -- Error log path errorLog: "/dev/stderr" # -- Error log level errorLogLevel: "warn" # -- Custom configuration snippet. configurationSnippet: main: | httpStart: | httpEnd: | httpSrv: | httpAdmin: | stream: | # -- Add custom [lua_shared_dict](https://github.com/openresty/lua-nginx-module#toc88) settings, # 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 customLuaSharedDicts: [] # - name: foo # size: 10k # - name: bar # size: 1m discovery: # -- Enable or disable Apache APISIX integration service discovery enabled: false # -- Registry is the same to the one in APISIX [config-default.yaml](https://github.com/apache/apisix/blob/master/conf/config-default.yaml#L281), # and refer to such file for more setting details. also refer to [this documentation for integration service discovery](https://apisix.apache.org/docs/apisix/discovery) registry: {} # Integration service discovery registry. E.g eureka\dns\nacos\consul_kv # reference: # https://apisix.apache.org/docs/apisix/discovery/#configuration-for-eureka # https://apisix.apache.org/docs/apisix/discovery/dns/#service-discovery-via-dns # https://apisix.apache.org/docs/apisix/discovery/consul_kv/#configuration-for-consul-kv # https://apisix.apache.org/docs/apisix/discovery/nacos/#configuration-for-nacos # https://apisix.apache.org/docs/apisix/discovery/kubernetes/#configuration # # an eureka example: # ``` # eureka: # host: # - "http://${username}:${password}@${eureka_host1}:${eureka_port1}" # - "http://${username}:${password}@${eureka_host2}:${eureka_port2}" # prefix: "/eureka/" # fetch_interval: 30 # weight: 100 # timeout: # connect: 2000 # send: 2000 # read: 5000 # ``` # # the minimal Kubernetes example: # ``` # kubernetes: {} # ``` # # The prerequisites for the above minimal Kubernetes example: # 1. [Optional] Set `.serviceAccount.create` to `true` to create a dedicated ServiceAccount. # It is recommended to do so, otherwise the default ServiceAccount "default" will be used. # 2. [Required] Set `.rbac.create` to `true` to create and bind the necessary RBAC resources. # This grants the ServiceAccount in use to List-Watch Kubernetes Endpoints resources. # 3. [Required] Include the following environment variables in `.nginx.envs` to pass them into # nginx worker processes (https://nginx.org/en/docs/ngx_core_module.html#env): # - KUBERNETES_SERVICE_HOST # - KUBERNETES_SERVICE_PORT # This is for allowing the default `host` and `port` of `.discovery.registry.kubernetes.service`. dns: resolvers: - 127.0.0.1 - 172.20.0.10 - 114.114.114.114 - 223.5.5.5 - 1.1.1.1 - 8.8.8.8 validity: 30 timeout: 5 vault: # -- Enable or disable the vault integration enabled: false # -- The host address where the vault server is running. host: "" # -- HTTP timeout for each request. timeout: 10 # -- The generated token from vault instance that can grant access to read data from the vault. token: "" # -- Prefix allows you to better enforcement of policies. prefix: "" prometheus: # ref: https://apisix.apache.org/docs/apisix/plugins/prometheus/ enabled: false # -- path of the metrics endpoint path: /apisix/prometheus/metrics # -- prefix of the metrics metricPrefix: apisix_ # -- container port where the metrics are exposed containerPort: 9091 # -- Customize the list of APISIX plugins to enable. By default, APISIX's default plugins are automatically used. See [config-default.yaml](https://github.com/apache/apisix/blob/master/conf/config-default.yaml) plugins: [] # -- Customize the list of APISIX stream_plugins to enable. By default, APISIX's default stream_plugins are automatically used. See [config-default.yaml](https://github.com/apache/apisix/blob/master/conf/config-default.yaml) stream_plugins: [] # -- Set APISIX plugin attributes, see [config-default.yaml](https://github.com/apache/apisix/blob/master/conf/config-default.yaml#L376) for more details pluginAttrs: {} extPlugin: # -- Enable External Plugins. See [external plugin](https://apisix.apache.org/docs/apisix/next/external-plugin/) enabled: false # -- the command and its arguements to run as a subprocess cmd: ["/path/to/apisix-plugin-runner/runner", "run"] wasm: # -- Enable Wasm Plugins. See [wasm plugin](https://apisix.apache.org/docs/apisix/next/wasm/) enabled: false plugins: [] # -- customPlugins allows you to mount your own HTTP plugins. customPlugins: # -- Whether to configure some custom plugins enabled: false # -- the lua_path that tells APISIX where it can find plugins, # note the last ';' is required. luaPath: "/opts/custom_plugins/?.lua" plugins: # -- plugin name. - name: "plugin-name" # -- plugin attrs attrs: {} # -- plugin codes can be saved inside configmap object. configMap: # -- name of configmap. name: "configmap-name" # -- since keys in configmap is flat, mountPath allows to define the mount # path, so that plugin codes can be mounted hierarchically. mounts: - key: "the-file-name" path: "mount-path" # -- external etcd configuration. If etcd.enabled is false, these configuration will be used. externalEtcd: # -- 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. host: # host or ip e.g. http://172.20.128.89:2379 - http://etcd.host:2379 # -- if etcd.enabled is false, user for external etcd. Set empty to disable authentication user: root # -- if etcd.enabled is true, use etcd.auth.rbac.rootPassword instead. # -- if etcd.enabled is false and externalEtcd.existingSecret is not empty, the password should store in the corresponding secret # -- if etcd.enabled is false and externalEtcd.existingSecret is empty, externalEtcd.password is the passsword for external etcd. password: "" # -- if externalEtcd.existingSecret is the name of secret containing the external etcd password existingSecret: "" # -- externalEtcd.secretPasswordKey Key inside the secret containing the external etcd password secretPasswordKey: "etcd-root-password" # -- etcd configuration # use the FQDN address or the IP of the etcd etcd: # -- install etcd(v3) by default, set false if do not want to install etcd(v3) together enabled: true # -- apisix configurations prefix prefix: "/apisix" # -- Set the timeout value in seconds for subsequent socket operations from apisix to etcd cluster timeout: 30 # -- if etcd.enabled is true, set more values of bitnami/etcd helm chart auth: rbac: # -- No authentication by default. Switch to enable RBAC authentication create: false # -- root password for etcd. Requires etcd.auth.rbac.create to be true. rootPassword: "" tls: # -- enable etcd client certificate enabled: false # -- name of the secret contains etcd client cert existingSecret: "" # -- etcd client cert filename using in etcd.auth.tls.existingSecret certFilename: "" # -- etcd client cert key filename using in etcd.auth.tls.existingSecret certKeyFilename: "" # -- whether to verify the etcd endpoint certificate when setup a TLS connection to etcd verify: true # -- specify the TLS Server Name Indication extension, the ETCD endpoint hostname will be used when this setting is unset. sni: "" # -- ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container # -- added for backward compatibility with old kubernetes versions, as seccompProfile is not supported in kubernetes < 1.19 containerSecurityContext: enabled: false service: port: 2379 replicaCount: 3 dashboard: enabled: false config: conf: etcd: # -- Supports defining multiple etcd host addresses for an etcd cluster endpoints: - apisix-etcd:2379 # -- apisix configurations prefix prefix: "/apisix" # -- Specifies etcd basic auth username if enable etcd auth username: ~ # -- Specifies etcd basic auth password if enable etcd auth password: ~ # -- Ingress controller configuration ingress-controller: enabled: false config: apisix: adminAPIVersion: "v3"