1# This file has been modified by Chainguard, Inc.
3# Copyright Chainguard, Inc. All Rights Reserved.
4# Chainguard, Inc. modifications are subject to the license
5# available at: https://www.chainguard.dev/legal/software-license-agreement
7# Copyright Broadcom, Inc. All Rights Reserved.
8# SPDX-License-Identifier: APACHE-2.0
10## @section Global parameters
11## Global Docker image parameters
12## Please, note that this will override the image parameters, including dependencies, configured to use the global value
13## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass
16## @param global.imageRegistry Global Docker image registry
17## @param global.imagePullSecrets Global Docker registry secret names as an array
18## @param global.defaultStorageClass Global default StorageClass for Persistent Volume(s)
24 ## - myRegistryKeySecretName
27 defaultStorageClass: ""
28 ## Security parameters
31 ## @param global.security.allowInsecureImages Allows skipping image verification
32 allowInsecureImages: false
33 ## Compatibility adaptations for Kubernetes platforms
36 ## Compatibility adaptations for Openshift
39 ## @param global.compatibility.openshift.adaptSecurityContext Adapt the securityContext sections of the deployment to make them compatible with Openshift restricted-v2 SCC: remove runAsUser, runAsGroup and fsGroup and let the platform use their allowed default IDs. Possible values: auto (apply if the detected running cluster is Openshift), force (perform the adaptation always), disabled (do not perform adaptation)
41 adaptSecurityContext: auto
43## @section Common parameters
46## @param kubeVersion Override Kubernetes version
49## @param apiVersions Override Kubernetes API versions reported by .Capabilities
52## @param nameOverride String to partially override common.names.name
55## @param fullnameOverride String to fully override common.names.fullname
58## @param namespaceOverride String to fully override common.names.namespace
61## @param commonLabels Labels to add to all deployed objects
64## @param commonAnnotations Annotations to add to all deployed objects
67## @param clusterDomain Kubernetes cluster domain name
69clusterDomain: cluster.local
70## @param extraDeploy Array of extra objects to deploy with the release
73## @param usePasswordFiles Mount credentials as files instead of using environment variables
76## Enable diagnostic mode in the deployment
79 ## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden)
82 ## @param diagnosticMode.command Command to override all containers in the deployment
86 ## @param diagnosticMode.args Args to override all containers in the deployment
90## Iamguarded APISIX image
91## @param image.registry [default: REGISTRY_NAME] APISIX image registry
92## @param image.repository [default: REPOSITORY_NAME/apisix] APISIX image repository
93## @skip image.tag APISIX image tag (immutable tags are recommended)
94## @param image.digest APISIX image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag image tag (immutable tags are recommended)
95## @param image.pullPolicy APISIX image pull policy
96## @param image.pullSecrets APISIX image pull secrets
97## @param image.debug Enable APISIX image debug mode
101 repository: chainguard-private/apache-apisix-iamguarded
104 ## Specify a imagePullPolicy
105 ## ref: http://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images
107 pullPolicy: IfNotPresent
108 ## Optionally specify an array of imagePullSecrets.
109 ## Secrets must be manually created in the namespace.
110 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
113 ## - myRegistryKeySecretName
119## @section APISIX Data Plane parameters
122 ## @param dataPlane.enabled Enable APISIX Data Plane
125 ## @param dataPlane.useDaemonSet Deploy Data Plane as DaemonSet
128 ## @param dataPlane.replicaCount Number of APISIX Data Plane replicas to deploy
131 ## @param dataPlane.hostNetwork Use hostNetwork in APISIX Data Plane
134 ## @param dataPlane.dnsPolicy DNS policy for APISIX Data Plane pods
135 ## ref: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-policies
136 ## NOTE: If you set hostNetwork=true, you must set dnsPolicy=ClusterFirstWithHostNet
138 dnsPolicy: ClusterFirst
139 ## @param dataPlane.containerPorts.http APISIX Data Plane HTTP container port
140 ## @param dataPlane.containerPorts.https APISIX Data Plane HTTPS container port
141 ## @param dataPlane.containerPorts.control APISIX Data Plane control container port
142 ## @param dataPlane.containerPorts.metrics APISIX Data Plane metrics container port
149 ## Configure extra options for APISIX Data Plane containers' liveness and readiness probes
150 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
151 ## @param dataPlane.livenessProbe.enabled Enable livenessProbe on APISIX Data Plane containers
152 ## @param dataPlane.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe
153 ## @param dataPlane.livenessProbe.periodSeconds Period seconds for livenessProbe
154 ## @param dataPlane.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe
155 ## @param dataPlane.livenessProbe.failureThreshold Failure threshold for livenessProbe
156 ## @param dataPlane.livenessProbe.successThreshold Success threshold for livenessProbe
160 initialDelaySeconds: 5
165 ## @param dataPlane.readinessProbe.enabled Enable readinessProbe on APISIX Data Plane containers
166 ## @param dataPlane.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe
167 ## @param dataPlane.readinessProbe.periodSeconds Period seconds for readinessProbe
168 ## @param dataPlane.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe
169 ## @param dataPlane.readinessProbe.failureThreshold Failure threshold for readinessProbe
170 ## @param dataPlane.readinessProbe.successThreshold Success threshold for readinessProbe
174 initialDelaySeconds: 5
179 ## @param dataPlane.startupProbe.enabled Enable startupProbe on APISIX Data Plane containers
180 ## @param dataPlane.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe
181 ## @param dataPlane.startupProbe.periodSeconds Period seconds for startupProbe
182 ## @param dataPlane.startupProbe.timeoutSeconds Timeout seconds for startupProbe
183 ## @param dataPlane.startupProbe.failureThreshold Failure threshold for startupProbe
184 ## @param dataPlane.startupProbe.successThreshold Success threshold for startupProbe
188 initialDelaySeconds: 5
193 ## @param dataPlane.customLivenessProbe Custom livenessProbe that overrides the default one
195 customLivenessProbe: {}
196 ## @param dataPlane.customReadinessProbe Custom readinessProbe that overrides the default one
198 customReadinessProbe: {}
199 ## @param dataPlane.customStartupProbe Custom startupProbe that overrides the default one
201 customStartupProbe: {}
202 ## APISIX Data Plane resource requests and limits
203 ## ref: http://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
204 ## @param dataPlane.resourcesPreset Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if dataPlane.resources is set (dataPlane.resources is recommended for production).
206 resourcesPreset: "nano"
207 ## @param dataPlane.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
218 ## Configure Pods Security Context
219 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
220 ## @param dataPlane.podSecurityContext.enabled Enabled APISIX Data Plane pods' Security Context
221 ## @param dataPlane.podSecurityContext.fsGroupChangePolicy Set filesystem group change policy
222 ## @param dataPlane.podSecurityContext.sysctls Set kernel settings using the sysctl interface
223 ## @param dataPlane.podSecurityContext.supplementalGroups Set filesystem extra groups
224 ## @param dataPlane.podSecurityContext.fsGroup Set APISIX Data Plane pod's Security Context fsGroup
228 fsGroupChangePolicy: Always
230 supplementalGroups: []
232 ## Configure Container Security Context
233 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
234 ## @param dataPlane.containerSecurityContext.enabled Enabled APISIX Data Plane containers' Security Context
235 ## @param dataPlane.containerSecurityContext.seLinuxOptions [object,nullable] Set SELinux options in container
236 ## @param dataPlane.containerSecurityContext.runAsUser Set APISIX Data Plane containers' Security Context runAsUser
237 ## @param dataPlane.containerSecurityContext.runAsGroup Set APISIX Data Plane containers' Security Context runAsGroup
238 ## @param dataPlane.containerSecurityContext.runAsNonRoot Set APISIX Data Plane containers' Security Context runAsNonRoot
239 ## @param dataPlane.containerSecurityContext.privileged Set APISIX Data Plane containers' Security Context privileged
240 ## @param dataPlane.containerSecurityContext.readOnlyRootFilesystem Set APISIX Data Plane containers' Security Context runAsNonRoot
241 ## @param dataPlane.containerSecurityContext.allowPrivilegeEscalation Set APISIX Data Plane container's privilege escalation
242 ## @param dataPlane.containerSecurityContext.capabilities.drop Set APISIX Data Plane container's Security Context runAsNonRoot
243 ## @param dataPlane.containerSecurityContext.seccompProfile.type Set APISIX Data Plane container's Security Context seccomp profile
245 containerSecurityContext:
252 readOnlyRootFilesystem: true
253 allowPrivilegeEscalation: false
258 ## @param dataPlane.command Override default container command (useful when using custom images)
261 ## @param dataPlane.args Override default container args (useful when using custom images)
264 ## @param dataPlane.automountServiceAccountToken Mount Service Account token in pod
266 automountServiceAccountToken: true
267 ## @param dataPlane.hostAliases APISIX Data Plane pods host aliases
268 ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
271 ## @param dataPlane.defaultConfig [string] APISIX Data Plane configuration (evaluated as a template)
274 {{- if .Values.dataPlane.metrics.enabled }}
277 export_uri: /apisix/prometheus/metrics
278 metric_prefix: apisix_
279 enable_export_server: true
282 port: {{ .Values.dataPlane.containerPorts.metrics }}
285 node_listen: {{ .Values.dataPlane.containerPorts.http }}
287 {{- if .Values.dataPlane.tls.enabled }}
291 - port: {{ .Values.dataPlane.containerPorts.https }}
292 ssl_trusted_certificate: /iamguarded/certs/{{ .Values.dataPlane.tls.certCAFilename }}
297 port: {{ .Values.dataPlane.containerPorts.control }}
299 error_log: /dev/stderr
301 access_log: /dev/stdout
303 access_log: /dev/stdout
304 http_configuration_snippet: |
309 config_provider: etcd
310 {{- if .Values.controlPlane.enabled }}
313 - {{ ternary "https" "http" .Values.controlPlane.tls.enabled }}://{{ include "apisix.control-plane.fullname" . }}:{{ .Values.controlPlane.service.ports.configServer }}
317 {{- if or .Values.etcd.enabled .Values.externalEtcd.servers }}
320 {{- if .Values.etcd.enabled }}
321 {{- $replicas := $.Values.etcd.replicaCount | int }}
322 {{- range $i, $_e := until $replicas }}
323 - {{ printf "%s://%s-%d.%s:%v" (ternary "https" "http" $.Values.etcd.auth.client.secureTransport) (include "apisix.etcd.fullname" $ ) $i (include "apisix.etcd.headlessServiceName" $) ( include "apisix.etcd.port" $ ) }}
326 {{- range $node := .Values.externalEtcd.servers }}
327 - {{ ternary "https" "http" $.Values.externalEtcd.secureTransport }}://{{ printf "%s:%v" $node (include "apisix.etcd.port" $) }}
334 {{- if (include "apisix.etcd.authEnabled" .) }}
335 user: "{{ print "{{APISIX_ETCD_USER}}" }}"
336 password: "{{ print "{{APISIX_ETCD_PASSWORD}}" }}"
339 {{- if .Values.dataPlane.tls.enabled }}
341 {{- if .Values.dataPlane.tls.enabled }}
342 cert: /iamguarded/certs/{{ .Values.dataPlane.tls.certFilename }}
343 cert_key: /iamguarded/certs/{{ .Values.dataPlane.tls.certKeyFilename }}
344 {{- if .Values.dataPlane.tls.certCAFilename }}
345 client_ca_cert: /iamguarded/certs/{{ .Values.dataPlane.tls.certCAFilename }}
352 # apiserver schema, options [http, https]
353 schema: https #default https
355 # apiserver host, options [ipv4, ipv6, domain, environment variable]
356 host: ${KUBERNETES_SERVICE_HOST} #default ${KUBERNETES_SERVICE_HOST}
358 # apiserver port, options [port number, environment variable]
359 port: ${KUBERNETES_SERVICE_PORT} #default ${KUBERNETES_SERVICE_PORT}
362 # serviceaccount token or token_file
363 token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
365 default_weight: 50 # weight assigned to each discovered endpoint. default 50, minimum 0
366 ## @param dataPlane.extraConfig [object] extra configuration parameters to add to the config.yaml file in APISIX Data Plane
369 ## @param dataPlane.existingConfigMap name of a ConfigMap with existing configuration for APISIX Data Plane
371 existingConfigMap: ""
372 ## @param dataPlane.extraConfigExistingConfigMap name of a ConfigMap with existing configuration for APISIX Data Plane
374 extraConfigExistingConfigMap: ""
376 ## @param dataPlane.tls.enabled Enable TLS transport in APISIX Data Plane
379 ## @param dataPlane.tls.autoGenerated Auto-generate self-signed certificates
382 ## @param dataPlane.tls.existingSecret Name of a secret containing the certificates
385 ## @param dataPlane.tls.certFilename Path of the certificate file when mounted as a secret
387 certFilename: tls.crt
388 ## @param dataPlane.tls.certKeyFilename Path of the certificate key file when mounted as a secret
390 certKeyFilename: tls.key
391 ## @param dataPlane.tls.certCAFilename Path of the certificate CA file when mounted as a secret
393 certCAFilename: ca.crt
394 ## @param dataPlane.tls.cert Content of the certificate to be added to the secret
397 ## @param dataPlane.tls.key Content of the certificate key to be added to the secret
400 ## @param dataPlane.tls.ca Content of the certificate CA to be added to the secret
403 ## @param dataPlane.podLabels Extra labels for APISIX Data Plane pods
404 ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
407 ## @param dataPlane.podAnnotations Annotations for APISIX Data Plane pods
408 ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
411 ## @param dataPlane.podAffinityPreset Pod affinity preset. Ignored if `apisix.affinity` is set. Allowed values: `soft` or `hard`
412 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
414 podAffinityPreset: ""
415 ## @param dataPlane.podAntiAffinityPreset Pod anti-affinity preset. Ignored if `apisix.affinity` is set. Allowed values: `soft` or `hard`
416 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
418 podAntiAffinityPreset: soft
419 ## Pod Disruption Budget configuration
420 ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb
421 ## @param dataPlane.pdb.create Enable/disable a Pod Disruption Budget creation
422 ## @param dataPlane.pdb.minAvailable Minimum number/percentage of pods that should remain scheduled
423 ## @param dataPlane.pdb.maxUnavailable Maximum number/percentage of pods that may be made unavailable
429 ## Node apisix.affinity preset
430 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
433 ## @param dataPlane.nodeAffinityPreset.type Node affinity preset type. Ignored if `apisix.affinity` is set. Allowed values: `soft` or `hard`
436 ## @param dataPlane.nodeAffinityPreset.key Node label key to match. Ignored if `apisix.affinity` is set
439 ## @param dataPlane.nodeAffinityPreset.values Node label values to match. Ignored if `apisix.affinity` is set
446 ## @param dataPlane.affinity Affinity for APISIX Data Plane pods assignment
447 ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
448 ## NOTE: `apisix.podAffinityPreset`, `apisix.podAntiAffinityPreset`, and `apisix.nodeAffinityPreset` will be ignored when it's set
451 ## @param dataPlane.nodeSelector Node labels for APISIX Data Plane pods assignment
452 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
455 ## @param dataPlane.tolerations Tolerations for APISIX Data Plane pods assignment
456 ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
459 ## @param dataPlane.updateStrategy.type APISIX Data Plane statefulset strategy type
460 ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies
464 ## Can be set to RollingUpdate or OnDelete
467 ## @param dataPlane.priorityClassName APISIX Data Plane pods' priorityClassName
469 priorityClassName: ""
470 ## @param dataPlane.topologySpreadConstraints Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template
471 ## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods
473 topologySpreadConstraints: []
474 ## @param dataPlane.schedulerName Name of the k8s scheduler (other than default) for APISIX Data Plane pods
475 ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
478 ## @param dataPlane.terminationGracePeriodSeconds Seconds Redmine pod needs to terminate gracefully
479 ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods
481 terminationGracePeriodSeconds: ""
482 ## @param dataPlane.lifecycleHooks for the APISIX Data Plane container(s) to automate configuration before or after startup
485 ## @param dataPlane.extraEnvVars Array with extra environment variables to add to APISIX Data Plane nodes
492 ## @param dataPlane.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for APISIX Data Plane nodes
495 ## @param dataPlane.extraEnvVarsSecret Name of existing Secret containing extra env vars for APISIX Data Plane nodes
497 extraEnvVarsSecret: ""
498 ## @param dataPlane.extraVolumes Optionally specify extra list of additional volumes for the APISIX Data Plane pod(s)
501 ## @param dataPlane.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the APISIX Data Plane container(s)
503 extraVolumeMounts: []
504 ## @param dataPlane.sidecars Add additional sidecar containers to the APISIX Data Plane pod(s)
507 ## - name: your-image-name
509 ## imagePullPolicy: Always
512 ## containerPort: 1234
515 ## @param dataPlane.initContainers Add additional init containers to the APISIX Data Plane pod(s)
516 ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
519 ## - name: your-image-name
521 ## imagePullPolicy: Always
522 ## command: ['sh', '-c', 'echo "hello world"']
525 ## @section APISIX Data Plane Traffic Exposure Parameters
528 ## @param dataPlane.service.type APISIX Data Plane service type
531 ## @param dataPlane.service.ports.http APISIX Data Plane service HTTP port
532 ## @param dataPlane.service.ports.https APISIX Data Plane service HTTPS port
533 ## @param dataPlane.service.ports.metrics APISIX Data Plane service HTTPS port
539 ## Node ports to expose
540 ## @param dataPlane.service.nodePorts.http Node port for HTTP
541 ## @param dataPlane.service.nodePorts.https Node port for HTTPS
542 ## @param dataPlane.service.nodePorts.metrics Node port for metrics
543 ## NOTE: choose port between <30000-32767>
549 ## @param dataPlane.service.clusterIP APISIX Data Plane service Cluster IP
554 ## @param dataPlane.service.loadBalancerIP APISIX Data Plane service Load Balancer IP
555 ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer
558 ## @param dataPlane.service.loadBalancerSourceRanges APISIX Data Plane service Load Balancer sources
559 ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
561 ## loadBalancerSourceRanges:
564 loadBalancerSourceRanges: []
565 ## @param dataPlane.service.externalIPs APISIX Data Plane service External IPs
566 ## https://kubernetes.io/docs/concepts/services-networking/service/#external-ips
573 ## @param dataPlane.service.externalTrafficPolicy APISIX Data Plane service external traffic policy
574 ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-web-source-ip
576 externalTrafficPolicy: Cluster
577 ## @param dataPlane.service.annotations Additional custom annotations for APISIX Data Plane service
580 ## @param dataPlane.service.extraPorts Extra ports to expose in APISIX Data Plane service (normally used with the `sidecars` value)
583 ## @param dataPlane.service.sessionAffinity Control where web requests go, to the same pod or round-robin
584 ## Values: WebIP or None
585 ## ref: https://kubernetes.io/docs/concepts/services-networking/service/
587 sessionAffinity: None
588 ## @param dataPlane.service.sessionAffinityConfig Additional settings for the sessionAffinity
589 ## sessionAffinityConfig:
591 ## timeoutSeconds: 300
593 sessionAffinityConfig: {}
595 ## Ref: https://kubernetes.io/docs/concepts/services-networking/network-policies/
598 ## @param dataPlane.networkPolicy.enabled Specifies whether a NetworkPolicy should be created
601 ## @param dataPlane.networkPolicy.allowExternal Don't require server label for connections
602 ## The Policy model to apply. When set to false, only pods with the correct
603 ## server label will have network access to the ports server is listening
604 ## on. When true, server will accept connections from any source
605 ## (with the correct destination port).
608 ## @param dataPlane.networkPolicy.allowExternalEgress Allow the pod to access any range of port and all destinations.
610 allowExternalEgress: true
611 ## @param dataPlane.networkPolicy.kubeAPIServerPorts [array] List of possible endpoints to kube-apiserver (limit to your cluster settings to increase security)
613 kubeAPIServerPorts: [443, 6443, 8443]
614 ## @param dataPlane.networkPolicy.extraIngress [array] Add extra ingress rules to the NetworkPolicy
624 ## - matchExpressions:
630 ## @param dataPlane.networkPolicy.extraEgress [array] Add extra ingress rules to the NetworkPolicy (ignored if allowExternalEgress=true)
640 ## - matchExpressions:
647 ## @param dataPlane.networkPolicy.ingressNSMatchLabels [object] Labels to match to allow traffic from other namespaces
648 ## @param dataPlane.networkPolicy.ingressNSPodMatchLabels [object] Pod labels to match to allow traffic from other namespaces
650 ingressNSMatchLabels: {}
651 ingressNSPodMatchLabels: {}
652 ## ref: http://kubernetes.io/docs/concepts/services-networking/ingress/
655 ## @param dataPlane.ingress.enabled Enable ingress record generation for APISIX Data Plane
658 ## @param dataPlane.ingress.pathType Ingress path type
660 pathType: ImplementationSpecific
661 ## @param dataPlane.ingress.apiVersion Force Ingress API version (automatically detected if not set)
664 ## @param dataPlane.ingress.hostname Default host for the ingress record
666 hostname: apisix-data-plane.local
667 ## @param dataPlane.ingress.ingressClassName IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+)
668 ## This is supported in Kubernetes 1.18+ and required if you have more than one IngressClass marked as the default for your cluster .
669 ## ref: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/
672 ## @param dataPlane.ingress.path Default path for the ingress record
673 ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers
676 ## @param dataPlane.ingress.annotations Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.
677 ## Use this parameter to set the required annotations for cert-manager, see
678 ## ref: https://cert-manager.io/docs/usage/ingress/#supported-annotations
681 ## kubernetes.io/ingress.class: nginx
682 ## cert-manager.io/cluster-issuer: cluster-issuer-name
685 ## @param dataPlane.ingress.tls Enable TLS configuration for the host defined at `dataPlane.ingress.hostname` parameter
686 ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}`
688 ## - Use the `dataPlane.ingress.secrets` parameter to create this TLS secret
689 ## - Rely on cert-manager to create it by setting the corresponding annotations
690 ## - Rely on Helm to create self-signed certificates by setting `dataPlane.ingress.selfSigned=true`
693 ## @param dataPlane.ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm
696 ## @param dataPlane.ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record
699 ## - name: apisix.local
703 ## @param dataPlane.ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host
708 ## serviceName: ssl-redirect
709 ## servicePort: use-annotation
712 ## @param dataPlane.ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record
713 ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
718 ## secretName: apisix.local-tls
721 ## @param dataPlane.ingress.secrets Custom TLS certificates as secrets
722 ## NOTE: 'key' and 'certificate' are expected in PEM format
723 ## NOTE: 'name' should line up with a 'secretName' set further up
724 ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates
725 ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days
726 ## It is also possible to create and manage the certificates outside of this helm chart
727 ## Please see README.md for more information
730 ## - name: apisix.local-tls
732 ## -----BEGIN RSA PRIVATE KEY-----
734 ## -----END RSA PRIVATE KEY-----
736 ## -----BEGIN CERTIFICATE-----
738 ## -----END CERTIFICATE-----
741 ## @param dataPlane.ingress.extraRules Additional rules to be covered with this ingress record
742 ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-rules
745 ## - host: example.local
755 ## @section APISIX Data Plane Autoscaling configuration
756 ## ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
760 ## @param dataPlane.autoscaling.vpa.enabled Enable VPA
763 ## @param dataPlane.autoscaling.vpa.annotations Annotations for VPA resource
766 ## @param dataPlane.autoscaling.vpa.controlledResources VPA List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory
768 controlledResources: []
769 ## @param dataPlane.autoscaling.vpa.maxAllowed VPA Max allowed resources for the pod
773 ## @param dataPlane.autoscaling.vpa.minAllowed VPA Min allowed resources for the pod
778 ## @param dataPlane.autoscaling.vpa.updatePolicy.updateMode Autoscaling update policy Specifies whether recommended updates are applied when a Pod is started and whether recommended updates are applied during the life of a Pod
779 ## Possible values are "Off", "Initial", "Recreate", and "Auto".
783 ## @param dataPlane.autoscaling.hpa.enabled Enable HPA for APISIX Data Plane
786 ## @param dataPlane.autoscaling.hpa.minReplicas Minimum number of APISIX Data Plane replicas
789 ## @param dataPlane.autoscaling.hpa.maxReplicas Maximum number of APISIX Data Plane replicas
792 ## @param dataPlane.autoscaling.hpa.targetCPU Target CPU utilization percentage
795 ## @param dataPlane.autoscaling.hpa.targetMemory Target Memory utilization percentage
798 ## @section APISIX Data Plane RBAC Parameters
801 ## RBAC configuration
804 ## @param dataPlane.rbac.create Specifies whether RBAC resources should be created
807 ## @param dataPlane.rbac.rules Custom RBAC rules to set
819 ## ServiceAccount configuration
822 ## @param dataPlane.serviceAccount.create Specifies whether a ServiceAccount should be created
825 ## @param dataPlane.serviceAccount.name The name of the ServiceAccount to use.
826 ## If not set and create is true, a name is generated using the common.names.fullname template
829 ## @param dataPlane.serviceAccount.annotations Additional Service Account annotations (evaluated as a template)
832 ## @param dataPlane.serviceAccount.automountServiceAccountToken Automount service account token for the APISIX Data Plane service account
834 automountServiceAccountToken: false
835 ## @section APISIX Data Plane Metrics Parameters
838 ## Prometheus metrics
841 ## @param dataPlane.metrics.enabled Enable the export of Prometheus metrics
844 ## @param dataPlane.metrics.annotations [object] Annotations for the APISIX Data Plane service in order to scrape metrics
846 prometheus.io/scrape: "true"
847 prometheus.io/port: "{{ .Values.dataPlane.service.ports.metrics }}"
848 prometheus.io/path: "/apisix/prometheus/metrics"
849 ## Prometheus Operator ServiceMonitor configuration
852 ## @param dataPlane.metrics.serviceMonitor.enabled if `true`, creates a Prometheus Operator ServiceMonitor (also requires `metrics.enabled` to be `true`)
855 ## @param dataPlane.metrics.serviceMonitor.namespace Namespace in which Prometheus is running
858 ## @param dataPlane.metrics.serviceMonitor.annotations Additional custom annotations for the ServiceMonitor
861 ## @param dataPlane.metrics.serviceMonitor.labels Extra labels for the ServiceMonitor
864 ## @param dataPlane.metrics.serviceMonitor.jobLabel The name of the label on the target service to use as the job name in Prometheus
867 ## @param dataPlane.metrics.serviceMonitor.honorLabels honorLabels chooses the metric's labels on collisions with target labels
870 ## @param dataPlane.metrics.serviceMonitor.interval Interval at which metrics should be scraped.
871 ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
876 ## @param dataPlane.metrics.serviceMonitor.scrapeTimeout Timeout after which the scrape is ended
877 ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
879 ## scrapeTimeout: 10s
882 ## @param dataPlane.metrics.serviceMonitor.metricRelabelings Specify additional relabeling of metrics
884 metricRelabelings: []
885 ## @param dataPlane.metrics.serviceMonitor.relabelings Specify general relabeling
888 ## @param dataPlane.metrics.serviceMonitor.selector Prometheus instance selector labels
890 ## prometheus: my-prometheus
893## @section APISIX Control Plane Parameters
896 ## @param controlPlane.enabled Enable APISIX Control Plane
899 ## @param controlPlane.replicaCount Number of APISIX Control Plane replicas to deploy
902 ## @param controlPlane.hostNetwork Use hostNetwork
905 ## @param controlPlane.dnsPolicy DNS policy for APISIX Control Plane pods
906 ## ref: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-policies
907 ## NOTE: If you set hostNetwork=true, you must set dnsPolicy=ClusterFirstWithHostNet
909 dnsPolicy: ClusterFirst
910 ## @param controlPlane.useDaemonSet Deploy as DaemonSet
913 ## @param controlPlane.dashboardEnabled Enable APISIX Control Plane to expose APISIX Dashboards
915 dashboardEnabled: true
916 ## @param controlPlane.containerPorts.adminAPI APISIX Control Plane Admin API port
917 ## @param controlPlane.containerPorts.configServer APISIX Control Plane config port
918 ## @param controlPlane.containerPorts.control APISIX Control Plane control port
919 ## @param controlPlane.containerPorts.metrics APISIX Control Plane metrics port
926 ## Configure extra options for APISIX Control Plane containers' liveness and readiness probes
927 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
928 ## @param controlPlane.livenessProbe.enabled Enable livenessProbe on APISIX Control Plane containers
929 ## @param controlPlane.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe
930 ## @param controlPlane.livenessProbe.periodSeconds Period seconds for livenessProbe
931 ## @param controlPlane.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe
932 ## @param controlPlane.livenessProbe.failureThreshold Failure threshold for livenessProbe
933 ## @param controlPlane.livenessProbe.successThreshold Success threshold for livenessProbe
937 initialDelaySeconds: 5
942 ## @param controlPlane.readinessProbe.enabled Enable readinessProbe on APISIX Control Plane containers
943 ## @param controlPlane.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe
944 ## @param controlPlane.readinessProbe.periodSeconds Period seconds for readinessProbe
945 ## @param controlPlane.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe
946 ## @param controlPlane.readinessProbe.failureThreshold Failure threshold for readinessProbe
947 ## @param controlPlane.readinessProbe.successThreshold Success threshold for readinessProbe
951 initialDelaySeconds: 5
956 ## @param controlPlane.startupProbe.enabled Enable startupProbe on APISIX Control Plane containers
957 ## @param controlPlane.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe
958 ## @param controlPlane.startupProbe.periodSeconds Period seconds for startupProbe
959 ## @param controlPlane.startupProbe.timeoutSeconds Timeout seconds for startupProbe
960 ## @param controlPlane.startupProbe.failureThreshold Failure threshold for startupProbe
961 ## @param controlPlane.startupProbe.successThreshold Success threshold for startupProbe
965 initialDelaySeconds: 5
970 ## @param controlPlane.customLivenessProbe Custom livenessProbe that overrides the default one
972 customLivenessProbe: {}
973 ## @param controlPlane.customReadinessProbe Custom readinessProbe that overrides the default one
975 customReadinessProbe: {}
976 ## @param controlPlane.customStartupProbe Custom startupProbe that overrides the default one
978 customStartupProbe: {}
979 ## APISIX Control Plane resource requests and limits
980 ## ref: http://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
981 ## @param controlPlane.resourcesPreset Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if controlPlane.resources is set (controlPlane.resources is recommended for production).
983 resourcesPreset: "nano"
984 ## @param controlPlane.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
995 ## Configure Pods Security Context
996 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
997 ## @param controlPlane.podSecurityContext.enabled Enabled APISIX Control Plane pods' Security Context
998 ## @param controlPlane.podSecurityContext.fsGroupChangePolicy Set filesystem group change policy
999 ## @param controlPlane.podSecurityContext.sysctls Set kernel settings using the sysctl interface
1000 ## @param controlPlane.podSecurityContext.supplementalGroups Set filesystem extra groups
1001 ## @param controlPlane.podSecurityContext.fsGroup Set APISIX Control Plane pod's Security Context fsGroup
1005 fsGroupChangePolicy: Always
1007 supplementalGroups: []
1009 ## Configure Container Security Context
1010 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
1011 ## @param controlPlane.containerSecurityContext.enabled Enabled APISIX Control Plane containers' Security Context
1012 ## @param controlPlane.containerSecurityContext.seLinuxOptions [object,nullable] Set SELinux options in container
1013 ## @param controlPlane.containerSecurityContext.runAsUser Set APISIX Control Plane containers' Security Context runAsUser
1014 ## @param controlPlane.containerSecurityContext.runAsGroup Set APISIX Control Plane containers' Security Context runAsGroup
1015 ## @param controlPlane.containerSecurityContext.runAsNonRoot Set APISIX Control Plane containers' Security Context runAsNonRoot
1016 ## @param controlPlane.containerSecurityContext.privileged Set APISIX Control Plane containers' Security Context privileged
1017 ## @param controlPlane.containerSecurityContext.readOnlyRootFilesystem Set APISIX Control Plane containers' Security Context runAsNonRoot
1018 ## @param controlPlane.containerSecurityContext.allowPrivilegeEscalation Set APISIX Control Plane container's privilege escalation
1019 ## @param controlPlane.containerSecurityContext.capabilities.drop Set APISIX Control Plane container's Security Context runAsNonRoot
1020 ## @param controlPlane.containerSecurityContext.seccompProfile.type Set APISIX Control Plane container's Security Context seccomp profile
1022 containerSecurityContext:
1029 readOnlyRootFilesystem: true
1030 allowPrivilegeEscalation: false
1034 type: RuntimeDefault
1035 ## @param controlPlane.command Override default container command (useful when using custom images)
1038 ## @param controlPlane.args Override default container args (useful when using custom images)
1041 ## @param controlPlane.automountServiceAccountToken Mount Service Account token in pod
1043 automountServiceAccountToken: true
1044 ## @param controlPlane.hostAliases APISIX Control Plane pods host aliases
1045 ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
1048 ## @param controlPlane.apiTokenAdmin Admin API Token for APISIX Control Plane
1051 ## @param controlPlane.apiTokenViewer Viewer API Token for APISIX Control Plane
1054 ## @param controlPlane.existingSecret Name of a secret containing API Tokens for APISIX Control Plane
1057 ## @param controlPlane.existingSecretAdminTokenKey Key inside the secret containing the Admin API Tokens for APISIX Control Plane
1059 existingSecretAdminTokenKey: ""
1060 ## @param controlPlane.existingSecretViewerTokenKey Key inside the secret containing the Viewer API Tokens for APISIX Control Plane
1062 existingSecretViewerTokenKey: ""
1063 ## @param controlPlane.defaultConfig [string] APISIX Control Plane configuration (evaluated as a template)
1066 {{- if .Values.controlPlane.metrics.enabled }}
1069 export_uri: /apisix/prometheus/metrics
1070 metric_prefix: apisix_
1071 enable_export_server: true
1074 port: {{ .Values.controlPlane.containerPorts.metrics }}
1077 error_log: /dev/stderr
1079 access_log: /dev/stdout
1081 access_log: /dev/stdout
1082 http_configuration_snippet: |
1083 proxy_buffering off;
1087 port: {{ .Values.controlPlane.containerPorts.control }}
1091 config_provider: etcd
1093 listen: 0.0.0.0:{{ .Values.controlPlane.containerPorts.configServer }}
1094 cert: /iamguarded/certs/{{ .Values.controlPlane.tls.certFilename }}
1095 cert_key: /iamguarded/certs/{{ .Values.controlPlane.tls.certKeyFilename }}
1098 {{- if .Values.etcd.enabled }}
1099 {{- $replicas := $.Values.etcd.replicaCount | int }}
1100 {{- range $i, $_e := until $replicas }}
1101 - {{ printf "%s://%s-%d.%s:%v" (ternary "https" "http" $.Values.etcd.auth.client.secureTransport) (include "apisix.etcd.fullname" $ ) $i (include "apisix.etcd.headlessServiceName" $) ( include "apisix.etcd.port" $ ) }} {{- end }}
1103 {{- range $node := .Values.externalEtcd.servers }}
1104 - {{ ternary "https" "http" $.Values.externalEtcd.secureTransport }}://{{ printf "%s:%v" $node (include "apisix.etcd.port" $) }}
1111 {{- if (include "apisix.etcd.authEnabled" .) }}
1112 user: "{{ print "{{APISIX_ETCD_USER}}" }}"
1113 password: "{{ print "{{APISIX_ETCD_PASSWORD}}" }}"
1115 {{- if .Values.controlPlane.tls.enabled }}
1117 {{- if .Values.controlPlane.tls.enabled }}
1118 cert: /iamguarded/certs/{{ .Values.controlPlane.tls.certFilename }}
1119 cert_key: /iamguarded/certs/{{ .Values.controlPlane.tls.certKeyFilename }}
1120 {{- if .Values.controlPlane.tls.certCAFilename }}
1121 client_ca_cert: /iamguarded/certs/{{ .Values.controlPlane.tls.certCAFilename }}
1126 {{- if .Values.controlPlane.tls.enabled }}
1129 admin_ssl_cert: /iamguarded/certs/{{ .Values.controlPlane.tls.certFilename }}
1130 admin_ssl_cert_key: /iamguarded/certs/{{ .Values.controlPlane.tls.certKeyFilename }}
1136 key: "{{ print "{{APISIX_ADMIN_API_TOKEN}}" }}"
1139 key: "{{ print "{{APISIX_VIEWER_API_TOKEN}}" }}"
1142 port: {{ .Values.controlPlane.containerPorts.adminAPI }}
1143 enable_admin_cors: true # Admin API support CORS response headers.
1144 enable_admin_ui: {{ ternary "true" "false" .Values.controlPlane.dashboardEnabled }}
1148 schema: https #default https
1149 # apiserver host, options [ipv4, ipv6, domain, environment variable]
1150 host: ${KUBERNETES_SERVICE_HOST}
1151 # apiserver port, options [port number, environment variable]
1152 port: ${KUBERNETES_SERVICE_PORT}
1154 # serviceaccount token or token_file
1155 token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
1156 default_weight: 50 # weight assigned to each discovered endpoint. default 50, minimum 0
1157 ## @param controlPlane.extraConfig [object] extra configuration parameters to add to the config.yaml file in APISIX Control plane
1160 ## @param controlPlane.existingConfigMap name of a ConfigMap with existing configuration for APISIX Control Plane
1162 existingConfigMap: ""
1163 ## @param controlPlane.extraConfigExistingConfigMap name of a ConfigMap with existing configuration for APISIX Control Plane
1165 extraConfigExistingConfigMap: ""
1167 ## @param controlPlane.tls.enabled Enable TLS transport in APISIX Control Plane
1170 ## @param controlPlane.tls.autoGenerated Auto-generate self-signed certificates
1173 ## @param controlPlane.tls.existingSecret Name of a secret containing the certificates
1176 ## @param controlPlane.tls.certFilename Path of the certificate file when mounted as a secret
1178 certFilename: tls.crt
1179 ## @param controlPlane.tls.certKeyFilename Path of the certificate key file when mounted as a secret
1181 certKeyFilename: tls.key
1182 ## @param controlPlane.tls.certCAFilename Path of the certificate CA file when mounted as a secret
1184 certCAFilename: ca.crt
1185 ## @param controlPlane.tls.cert Content of the certificate to be added to the secret
1188 ## @param controlPlane.tls.key Content of the certificate key to be added to the secret
1191 ## @param controlPlane.tls.ca Content of the certificate CA to be added to the secret
1194 ## @param controlPlane.podLabels Extra labels for APISIX Control Plane pods
1195 ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
1198 ## @param controlPlane.podAnnotations Annotations for APISIX Control Plane pods
1199 ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
1202 ## @param controlPlane.podAffinityPreset Pod affinity preset. Ignored if `apisix.affinity` is set. Allowed values: `soft` or `hard`
1203 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
1205 podAffinityPreset: ""
1206 ## @param controlPlane.podAntiAffinityPreset Pod anti-affinity preset. Ignored if `apisix.affinity` is set. Allowed values: `soft` or `hard`
1207 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
1209 podAntiAffinityPreset: soft
1210 ## Pod Disruption Budget configuration
1211 ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb
1212 ## @param controlPlane.pdb.create Enable/disable a Pod Disruption Budget creation
1213 ## @param controlPlane.pdb.minAvailable Minimum number/percentage of pods that should remain scheduled
1214 ## @param controlPlane.pdb.maxUnavailable Maximum number/percentage of pods that may be made unavailable
1220 ## Node apisix.affinity preset
1221 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
1224 ## @param controlPlane.nodeAffinityPreset.type Node affinity preset type. Ignored if `apisix.affinity` is set. Allowed values: `soft` or `hard`
1227 ## @param controlPlane.nodeAffinityPreset.key Node label key to match. Ignored if `apisix.affinity` is set
1230 ## @param controlPlane.nodeAffinityPreset.values Node label values to match. Ignored if `apisix.affinity` is set
1237 ## @param controlPlane.affinity Affinity for APISIX Control Plane pods assignment
1238 ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
1239 ## NOTE: `apisix.podAffinityPreset`, `apisix.podAntiAffinityPreset`, and `apisix.nodeAffinityPreset` will be ignored when it's set
1242 ## @param controlPlane.nodeSelector Node labels for APISIX Control Plane pods assignment
1243 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
1246 ## @param controlPlane.tolerations Tolerations for APISIX Control Plane pods assignment
1247 ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
1250 ## @param controlPlane.updateStrategy.type APISIX Control Plane statefulset strategy type
1251 ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies
1255 ## Can be set to RollingUpdate or OnDelete
1258 ## @param controlPlane.priorityClassName APISIX Control Plane pods' priorityClassName
1260 priorityClassName: ""
1261 ## @param controlPlane.topologySpreadConstraints Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template
1262 ## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods
1264 topologySpreadConstraints: []
1265 ## @param controlPlane.schedulerName Name of the k8s scheduler (other than default) for APISIX Control Plane pods
1266 ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
1269 ## @param controlPlane.terminationGracePeriodSeconds Seconds Redmine pod needs to terminate gracefully
1270 ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods
1272 terminationGracePeriodSeconds: ""
1273 ## @param controlPlane.lifecycleHooks for the APISIX Control Plane container(s) to automate configuration before or after startup
1276 ## @param controlPlane.extraEnvVars Array with extra environment variables to add to APISIX Control Plane nodes
1283 ## @param controlPlane.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for APISIX Control Plane nodes
1286 ## @param controlPlane.extraEnvVarsSecret Name of existing Secret containing extra env vars for APISIX Control Plane nodes
1288 extraEnvVarsSecret: ""
1289 ## @param controlPlane.extraVolumes Optionally specify extra list of additional volumes for the APISIX Control Plane pod(s)
1292 ## @param controlPlane.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the APISIX Control Plane container(s)
1294 extraVolumeMounts: []
1295 ## @param controlPlane.sidecars Add additional sidecar containers to the APISIX Control Plane pod(s)
1298 ## - name: your-image-name
1299 ## image: your-image
1300 ## imagePullPolicy: Always
1303 ## containerPort: 1234
1306 ## @param controlPlane.initContainers Add additional init containers to the APISIX Control Plane pod(s)
1307 ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
1310 ## - name: your-image-name
1311 ## image: your-image
1312 ## imagePullPolicy: Always
1313 ## command: ['sh', '-c', 'echo "hello world"']
1316 ## @section APISIX Control Plane Traffic Exposure Parameters
1319 ## @param controlPlane.service.type APISIX Control Plane service type
1322 ## @param controlPlane.service.ports.adminAPI APISIX Control Plane service Admin API port
1323 ## @param controlPlane.service.ports.configServer APISIX Control Plane service Config Server port
1324 ## @param controlPlane.service.ports.metrics APISIX Control Plane service metrics port
1330 ## Node ports to expose
1331 ## @param controlPlane.service.nodePorts.adminAPI Node port for Admin API
1332 ## @param controlPlane.service.nodePorts.configServer Node port for Config Server
1333 ## @param controlPlane.service.nodePorts.metrics Node port for Metrics
1334 ## NOTE: choose port between <30000-32767>
1340 ## @param controlPlane.service.clusterIP APISIX Control Plane service Cluster IP
1345 ## @param controlPlane.service.loadBalancerIP APISIX Control Plane service Load Balancer IP
1346 ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer
1349 ## @param controlPlane.service.loadBalancerSourceRanges APISIX Control Plane service Load Balancer sources
1350 ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
1352 ## loadBalancerSourceRanges:
1355 loadBalancerSourceRanges: []
1356 ## @param controlPlane.service.externalIPs APISIX Control Plane service External IPs
1357 ## https://kubernetes.io/docs/concepts/services-networking/service/#external-ips
1364 ## @param controlPlane.service.externalTrafficPolicy APISIX Control Plane service external traffic policy
1365 ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-web-source-ip
1367 externalTrafficPolicy: Cluster
1368 ## @param controlPlane.service.annotations Additional custom annotations for APISIX Control Plane service
1371 ## @param controlPlane.service.extraPorts Extra ports to expose in APISIX Control Plane service (normally used with the `sidecars` value)
1374 ## @param controlPlane.service.sessionAffinity Control where web requests go, to the same pod or round-robin
1375 ## Values: WebIP or None
1376 ## ref: https://kubernetes.io/docs/concepts/services-networking/service/
1378 sessionAffinity: None
1379 ## @param controlPlane.service.sessionAffinityConfig Additional settings for the sessionAffinity
1380 ## sessionAffinityConfig:
1382 ## timeoutSeconds: 300
1384 sessionAffinityConfig: {}
1386 ## Ref: https://kubernetes.io/docs/concepts/services-networking/network-policies/
1389 ## @param controlPlane.networkPolicy.enabled Specifies whether a NetworkPolicy should be created
1392 ## @param controlPlane.networkPolicy.allowExternal Don't require server label for connections
1393 ## The Policy model to apply. When set to false, only pods with the correct
1394 ## server label will have network access to the ports server is listening
1395 ## on. When true, server will accept connections from any source
1396 ## (with the correct destination port).
1399 ## @param controlPlane.networkPolicy.allowExternalEgress Allow the pod to access any range of port and all destinations.
1401 allowExternalEgress: true
1402 ## @param controlPlane.networkPolicy.kubeAPIServerPorts [array] List of possible endpoints to kube-apiserver (limit to your cluster settings to increase security)
1404 kubeAPIServerPorts: [443, 6443, 8443]
1405 ## @param controlPlane.networkPolicy.extraIngress [array] Add extra ingress rules to the NetworkPolicy
1415 ## - matchExpressions:
1421 ## @param controlPlane.networkPolicy.extraEgress [array] Add extra ingress rules to the NetworkPolicy (ignored if allowExternalEgress=true)
1431 ## - matchExpressions:
1438 ## @param controlPlane.networkPolicy.ingressNSMatchLabels [object] Labels to match to allow traffic from other namespaces
1439 ## @param controlPlane.networkPolicy.ingressNSPodMatchLabels [object] Pod labels to match to allow traffic from other namespaces
1441 ingressNSMatchLabels: {}
1442 ingressNSPodMatchLabels: {}
1443 ## ref: http://kubernetes.io/docs/concepts/services-networking/ingress/
1446 ## @param controlPlane.ingress.enabled Enable ingress record generation for APISIX Control Plane
1449 ## @param controlPlane.ingress.pathType Ingress path type
1451 pathType: ImplementationSpecific
1452 ## @param controlPlane.ingress.apiVersion Force Ingress API version (automatically detected if not set)
1455 ## @param controlPlane.ingress.hostname Default host for the ingress record
1457 hostname: apisix-control-plane.local
1458 ## @param controlPlane.ingress.ingressClassName IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+)
1459 ## This is supported in Kubernetes 1.18+ and required if you have more than one IngressClass marked as the default for your cluster .
1460 ## ref: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/
1462 ingressClassName: ""
1463 ## @param controlPlane.ingress.path Default path for the ingress record
1464 ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers
1467 ## @param controlPlane.ingress.annotations Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.
1468 ## Use this parameter to set the required annotations for cert-manager, see
1469 ## ref: https://cert-manager.io/docs/usage/ingress/#supported-annotations
1472 ## kubernetes.io/ingress.class: nginx
1473 ## cert-manager.io/cluster-issuer: cluster-issuer-name
1476 ## @param controlPlane.ingress.tls Enable TLS configuration for the host defined at `controlPlane.ingress.hostname` parameter
1477 ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}`
1479 ## - Use the `controlPlane.ingress.secrets` parameter to create this TLS secret
1480 ## - Rely on cert-manager to create it by setting the corresponding annotations
1481 ## - Rely on Helm to create self-signed certificates by setting `controlPlane.ingress.selfSigned=true`
1484 ## @param controlPlane.ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm
1487 ## @param controlPlane.ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record
1490 ## - name: apisix.local
1494 ## @param controlPlane.ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host
1499 ## serviceName: ssl-redirect
1500 ## servicePort: use-annotation
1503 ## @param controlPlane.ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record
1504 ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
1509 ## secretName: apisix.local-tls
1512 ## @param controlPlane.ingress.secrets Custom TLS certificates as secrets
1513 ## NOTE: 'key' and 'certificate' are expected in PEM format
1514 ## NOTE: 'name' should line up with a 'secretName' set further up
1515 ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates
1516 ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days
1517 ## It is also possible to create and manage the certificates outside of this helm chart
1518 ## Please see README.md for more information
1521 ## - name: apisix.local-tls
1523 ## -----BEGIN RSA PRIVATE KEY-----
1525 ## -----END RSA PRIVATE KEY-----
1527 ## -----BEGIN CERTIFICATE-----
1529 ## -----END CERTIFICATE-----
1532 ## @param controlPlane.ingress.extraRules Additional rules to be covered with this ingress record
1533 ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-rules
1536 ## - host: example.local
1541 ## name: example-svc
1546 ## @section APISIX Control Plane Autoscaling configuration
1547 ## ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
1551 ## @param controlPlane.autoscaling.vpa.enabled Enable VPA
1554 ## @param controlPlane.autoscaling.vpa.annotations Annotations for VPA resource
1557 ## @param controlPlane.autoscaling.vpa.controlledResources VPA List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory
1559 controlledResources: []
1560 ## @param controlPlane.autoscaling.vpa.maxAllowed VPA Max allowed resources for the pod
1564 ## @param controlPlane.autoscaling.vpa.minAllowed VPA Min allowed resources for the pod
1569 ## @param controlPlane.autoscaling.vpa.updatePolicy.updateMode Autoscaling update policy Specifies whether recommended updates are applied when a Pod is started and whether recommended updates are applied during the life of a Pod
1570 ## Possible values are "Off", "Initial", "Recreate", and "Auto".
1574 ## @param controlPlane.autoscaling.hpa.enabled Enable HPA for APISIX Control Plane
1577 ## @param controlPlane.autoscaling.hpa.minReplicas Minimum number of APISIX Control Plane replicas
1580 ## @param controlPlane.autoscaling.hpa.maxReplicas Maximum number of APISIX Control Plane replicas
1583 ## @param controlPlane.autoscaling.hpa.targetCPU Target CPU utilization percentage
1586 ## @param controlPlane.autoscaling.hpa.targetMemory Target Memory utilization percentage
1589 ## @section APISIX Control Plane RBAC parameters
1592 ## RBAC configuration
1595 ## @param controlPlane.rbac.create Specifies whether RBAC resources should be created
1598 ## @param controlPlane.rbac.rules Custom RBAC rules to set
1610 ## ServiceAccount configuration
1613 ## @param controlPlane.serviceAccount.create Specifies whether a ServiceAccount should be created
1616 ## @param controlPlane.serviceAccount.name The name of the ServiceAccount to use.
1617 ## If not set and create is true, a name is generated using the common.names.fullname template
1620 ## @param controlPlane.serviceAccount.annotations Additional Service Account annotations (evaluated as a template)
1623 ## @param controlPlane.serviceAccount.automountServiceAccountToken Automount service account token for the APISIX Control Plane service account
1625 automountServiceAccountToken: false
1626 ## @section APISIX Control Plane Metrics Parameters
1629 ## Prometheus metrics
1632 ## @param controlPlane.metrics.enabled Enable the export of Prometheus metrics
1635 ## @param controlPlane.metrics.annotations [object] Annotations for the APISIX Control Plane service in order to scrape metrics
1637 prometheus.io/scrape: "true"
1638 prometheus.io/port: "{{ .Values.controlPlane.service.ports.metrics }}"
1639 prometheus.io/path: "/apisix/prometheus/metrics"
1640 ## Prometheus Operator ServiceMonitor configuration
1643 ## @param controlPlane.metrics.serviceMonitor.enabled if `true`, creates a Prometheus Operator ServiceMonitor (also requires `metrics.enabled` to be `true`)
1646 ## @param controlPlane.metrics.serviceMonitor.namespace Namespace in which Prometheus is running
1649 ## @param controlPlane.metrics.serviceMonitor.annotations Additional custom annotations for the ServiceMonitor
1652 ## @param controlPlane.metrics.serviceMonitor.labels Extra labels for the ServiceMonitor
1655 ## @param controlPlane.metrics.serviceMonitor.jobLabel The name of the label on the target service to use as the job name in Prometheus
1658 ## @param controlPlane.metrics.serviceMonitor.honorLabels honorLabels chooses the metric's labels on collisions with target labels
1661 ## @param controlPlane.metrics.serviceMonitor.interval Interval at which metrics should be scraped.
1662 ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
1667 ## @param controlPlane.metrics.serviceMonitor.scrapeTimeout Timeout after which the scrape is ended
1668 ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
1670 ## scrapeTimeout: 10s
1673 ## @param controlPlane.metrics.serviceMonitor.metricRelabelings Specify additional relabeling of metrics
1675 metricRelabelings: []
1676 ## @param controlPlane.metrics.serviceMonitor.relabelings Specify general relabeling
1679 ## @param controlPlane.metrics.serviceMonitor.selector Prometheus instance selector labels
1681 ## prometheus: my-prometheus
1684## @section APISIX Ingress Controller Parameters
1687 ## @param ingressController.enabled Enable APISIX Ingress Controller
1690 ## Iamguarded APISIX Ingress Controller image
1691 ## @param ingressController.image.registry [default: REGISTRY_NAME] APISIX Ingress Controller image registry
1692 ## @param ingressController.image.repository [default: REPOSITORY_NAME/apisix-ingress-controller] APISIX Ingress Controller image repository
1693 ## @skip ingressController.image.tag APISIX Ingress Controller image tag (immutable tags are recommended)
1694 ## @param ingressController.image.digest APISIX Ingress Controller image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag image tag (immutable tags are recommended)
1695 ## @param ingressController.image.pullPolicy APISIX Ingress Controller image pull policy
1696 ## @param ingressController.image.pullSecrets APISIX Ingress Controller image pull secrets
1697 ## @param ingressController.image.debug Enable APISIX Ingress Controller image debug mode
1701 repository: chainguard-private/apisix-ingress-controller-iamguarded
1704 ## Specify a imagePullPolicy
1705 ## ref: http://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images
1707 pullPolicy: IfNotPresent
1708 ## Optionally specify an array of imagePullSecrets.
1709 ## Secrets must be manually created in the namespace.
1710 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
1713 ## - myRegistryKeySecretName
1716 ## Enable debug mode
1719 ## ADC server sidecar image (required by the new APISIX ingress controller to communicate with APISIX)
1720 ## @param ingressController.adcServer.image.registry ADC server image registry
1721 ## @param ingressController.adcServer.image.repository ADC server image repository
1722 ## @param ingressController.adcServer.image.tag ADC server image tag
1723 ## @param ingressController.adcServer.image.digest ADC server image digest (overrides tag when set)
1724 ## @param ingressController.adcServer.image.pullPolicy ADC server image pull policy
1725 ## @param ingressController.adcServer.logLevel ADC server log level
1730 repository: chainguard-private/adc-iamguarded
1733 pullPolicy: IfNotPresent
1735 ## @param ingressController.replicaCount Number of APISIX Ingress Controller replicas to deploy
1738 ## @param ingressController.containerPorts.http APISIX Ingress Controller http container port (metrics)
1739 ## @param ingressController.containerPorts.https APISIX Ingress Controller https container port
1740 ## @param ingressController.containerPorts.probe APISIX Ingress Controller health probe container port
1746 ## @param ingressController.gatewayProxy.create Create a GatewayProxy resource pointing to the APISIX control plane
1750 ## Configure extra options for APISIX Ingress Controller containers' liveness and readiness probes
1751 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes
1752 ## @param ingressController.livenessProbe.enabled Enable livenessProbe on APISIX Ingress Controller containers
1753 ## @param ingressController.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe
1754 ## @param ingressController.livenessProbe.periodSeconds Period seconds for livenessProbe
1755 ## @param ingressController.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe
1756 ## @param ingressController.livenessProbe.failureThreshold Failure threshold for livenessProbe
1757 ## @param ingressController.livenessProbe.successThreshold Success threshold for livenessProbe
1761 initialDelaySeconds: 5
1766 ## @param ingressController.readinessProbe.enabled Enable readinessProbe on APISIX Ingress Controller containers
1767 ## @param ingressController.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe
1768 ## @param ingressController.readinessProbe.periodSeconds Period seconds for readinessProbe
1769 ## @param ingressController.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe
1770 ## @param ingressController.readinessProbe.failureThreshold Failure threshold for readinessProbe
1771 ## @param ingressController.readinessProbe.successThreshold Success threshold for readinessProbe
1775 initialDelaySeconds: 5
1780 ## @param ingressController.startupProbe.enabled Enable startupProbe on APISIX Ingress Controller containers
1781 ## @param ingressController.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe
1782 ## @param ingressController.startupProbe.periodSeconds Period seconds for startupProbe
1783 ## @param ingressController.startupProbe.timeoutSeconds Timeout seconds for startupProbe
1784 ## @param ingressController.startupProbe.failureThreshold Failure threshold for startupProbe
1785 ## @param ingressController.startupProbe.successThreshold Success threshold for startupProbe
1789 initialDelaySeconds: 5
1794 ## @param ingressController.customLivenessProbe Custom livenessProbe that overrides the default one
1796 customLivenessProbe: {}
1797 ## @param ingressController.customReadinessProbe Custom readinessProbe that overrides the default one
1799 customReadinessProbe: {}
1800 ## @param ingressController.customStartupProbe Custom startupProbe that overrides the default one
1802 customStartupProbe: {}
1803 ## APISIX Ingress Controller resource requests and limits
1804 ## ref: http://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
1805 ## @param ingressController.resourcesPreset Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if ingressController.resources is set (ingressController.resources is recommended for production).
1807 resourcesPreset: "nano"
1808 ## @param ingressController.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
1819 ## Configure Pods Security Context
1820 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
1821 ## @param ingressController.podSecurityContext.enabled Enabled APISIX Ingress Controller pods' Security Context
1822 ## @param ingressController.podSecurityContext.fsGroupChangePolicy Set filesystem group change policy
1823 ## @param ingressController.podSecurityContext.sysctls Set kernel settings using the sysctl interface
1824 ## @param ingressController.podSecurityContext.supplementalGroups Set filesystem extra groups
1825 ## @param ingressController.podSecurityContext.fsGroup Set APISIX Ingress Controller pod's Security Context fsGroup
1829 fsGroupChangePolicy: Always
1831 supplementalGroups: []
1833 ## Configure Container Security Context
1834 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
1835 ## @param ingressController.containerSecurityContext.enabled Enabled APISIX Ingress Controller containers' Security Context
1836 ## @param ingressController.containerSecurityContext.seLinuxOptions [object,nullable] Set SELinux options in container
1837 ## @param ingressController.containerSecurityContext.runAsUser Set APISIX Ingress Controller containers' Security Context runAsUser
1838 ## @param ingressController.containerSecurityContext.runAsGroup Set APISIX Ingress Controller containers' Security Context runAsGroup
1839 ## @param ingressController.containerSecurityContext.runAsNonRoot Set APISIX Ingress Controller containers' Security Context runAsNonRoot
1840 ## @param ingressController.containerSecurityContext.privileged Set APISIX Ingress Controller containers' Security Context privileged
1841 ## @param ingressController.containerSecurityContext.readOnlyRootFilesystem Set APISIX Ingress Controller containers' Security Context runAsNonRoot
1842 ## @param ingressController.containerSecurityContext.allowPrivilegeEscalation Set APISIX Ingress Controller container's privilege escalation
1843 ## @param ingressController.containerSecurityContext.capabilities.drop Set APISIX Ingress Controller container's Security Context runAsNonRoot
1844 ## @param ingressController.containerSecurityContext.seccompProfile.type Set APISIX Ingress Controller container's Security Context seccomp profile
1846 containerSecurityContext:
1853 readOnlyRootFilesystem: true
1854 allowPrivilegeEscalation: false
1858 type: RuntimeDefault
1859 ## @param ingressController.command Override default container command (useful when using custom images)
1862 ## @param ingressController.args Override default container args (useful when using custom images)
1865 ## @param ingressController.automountServiceAccountToken Mount Service Account token in pod
1867 automountServiceAccountToken: true
1868 ## @param ingressController.hostAliases APISIX Ingress Controller pods host aliases
1869 ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
1872 ## @param ingressController.podLabels Extra labels for APISIX Ingress Controller pods
1873 ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
1876 ## @param ingressController.podAnnotations Annotations for APISIX Ingress Controller pods
1877 ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
1880 ## @param ingressController.podAffinityPreset Pod affinity preset. Ignored if `injector.affinity` is set. Allowed values: `soft` or `hard`
1881 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
1883 podAffinityPreset: ""
1884 ## @param ingressController.podAntiAffinityPreset Pod anti-affinity preset. Ignored if `injector.affinity` is set. Allowed values: `soft` or `hard`
1885 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
1887 podAntiAffinityPreset: soft
1888 ## Pod Disruption Budget configuration
1889 ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb
1890 ## @param ingressController.pdb.create Enable/disable a Pod Disruption Budget creation
1891 ## @param ingressController.pdb.minAvailable Minimum number/percentage of pods that should remain scheduled
1892 ## @param ingressController.pdb.maxUnavailable Maximum number/percentage of pods that may be made unavailable
1898 ## Node injector.affinity preset
1899 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
1902 ## @param ingressController.nodeAffinityPreset.type Node affinity preset type. Ignored if `injector.affinity` is set. Allowed values: `soft` or `hard`
1905 ## @param ingressController.nodeAffinityPreset.key Node label key to match. Ignored if `injector.affinity` is set
1908 ## @param ingressController.nodeAffinityPreset.values Node label values to match. Ignored if `injector.affinity` is set
1915 ## @param ingressController.affinity Affinity for APISIX Ingress Controller pods assignment
1916 ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
1917 ## NOTE: `injector.podAffinityPreset`, `injector.podAntiAffinityPreset`, and `injector.nodeAffinityPreset` will be ignored when it's set
1920 ## @param ingressController.nodeSelector Node labels for APISIX Ingress Controller pods assignment
1921 ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
1924 ## @param ingressController.tolerations Tolerations for APISIX Ingress Controller pods assignment
1925 ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
1928 ## @param ingressController.updateStrategy.type APISIX Ingress Controller statefulset strategy type
1929 ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies
1933 ## Can be set to RollingUpdate or OnDelete
1936 ## @param ingressController.priorityClassName APISIX Ingress Controller pods' priorityClassName
1938 priorityClassName: ""
1939 ## @param ingressController.topologySpreadConstraints Topology Spread Constraints for pod assignment spread across your cluster among failure-domains. Evaluated as a template
1940 ## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods
1942 topologySpreadConstraints: []
1943 ## @param ingressController.schedulerName Name of the k8s scheduler (other than default) for APISIX Ingress Controller pods
1944 ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
1947 ## @param ingressController.terminationGracePeriodSeconds Seconds Redmine pod needs to terminate gracefully
1948 ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods
1950 terminationGracePeriodSeconds: ""
1951 ## @param ingressController.lifecycleHooks for the APISIX Ingress Controller container(s) to automate configuration before or after startup
1954 ## @param ingressController.extraEnvVars Array with extra environment variables to add to APISIX Ingress Controller nodes
1961 ## @param ingressController.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for APISIX Ingress Controller nodes
1964 ## @param ingressController.extraEnvVarsSecret Name of existing Secret containing extra env vars for APISIX Ingress Controller nodes
1966 extraEnvVarsSecret: ""
1967 ## @param ingressController.extraVolumes Optionally specify extra list of additional volumes for the APISIX Ingress Controller pod(s)
1970 ## @param ingressController.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the APISIX Ingress Controller container(s)
1972 extraVolumeMounts: []
1973 ## @param ingressController.sidecars Add additional sidecar containers to the APISIX Ingress Controller pod(s)
1976 ## - name: your-image-name
1977 ## image: your-image
1978 ## imagePullPolicy: Always
1981 ## containerPort: 1234
1984 ## @param ingressController.initContainers Add additional init containers to the APISIX Ingress Controller pod(s)
1985 ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
1988 ## - name: your-image-name
1989 ## image: your-image
1990 ## imagePullPolicy: Always
1991 ## command: ['sh', '-c', 'echo "hello world"']
1994 ## @param ingressController.ingressClass.create Specifies whether a IngressClass should be created
1995 ## @param ingressController.ingressClass.name IngressClass that will be be used to implement the APISIX Ingress Controller Ingress
1996 ## @param ingressController.ingressClass.annotations Additional annotations for the APISIX Ingress Controller IngressClass
2002 ## @param ingressController.defaultConfig [string] APISIX Ingress Controller configuration (evaluated as a template)
2007 log_output: "stderr"
2008 {{- if .Values.ingressController.tls.enabled }}
2009 https_listen: ":{{ .Values.ingressController.containerPorts.https }}"
2010 cert_file: "/iamguarded/certs/{{ .Values.ingressController.tls.certFilename }}"
2011 key_file: "/iamguarded/certs/{{ .Values.ingressController.tls.certKeyFilename }}"
2013 http_listen: ":{{ .Values.ingressController.containerPorts.http }}"
2014 ingress_publish_service: "{{ include "common.names.namespace" . }}/{{ ternary (include "apisix.data-plane.fullname" .) (include "apisix.control-plane.fullname" .) .Values.dataPlane.enabled }}"
2015 enable_profiling: true
2016 apisix-resource-sync-interval: 1h
2019 resync_interval: "6h"
2020 election_id: "{{ include "apisix.ingress-controller.fullname" . }}-leader"
2021 ingress_class: {{ .Values.ingressController.ingressClass.name | quote }}
2022 ingress_version: "networking/v1"
2023 watch_endpointslices: false
2024 apisix_route_version: "apisix.apache.org/v2"
2025 enable_gateway_api: false
2026 apisix_version: "apisix.apache.org/v2"
2027 plugin_metadata_cm: ""
2029 admin_api_version: "v3"
2030 default_cluster_base_url: {{ ternary "https" "http" .Values.controlPlane.tls.enabled }}://{{ include "apisix.control-plane.fullname" . }}:{{ .Values.controlPlane.service.ports.adminAPI }}/apisix/admin
2031 default_cluster_admin_key: "{{ print "{{APISIX_ADMIN_API_TOKEN}}" }}"
2032 default_cluster_name: "default"
2033 ## @param ingressController.extraConfig Extra configuration parameters for APISIX Ingress Controller
2036 ## @param ingressController.existingConfigMap name of a ConfigMap with existing configuration for the APISIX Ingress Controller
2038 existingConfigMap: ""
2039 ## @param ingressController.extraConfigExistingConfigMap name of a ConfigMap with existing configuration for the APISIX Ingress Controller
2041 extraConfigExistingConfigMap: ""
2043 ## @param ingressController.tls.enabled Enable TLS transport in APISIX Ingress Controller
2046 ## @param ingressController.tls.autoGenerated Auto-generate self-signed certificates
2049 ## @param ingressController.tls.existingSecret Name of a secret containing the certificates
2052 ## @param ingressController.tls.certFilename Path of the certificate file when mounted as a secret
2054 certFilename: tls.crt
2055 ## @param ingressController.tls.certKeyFilename Path of the certificate key file when mounted as a secret
2057 certKeyFilename: tls.key
2058 ## @param ingressController.tls.certCAFilename Path of the certificate CA file when mounted as a secret
2060 certCAFilename: ca.crt
2061 ## @param ingressController.tls.cert Content of the certificate to be added to the secret
2064 ## @param ingressController.tls.key Content of the certificate key to be added to the secret
2067 ## @param ingressController.tls.ca Content of the certificate CA to be added to the secret
2070 ## @section APISIX Ingress Controller Traffic Exposure Parameters
2073 ## @param ingressController.service.type APISIX Ingress Controller service type
2076 ## @param ingressController.service.ports.http APISIX Ingress Controller service HTTP port
2077 ## @param ingressController.service.ports.https APISIX Ingress Controller service HTTPS port
2082 ## Node ports to expose
2083 ## @param ingressController.service.nodePorts.http Node port for HTTP
2084 ## @param ingressController.service.nodePorts.https Node port for HTTPS
2085 ## NOTE: choose port between <30000-32767>
2090 ## @param ingressController.service.clusterIP APISIX Ingress Controller service Cluster IP
2095 ## @param ingressController.service.loadBalancerIP APISIX Ingress Controller service Load Balancer IP
2096 ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer
2099 ## @param ingressController.service.loadBalancerSourceRanges APISIX Ingress Controller service Load Balancer sources
2100 ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service
2102 ## loadBalancerSourceRanges:
2105 loadBalancerSourceRanges: []
2106 ## @param ingressController.service.externalIPs APISIX Ingress Controller service External IPs
2107 ## https://kubernetes.io/docs/concepts/services-networking/service/#external-ips
2114 ## @param ingressController.service.externalTrafficPolicy APISIX Ingress Controller service external traffic policy
2115 ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-web-source-ip
2117 externalTrafficPolicy: Cluster
2118 ## @param ingressController.service.annotations Additional custom annotations for APISIX Ingress Controller service
2121 ## @param ingressController.service.extraPorts Extra ports to expose in APISIX Ingress Controller service (normally used with the `sidecars` value)
2124 ## @param ingressController.service.sessionAffinity Control where web requests go, to the same pod or round-robin
2125 ## Values: WebIP or None
2126 ## ref: https://kubernetes.io/docs/concepts/services-networking/service/
2128 sessionAffinity: None
2129 ## @param ingressController.service.sessionAffinityConfig Additional settings for the sessionAffinity
2130 ## sessionAffinityConfig:
2132 ## timeoutSeconds: 300
2134 sessionAffinityConfig: {}
2136 ## Ref: https://kubernetes.io/docs/concepts/services-networking/network-policies/
2139 ## @param ingressController.networkPolicy.enabled Specifies whether a NetworkPolicy should be created
2142 ## @param ingressController.networkPolicy.allowExternal Don't require server label for connections
2143 ## The Policy model to apply. When set to false, only pods with the correct
2144 ## server label will have network access to the ports server is listening
2145 ## on. When true, server will accept connections from any source
2146 ## (with the correct destination port).
2149 ## @param ingressController.networkPolicy.allowExternalEgress Allow the pod to access any range of port and all destinations.
2151 allowExternalEgress: true
2152 ## @param ingressController.networkPolicy.kubeAPIServerPorts [array] List of possible endpoints to kube-apiserver (limit to your cluster settings to increase security)
2154 kubeAPIServerPorts: [443, 6443, 8443]
2155 ## @param ingressController.networkPolicy.extraIngress [array] Add extra ingress rules to the NetworkPolicy
2165 ## - matchExpressions:
2171 ## @param ingressController.networkPolicy.extraEgress [array] Add extra ingress rules to the NetworkPolicy (ignored if allowExternalEgress=true)
2181 ## - matchExpressions:
2188 ## @param ingressController.networkPolicy.ingressNSMatchLabels [object] Labels to match to allow traffic from other namespaces
2189 ## @param ingressController.networkPolicy.ingressNSPodMatchLabels [object] Pod labels to match to allow traffic from other namespaces
2191 ingressNSMatchLabels: {}
2192 ingressNSPodMatchLabels: {}
2193 ## ref: http://kubernetes.io/docs/concepts/services-networking/ingress/
2196 ## @param ingressController.ingress.enabled Enable ingress record generation for APISIX Ingress Controller
2199 ## @param ingressController.ingress.pathType Ingress path type
2201 pathType: ImplementationSpecific
2202 ## @param ingressController.ingress.apiVersion Force Ingress API version (automatically detected if not set)
2205 ## @param ingressController.ingress.hostname Default host for the ingress record
2207 hostname: apisix-ingress-controller.local
2208 ## @param ingressController.ingress.ingressClassName IngressClass that will be be used to implement the Ingress (Kubernetes 1.18+)
2209 ## This is supported in Kubernetes 1.18+ and required if you have more than one IngressClass marked as the default for your cluster .
2210 ## ref: https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/
2212 ingressClassName: ""
2213 ## @param ingressController.ingress.path Default path for the ingress record
2214 ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers
2217 ## @param ingressController.ingress.annotations Additional annotations for the Ingress resource. To enable certificate autogeneration, place here your cert-manager annotations.
2218 ## Use this parameter to set the required annotations for cert-manager, see
2219 ## ref: https://cert-manager.io/docs/usage/ingress/#supported-annotations
2222 ## kubernetes.io/ingress.class: nginx
2223 ## cert-manager.io/cluster-issuer: cluster-issuer-name
2226 ## @param ingressController.ingress.tls Enable TLS configuration for the host defined at `ingressController.ingress.hostname` parameter
2227 ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}`
2229 ## - Use the `ingressController.ingress.secrets` parameter to create this TLS secret
2230 ## - Rely on cert-manager to create it by setting the corresponding annotations
2231 ## - Rely on Helm to create self-signed certificates by setting `ingressController.ingress.selfSigned=true`
2234 ## @param ingressController.ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm
2237 ## @param ingressController.ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record
2240 ## - name: apisix.local
2244 ## @param ingressController.ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host
2249 ## serviceName: ssl-redirect
2250 ## servicePort: use-annotation
2253 ## @param ingressController.ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record
2254 ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
2259 ## secretName: apisix.local-tls
2262 ## @param ingressController.ingress.secrets Custom TLS certificates as secrets
2263 ## NOTE: 'key' and 'certificate' are expected in PEM format
2264 ## NOTE: 'name' should line up with a 'secretName' set further up
2265 ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates
2266 ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days
2267 ## It is also possible to create and manage the certificates outside of this helm chart
2268 ## Please see README.md for more information
2271 ## - name: apisix.local-tls
2273 ## -----BEGIN RSA PRIVATE KEY-----
2275 ## -----END RSA PRIVATE KEY-----
2277 ## -----BEGIN CERTIFICATE-----
2279 ## -----END CERTIFICATE-----
2282 ## @param ingressController.ingress.extraRules Additional rules to be covered with this ingress record
2283 ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-rules
2286 ## - host: example.local
2291 ## name: example-svc
2296 ## @section APISIX Ingress Controller Autoscaling configuration
2297 ## ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
2301 ## @param ingressController.autoscaling.vpa.enabled Enable VPA
2304 ## @param ingressController.autoscaling.vpa.annotations Annotations for VPA resource
2307 ## @param ingressController.autoscaling.vpa.controlledResources VPA List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory
2309 controlledResources: []
2310 ## @param ingressController.autoscaling.vpa.maxAllowed VPA Max allowed resources for the pod
2314 ## @param ingressController.autoscaling.vpa.minAllowed VPA Min allowed resources for the pod
2319 ## @param ingressController.autoscaling.vpa.updatePolicy.updateMode Autoscaling update policy Specifies whether recommended updates are applied when a Pod is started and whether recommended updates are applied during the life of a Pod
2320 ## Possible values are "Off", "Initial", "Recreate", and "Auto".
2324 ## @param ingressController.autoscaling.hpa.enabled Enable HPA for APISIX Ingress Controller
2327 ## @param ingressController.autoscaling.hpa.minReplicas Minimum number of APISIX Ingress Controller replicas
2330 ## @param ingressController.autoscaling.hpa.maxReplicas Maximum number of APISIX Ingress Controller replicas
2333 ## @param ingressController.autoscaling.hpa.targetCPU Target CPU utilization percentage
2336 ## @param ingressController.autoscaling.hpa.targetMemory Target Memory utilization percentage
2339 ## @section APISIX Ingress Controller RBAC Parameters
2342 ## RBAC configuration
2345 ## @param ingressController.rbac.create Specifies whether RBAC resources should be created
2348 ## @param ingressController.rbac.rules Custom RBAC rules to set
2360 ## ServiceAccount configuration
2363 ## @param ingressController.serviceAccount.create Specifies whether a ServiceAccount should be created
2366 ## @param ingressController.serviceAccount.name The name of the ServiceAccount to use.
2367 ## If not set and create is true, a name is generated using the common.names.fullname template
2370 ## @param ingressController.serviceAccount.annotations Additional Service Account annotations (evaluated as a template)
2373 ## @param ingressController.serviceAccount.automountServiceAccountToken Automount service account token for the server service account
2375 automountServiceAccountToken: false
2376 ## Prometheus metrics
2379 ## @param ingressController.metrics.enabled Enable the export of Prometheus metrics
2382 ## @param ingressController.metrics.annotations [object] Annotations for the APISIX Ingress Controller service in order to scrape metrics
2384 prometheus.io/scrape: "true"
2385 prometheus.io/port: "{{ .Values.ingressController.service.ports.http }}"
2386 ## Prometheus Operator ServiceMonitor configuration
2389 ## @param ingressController.metrics.serviceMonitor.enabled if `true`, creates a Prometheus Operator ServiceMonitor (also requires `metrics.enabled` to be `true`)
2392 ## @param ingressController.metrics.serviceMonitor.namespace Namespace in which Prometheus is running
2395 ## @param ingressController.metrics.serviceMonitor.annotations Additional custom annotations for the ServiceMonitor
2398 ## @param ingressController.metrics.serviceMonitor.labels Extra labels for the ServiceMonitor
2401 ## @param ingressController.metrics.serviceMonitor.jobLabel The name of the label on the target service to use as the job name in Prometheus
2404 ## @param ingressController.metrics.serviceMonitor.honorLabels honorLabels chooses the metric's labels on collisions with target labels
2407 ## @param ingressController.metrics.serviceMonitor.interval Interval at which metrics should be scraped.
2408 ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
2413 ## @param ingressController.metrics.serviceMonitor.scrapeTimeout Timeout after which the scrape is ended
2414 ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
2416 ## scrapeTimeout: 10s
2419 ## @param ingressController.metrics.serviceMonitor.metricRelabelings Specify additional relabeling of metrics
2421 metricRelabelings: []
2422 ## @param ingressController.metrics.serviceMonitor.relabelings Specify general relabeling
2425 ## @param ingressController.metrics.serviceMonitor.selector Prometheus instance selector labels
2427 ## prometheus: my-prometheus
2430## @section Init containers parameters
2433 ## @param waitContainer.image.registry [default: REGISTRY_NAME] Init container wait-container image registry
2434 ## @param waitContainer.image.repository [default: REPOSITORY_NAME/os-shell] Init container wait-container image name
2435 ## @skip waitContainer.image.tag Init container wait-container image tag
2436 ## @param waitContainer.image.digest Init container wait-container image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag
2440 repository: chainguard-private/os-shell-iamguarded
2443 ## @param waitContainer.image.pullPolicy Init container wait-container image pull policy
2445 pullPolicy: IfNotPresent
2446 ## @param waitContainer.image.pullSecrets [array] Specify docker-registry secret names as an array
2447 ## Optionally specify an array of imagePullSecrets.
2448 ## Secrets must be manually created in the namespace.
2449 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
2452 ## - myRegistryKeySecretName
2455 ## Configure Container Security Context
2456 ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
2457 ## @param waitContainer.containerSecurityContext.enabled Enabled APISIX Ingress Controller containers' Security Context
2458 ## @param waitContainer.containerSecurityContext.seLinuxOptions [object,nullable] Set SELinux options in container
2459 ## @param waitContainer.containerSecurityContext.runAsUser Set APISIX Ingress Controller containers' Security Context runAsUser
2460 ## @param waitContainer.containerSecurityContext.runAsGroup Set APISIX Ingress Controller containers' Security Context runAsGroup
2461 ## @param waitContainer.containerSecurityContext.runAsNonRoot Set APISIX Ingress Controller containers' Security Context runAsNonRoot
2462 ## @param waitContainer.containerSecurityContext.privileged Set APISIX Ingress Controller containers' Security Context privileged
2463 ## @param waitContainer.containerSecurityContext.readOnlyRootFilesystem Set APISIX Ingress Controller containers' Security Context readOnlyRootFilesystem
2464 ## @param waitContainer.containerSecurityContext.allowPrivilegeEscalation Set APISIX Ingress Controller containers' Security Context allowPrivilegeEscalation
2465 ## @param waitContainer.containerSecurityContext.capabilities.drop Set APISIX Ingress Controller containers' Security Context capabilities.drop
2466 ## @param waitContainer.containerSecurityContext.seccompProfile.type Set APISIX Ingress Controller containers' Security Context seccompProfile.type
2468 containerSecurityContext:
2475 readOnlyRootFilesystem: true
2476 allowPrivilegeEscalation: false
2480 type: RuntimeDefault
2481## @section External etcd settings
2484 ## @param externalEtcd.servers List of hostnames of the external etcd
2487 ## @param externalEtcd.port Port of the external etcd instance
2490 ## @param externalEtcd.user User of the external etcd instance
2493 ## @param externalEtcd.password Password of the external etcd instance
2496 ## @param externalEtcd.existingSecret Name of a secret containing the external etcd password
2499 ## @param externalEtcd.existingSecretPasswordKey Key inside the secret containing the external etcd password
2501 existingSecretPasswordKey: "etcd-root-password"
2502 ## @param externalEtcd.secureTransport Use TLS for client-to-server communications
2504 secureTransport: false
2505## @section etcd sub-chart parameters
2508 ## @param etcd.enabled Deploy etcd sub-chart
2511 ## @param etcd.replicaCount Number of etcd replicas
2514 ## @param etcd.containerPorts.client Container port for etcd
2518 ## @param etcd.auth.rbac.create Switch to enable RBAC authentication
2519 ## @param etcd.auth.rbac.rootPassword etcd root password
2520 ## @param etcd.auth.client.secureTransport use TLS for client-to-server communications
2524 ## Currently the data_plane is not working with etcd credentials enabled. This should be
2525 ## changed when this is fixed by APISIX
2529 secureTransport: false
2530 ## @param etcd.resourcesPreset Set container resources according to one common preset (allowed values: none, nano, small, medium, large, xlarge, 2xlarge). This is ignored if resources is set (resources is recommended for production).
2532 resourcesPreset: "micro"
2533 ## @param etcd.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
2546 repository: chainguard-private/etcd-iamguarded