Overview
Cluster Advanced Settings allow you to fine-tune infrastructure-level parameters for your Qovery-managed Kubernetes clusters. These settings provide granular control over networking, logging, security, resource allocation, and cloud provider-specific features.Cloud Provider Availability
Settings are tagged with their supported cloud providers:AWS
GCP
Azure
Scaleway
Quick Reference
Settings by Category
Logs (7 settings)
Logs (7 settings)
| Setting | Cloud Providers | Default | Description |
|---|---|---|---|
aws.cloudwatch.eks_logs_retention_days | AWS | 90 | CloudWatch EKS logs retention |
aws.vpc.enable_s3_flow_logs | AWS | false | Enable VPC flow logs to S3 |
aws.vpc.flow_logs_retention_days | AWS | 365 | VPC flow logs retention days |
loki.log_retention_in_week | All | 12 | Kubernetes pods logs retention |
gcp.vpc.enable_flow_logs | GCP | false | Enable VPC flow logs |
gcp.vpc.flow_logs_sampling | GCP | 0.0 | VPC flow logs sampling rate |
object_storage.enable_logging | AWS, GCP, Azure | false | Enable bucket logging |
NGINX Ingress (17 settings)
NGINX Ingress (17 settings)
| Setting | Cloud Providers | Default | Description |
|---|---|---|---|
nginx.vcpu.request_in_milli_cpu | All | 200 | NGINX CPU request (millicores) |
nginx.vcpu.limit_in_milli_cpu | All | 700 | NGINX CPU limit (millicores) |
nginx.memory.request_in_mib | All | 768 | NGINX memory request (MiB) |
nginx.memory.limit_in_mib | All | 768 | NGINX memory limit (MiB) |
nginx.hpa.cpu_utilization_percentage_threshold | All | 50 | HPA CPU threshold (%) |
nginx.hpa.min_number_instances | All | 2 | Minimum NGINX replicas |
nginx.hpa.max_number_instances | All | 25 | Maximum NGINX replicas |
nginx.controller.enable_client_ip | All | false | Enable real IP module |
nginx.controller.enable_compression | All | true | Enable Brotli compression |
nginx.controller.use_forwarded_headers | All | false | Use X-Forwarded-For headers |
nginx.controller.compute_full_forwarded_for | All | false | Append to X-Forwarded-For |
nginx.controller.log_format_upstream | All | null | Custom log format |
nginx.controller.log_format_escaping | All | Default | Log format escaping |
nginx.controller.http_snippet | All | null | HTTP-level NGINX config |
nginx.controller.server_snippet | All | null | Server-level NGINX config |
nginx.controller.limit_request_status_code | All | null | Rate limit HTTP status |
nginx.controller.custom_http_errors | All | null | Custom error pages |
Load Balancer (9 settings)
Load Balancer (9 settings)
| Setting | Cloud Providers | Default | Description |
|---|---|---|---|
aws.eks.enable_alb_controller | AWS | true | Enable AWS ALB controller |
aws.eks.alb_controller.vpa.vcpu.min_in_milli_cpu | AWS | 250 | ALB controller min CPU |
aws.eks.alb_controller.vpa.vcpu.max_in_milli_cpu | AWS | 250 | ALB controller max CPU |
aws.eks.alb_controller.vpa.memory.min_in_mib | AWS | 128 | ALB controller min memory |
aws.eks.alb_controller.vpa.memory.max_in_mib | AWS | 128 | ALB controller max memory |
load_balancer.size | Scaleway | lb-s | Load balancer size |
nginx.default_backend.enabled | All | false | Enable default backend |
nginx.default_backend.image_repository | All | null | Default backend image |
nginx.default_backend.image_tag | All | null | Default backend image tag |
Database Access Control (12 settings)
Database Access Control (12 settings)
| Setting | Cloud Providers | Default | Description |
|---|---|---|---|
database.postgresql.deny_any_access | AWS | false | Block all PostgreSQL access |
database.postgresql.allowed_cidrs | AWS | 0.0.0.0/0 | PostgreSQL allowed CIDRs |
database.mysql.deny_any_access | AWS | false | Block all MySQL access |
database.mysql.allowed_cidrs | AWS | 0.0.0.0/0 | MySQL allowed CIDRs |
database.mongodb.deny_any_access | AWS | false | Block all MongoDB access |
database.mongodb.allowed_cidrs | AWS | 0.0.0.0/0 | MongoDB allowed CIDRs |
database.redis.deny_any_access | AWS | false | Block all Redis access |
database.redis.allowed_cidrs | AWS | 0.0.0.0/0 | Redis allowed CIDRs |
Image Registry (3 settings)
Image Registry (3 settings)
| Setting | Cloud Providers | Default | Description |
|---|---|---|---|
registry.image_retention_time | AWS | 31536000 | Image retention (seconds) |
registry.mirroring_mode | AWS | Service | Image mirroring mode |
cloud_provider.container_registry.tags | All | Registry tags |
IAM & Security (6 settings)
IAM & Security (6 settings)
| Setting | Cloud Providers | Default | Description |
|---|---|---|---|
aws.iam.enable_admin_group_sync | AWS | true | Enable admin group sync |
aws.iam.admin_group | AWS | Admins | IAM admin group name |
aws.iam.enable_sso | AWS | false | Enable SSO support |
aws.iam.sso_role_arn | AWS | "" | SSO role ARN |
aws.eks.encrypt_secrets_kms_key_arn | AWS | null | KMS key for secrets encryption |
k8s.api.allowed_public_access_cidrs | AWS, GCP, Azure | [] | Kubernetes API CIDR whitelist |
Service Resources (2 settings)
Service Resources (2 settings)
| Setting | Cloud Providers | Default | Description |
|---|---|---|---|
allow_service_cpu_overcommit | All | false | Allow CPU overcommit |
allow_service_ram_overcommit | All | false | Allow memory overcommit |
Miscellaneous (5 settings)
Miscellaneous (5 settings)
| Setting | Cloud Providers | Default | Description |
|---|---|---|---|
dns.coredns.extra_config | AWS, Scaleway, Azure | null | CoreDNS custom config |
aws.eks.ec2.metadata_imds | AWS | required | IMDS version |
aws.eks.ec2.ami | AWS | AmazonLinux2023 | EC2 AMI type |
qovery.static_ip_mode | AWS, GCP | false | Static IP for control plane |
storageclass.fast_ssd | All | varies | Fast SSD storage class |
Configuring Cluster Advanced Settings
Via Qovery API
Advanced settings are configured using the Qovery API:Via Terraform
Use the Qovery Terraform Provider to manage cluster advanced settings as code:Detailed Settings Reference
Logs
aws.cloudwatch.eks_logs_retention_days
aws.cloudwatch.eks_logs_retention_days
90Maximum retention days in CloudWatch for EKS logs.Valid values: 0, 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 2192, 2557, 2922, 3288, 3653Example:aws.vpc.enable_s3_flow_logs
aws.vpc.enable_s3_flow_logs
falseEnable flow logs on the cluster VPC and store them in an S3 bucket.Example:aws.vpc.flow_logs_retention_days
aws.vpc.flow_logs_retention_days
365Set the number of retention days for flow logs. Set to 0 for unlimited retention.Example:loki.log_retention_in_week
loki.log_retention_in_week
12 (84 days)Maximum Kubernetes pods (containers/applications/jobs/cronjobs) retention logs in weeks.Example:gcp.vpc.enable_flow_logs
gcp.vpc.enable_flow_logs
falseEnable VPC flow logs on the cluster VPC (on each VPC subnetwork). See GCP VPC logs flow documentation.Example:gcp.vpc.flow_logs_sampling
gcp.vpc.flow_logs_sampling
0.0Set VPC logs flow sampling percentage. Value should be within 0.0 (no sampling) to 1.0 (all logs) range.Example:DNS
dns.coredns.extra_config
dns.coredns.extra_config
nullAdditional configuration to add to CoreDNS. This can be used to customize DNS resolution rules on the cluster.Example:Image Registry
registry.image_retention_time
registry.image_retention_time
31536000 (1 year)Allows you to specify an amount in seconds after which images in the default registry are deleted.registry.mirroring_mode
registry.mirroring_mode
ServiceAllows you to specify the image mirroring mode to be used for each image deployed on this cluster.Valid values: Service, ClusterExample:cloud_provider.container_registry.tags
cloud_provider.container_registry.tags
Network - Load Balancer
aws.eks.enable_alb_controller
aws.eks.enable_alb_controller
trueEnable the AWS ALB controller to manage the load balancer for the cluster.Requirements for custom VPCs (Qovery Managed VPC does not require these):- On public subnets: add label
kubernetes.io/role/elb=1 - On private subnets: add label
kubernetes.io/role/internal-elb=1 - On all subnets: add label
kubernetes.io/cluster/<cluster-name>=shared
aws.eks.alb_controller.vpa.vcpu.min_in_milli_cpu
aws.eks.alb_controller.vpa.vcpu.min_in_milli_cpu
250Sets AWS ALB controller VPA (vertical pod autoscaling) vCPU minimum value in milli CPU.Example:aws.eks.alb_controller.vpa.vcpu.max_in_milli_cpu
aws.eks.alb_controller.vpa.vcpu.max_in_milli_cpu
250Sets AWS ALB controller VPA (vertical pod autoscaling) vCPU maximum value in milli CPU.Example:aws.eks.alb_controller.vpa.memory.min_in_mib
aws.eks.alb_controller.vpa.memory.min_in_mib
128Sets AWS ALB controller VPA (vertical pod autoscaling) memory minimum value in mebibyte.Example:aws.eks.alb_controller.vpa.memory.max_in_mib
aws.eks.alb_controller.vpa.memory.max_in_mib
128Sets AWS ALB controller VPA (vertical pod autoscaling) memory maximum value in mebibyte.Example:load_balancer.size
load_balancer.size
lb-sAllows you to specify the load balancer size in front of your cluster.Valid values:lb-s: 200 Mbpslb-gp-m: 500 Mbpslb-gp-l: 1 Gbpslb-gp-xl: 4 Gbps
Network - NGINX Ingress
NGINX Resources
NGINX Resources
| Setting | Type | Default | Description |
|---|---|---|---|
nginx.vcpu.request_in_milli_cpu | Integer | 200 | CPU request (millicores) |
nginx.vcpu.limit_in_milli_cpu | Integer | 700 | CPU limit (millicores) |
nginx.memory.request_in_mib | Integer | 768 | Memory request (MiB) |
nginx.memory.limit_in_mib | Integer | 768 | Memory limit (MiB) |
NGINX Horizontal Pod Autoscaling (HPA)
NGINX Horizontal Pod Autoscaling (HPA)
| Setting | Type | Default | Description |
|---|---|---|---|
nginx.hpa.cpu_utilization_percentage_threshold | Integer | 50 | CPU threshold (%) |
nginx.hpa.min_number_instances | Integer | 2 | Minimum replicas |
nginx.hpa.max_number_instances | Integer | 25 | Maximum replicas |
nginx.controller.enable_client_ip
nginx.controller.enable_client_ip
falseEnables ngx_http_realip_module module to get the real client IP address.Example:nginx.controller.enable_compression
nginx.controller.enable_compression
trueEnables compression (Brotli) for HTTP responses. When disabled, content will not be compressed, which may increase bandwidth usage but reduce CPU load.Example:nginx.controller.use_forwarded_headers
nginx.controller.use_forwarded_headers
falsePasses incoming X-Forwarded-For header upstream. See documentation.Example:nginx.controller.compute_full_forwarded_for
nginx.controller.compute_full_forwarded_for
falseAppend the remote address to the X-Forwarded-For header instead of replacing it. See documentation.Example:nginx.controller.log_format_upstream
nginx.controller.log_format_upstream
nginx.controller.log_format_escaping
nginx.controller.log_format_escaping
DefaultAllows to customize NGINX log-format-escaping setting.Valid values: Default, JSON, NoneExample:nginx.controller.http_snippet
nginx.controller.http_snippet
nullAllows to customize NGINX http-snippet configuration.Used for cluster-level NGINX configuration that applies to all services.Example:nginx.controller.server_snippet
nginx.controller.server_snippet
nullAllows to customize NGINX server-snippet configuration.Used for server-level NGINX configuration.Example:nginx.controller.limit_request_status_code
nginx.controller.limit_request_status_code
null (defaults to 503)Allows to customize NGINX limit-req-status-code.Commonly set to 429 (Too Many Requests) for rate limiting.Example:nginx.controller.custom_http_errors
nginx.controller.custom_http_errors
NGINX Default Backend
NGINX Default Backend
| Setting | Type | Default | Description |
|---|---|---|---|
nginx.default_backend.enabled | Boolean | false | Enable default backend |
nginx.default_backend.image_repository | String | null | Docker image repository |
nginx.default_backend.image_tag | String | null | Docker image tag |
Network - Database Access Control
PostgreSQL Access Control
PostgreSQL Access Control
| Setting | Type | Default | Description |
|---|---|---|---|
database.postgresql.deny_any_access | Boolean | false | Deny all PostgreSQL access |
database.postgresql.allowed_cidrs | Array | [“0.0.0.0/0”] | Allowed CIDR ranges |
MySQL Access Control
MySQL Access Control
| Setting | Type | Default | Description |
|---|---|---|---|
database.mysql.deny_any_access | Boolean | false | Deny all MySQL access |
database.mysql.allowed_cidrs | Array | [“0.0.0.0/0”] | Allowed CIDR ranges |
MongoDB Access Control
MongoDB Access Control
| Setting | Type | Default | Description |
|---|---|---|---|
database.mongodb.deny_any_access | Boolean | false | Deny all MongoDB access |
database.mongodb.allowed_cidrs | Array | [“0.0.0.0/0”] | Allowed CIDR ranges |
Redis Access Control
Redis Access Control
| Setting | Type | Default | Description |
|---|---|---|---|
database.redis.deny_any_access | Boolean | false | Deny all Redis access |
database.redis.allowed_cidrs | Array | [“0.0.0.0/0”] | Allowed CIDR ranges |
Service Resources
allow_service_cpu_overcommit
allow_service_cpu_overcommit
falseAuthorize CPU overcommit (limit > request) for services deployed within this cluster.Once enabled, you can update the service advanced setting resources.override.limit.cpu_in_mib.Example:allow_service_ram_overcommit
allow_service_ram_overcommit
falseAuthorize memory overcommit (limit > request) for services deployed within this cluster.Once enabled, you can update the service advanced setting resources.override.limit.ram_in_mib.Example:IAM & Security
AWS IAM Admin Group
AWS IAM Admin Group
| Setting | Type | Default | Description |
|---|---|---|---|
aws.iam.enable_admin_group_sync | Boolean | true | Enable IAM admin group sync |
aws.iam.admin_group | String | Admins | IAM admin group name |
AWS IAM SSO
AWS IAM SSO
| Setting | Type | Default | Description |
|---|---|---|---|
aws.iam.enable_sso | Boolean | false | Enable SSO support |
aws.iam.sso_role_arn | String | "" | SSO role ARN |
aws.eks.encrypt_secrets_kms_key_arn
aws.eks.encrypt_secrets_kms_key_arn
nullAllows you to activate KMS encryption of your Kubernetes secrets. Specify the key ARN of your AWS KMS key.Example:k8s.api.allowed_public_access_cidrs
k8s.api.allowed_public_access_cidrs
[]Contains additional CIDRs that should be whitelisted to access the Kubernetes API.qovery.static_ip_mode should be set to true to make this setting effective.Miscellaneous
aws.eks.ec2.metadata_imds
aws.eks.ec2.metadata_imds
requiredSpecify the IMDS version you want to use.Valid values:required: IMDS v2 onlyoptional: IMDS v1 and v2
aws.eks.ec2.ami
aws.eks.ec2.ami
AmazonLinux2023Specify the AMI you want to use for EKS nodes.Valid values:AmazonLinux2: Deprecated, not working after Kubernetes 1.32AmazonLinux2023: Default Amazon AMI (recommended)Bottlerocket: Focuses on security and maintainability
qovery.static_ip_mode
qovery.static_ip_mode
falseEnable the static IP mode for the Qovery control plane and automatically:- Activate the private endpoint on the Kubernetes API
- Add the Qovery IP to the CIDR whitelist
storageclass.fast_ssd
storageclass.fast_ssd
Best Practices
Start with Defaults
Start with Defaults
Test in Non-Production First
Test in Non-Production First
Document Your Changes
Document Your Changes
Monitor After Changes
Monitor After Changes
Use Infrastructure as Code
Use Infrastructure as Code
Security First - Database Access
Security First - Database Access
- Always configure
allowed_cidrsfor database access instead of allowing0.0.0.0/0 - Use VPC CIDR ranges for internal database access
- Enable database access logs with
object_storage.enable_logging
Security First - Network
Security First - Network
- Use
k8s.api.allowed_public_access_cidrsto restrict Kubernetes API access - Enable
nginx.controller.enable_client_ipfor accurate IP-based security - Configure appropriate rate limiting with NGINX snippets
- Enable VPC flow logs for audit trails
Cost Optimization
Cost Optimization
- Set appropriate log retention periods to balance cost and compliance
- Use image retention policies to clean up old container images
- Configure NGINX HPA based on actual traffic patterns
- Monitor VPC flow logs sampling to avoid excessive storage costs
High Availability
High Availability
- Set
nginx.hpa.min_number_instancesto at least 2 (default) - Configure appropriate NGINX resource limits for your traffic
- Enable ALB controller on AWS for better load distribution
- Use proper load balancer sizing on Scaleway
Observability
Observability
- Enable VPC flow logs in production for network troubleshooting
- Configure appropriate log retention for compliance requirements
- Use custom NGINX log formats for better insights
- Enable object storage logging for audit trails
Troubleshooting
Cluster Not Starting After Settings Change
Cluster Not Starting After Settings Change
- Invalid NGINX snippet syntax
- Incompatible resource allocations
- Incorrect CIDR formatting in allowed_cidrs
- Missing required settings (e.g., admin_group when sync enabled)
- Check cluster deployment logs for specific error messages
- Verify NGINX snippet syntax using NGINX documentation
- Validate CIDR notation (e.g.,
10.0.0.0/16) - Revert to default settings and apply changes incrementally
- Contact Qovery support with cluster ID and settings applied
Database Access Denied After CIDR Change
Database Access Denied After CIDR Change
- For managed databases: Changes apply immediately, verify CIDR includes your application VPC
- For container databases: Requires database redeployment to take effect
- Verify CIDR format is correct (e.g.,
["10.0.0.0/16"]not"10.0.0.0/16") - Check that
deny_any_accessis set tofalse - Verify database security groups in cloud provider console
- Ensure application subnet is included in
allowed_cidrs - For container databases, redeploy the database service
- Check VPC peering configuration if using cross-VPC access
NGINX Ingress Not Working
NGINX Ingress Not Working
- NGINX pod status:
kubectl get pods -n qovery - NGINX logs: Check cluster logs in Qovery Console
- HPA status:
kubectl get hpa -n qovery - Resource limits: Verify NGINX isn’t resource-constrained
- Invalid
http_snippetorserver_snippetsyntax - Resource limits too low for traffic volume
- HPA min/max instances misconfigured
- Custom default backend image not accessible
- Remove custom snippets and redeploy to isolate issue
- Increase NGINX resource limits if pods are OOMKilled
- Verify custom default backend image is publicly accessible
- Check NGINX configuration:
kubectl exec -n qovery nginx-pod -- nginx -T
Rate Limiting Not Working
Rate Limiting Not Working
- NGINX snippet syntax is correct in
http_snippetandserver_snippet - Cluster has been redeployed after settings change
- Rate limit zone names match between declaration and usage
- Using correct variable (e.g.,
$server_namevs$remote_addr)
Static IP Mode Issues
Static IP Mode Issues
- DockerHub credentials configured in Organization settings
- Private Kubernetes API endpoint is accessible
k8s.api.allowed_public_access_cidrsincludes your IP if needed- No network policies blocking Qovery IP
- Verify DockerHub credentials are valid
- Add Qovery support IP to allowed CIDRs if provided
- Check VPC routing and security groups
- Contact Qovery support for static IP whitelist
IAM/SSO Connection Issues
IAM/SSO Connection Issues
aws.iam.admin_groupmatches your IAM group name exactly- IAM user is member of specified admin group
aws.iam.sso_role_arnis correct if using SSO- Cluster has been redeployed after IAM settings change
- Verify IAM group membership in AWS Console
- Check IAM policy permissions include necessary Kubernetes access
- Redeploy cluster to apply IAM configuration changes