Deploying on GKE?The FIPS-specific Kubernetes steps below, including certificate generation, certificate secrets, and the
openSSL Helm flags, are cloud-agnostic. For GCP, provision x86_64 infrastructure with Deploy on GCP GKE, then apply those steps here, substituting the GCS storage settings and Workload Identity from the GCP guide.Prerequisites
Before starting this tutorial, you must have completed the following from tutorials/deploy-aws.md:- Step 1: IAM role for ECR access
- Step 2: Container images copied to your ECR using the FIPS version tags below
- Step 3: VPC created
- Step 4: EKS cluster created
- Step 5: FIPS node groups created using the x86_64 requirements below instead of the standard ARM64 recommendations
- Step 6: S3 bucket and IAM roles created
FIPS node group requirements
Use x86_64 nodes for ClickHouse Server, ClickHouse Keeper, and the ClickHouse Operator. The cryptographic provider validation for the current Server and Keeper FIPS images does not include Linux on ARM64. A FIPS-enabled ARM node image does not extend that validation to the cryptographic module inside the ClickHouse containers. AWS supports two x86_64 node image paths for this deployment:- Use
BOTTLEROCKET_x86_64_FIPS, which is available directly as an EKS managed node group AMI type. - Build a custom EKS-optimized Amazon Linux 2023 x86_64 AMI with FIPS mode enabled, then select it through an EC2 launch template. AWS publishes
AL2023_x86_64_STANDARD, but does not expose a separateAL2023_x86_64_FIPSmanaged node group AMI type. See the EKS AMI build scripts.
Configure instance-store NVMe using the matching AL2023 or Bottlerocket tab in Step 5 of the standard AWS deployment. In the Helm command below, set
SSD_CACHE_IS_ON_EMPTY_DIR=true for Bottlerocket, which binds instance-store NVMe to /var/lib/kubelet. Set it to false for AL2023, which mounts instance-store NVMe at /nvme/disk.
FIPS Version Tags
Use the following FIPS-specific image tags when copying artifacts:S3 Bucket Naming Restriction
The S3 bucket name cannot contain any periods (.) when using FIPS. The S3 FIPS endpoints require virtual-host-style addressing, which does not work when the bucket name contains periods.
Step 1: Create FIPS Certificates
FIPS compliance requires TLS certificates generated using FIPS-approved algorithms in a FIPS-enabled environment. You need three sets of certificates:
You also need a CA certificate (
ca.crt and ca.key), either self-signed or from your organization’s certificate authority.
Requirements:
- Minimum RSA 3072-bit key size
- SHA-256 or higher signature algorithm
- Generated in a FIPS-enabled environment
- A unique set of certificates (excluding CA) must be created for each ClickHouse cluster
Step 2: Install Kubernetes Prerequisites
Install VolumeSnapshot CRDs
Install StorageClass (Optional)
Only if you do not have a custom or existing StorageClass:Step 3: Install Operator
Note the FIPS ECR endpoint format:0000000000.dkr-ecr-fips.us-west-2.on.aws (not the standard .amazonaws.com endpoint).
Step 4: Create Certificate Secrets
Secrets must be installed in the same Kubernetes namespace where the ClickHouse cluster will run. If your cluster name isdefault-xx-01, the namespace will be ns-default-xx-01.
Ensure the namespace exists, then create the secrets. Do not change the secret names or key names.
Step 5: Deploy ClickHouse Cluster
Use the correct FIPS version of the endpoints for ECR and S3. FIPS endpoints can be found at https://aws.amazon.com/compliance/fips/.Guaranteed QoS (recommended)ClickHouse workloads should run with matching
requests and limits for
both CPU and memory. The single SERVER_CPU/SERVER_MEMORY/KEEPER_CPU/
KEEPER_MEMORY values below are applied to both resources.requests
and resources.limits in the helm invocation that follows, which places
the pods in the Guaranteed
QoS class. If you need to run with a different QoS class, review
Pod QoS: Guaranteed (recommended)
first for the trade-offs.FIPS deployments set the image tags explicitlyThe standard tutorials leave
server.image.tag / keeper.image.tag unset and take
the versions pinned in the cluster Helm chart. FIPS is the exception: the FIPS
variant is selected by the image tag rather than by a separate chart, so the -fips
tags below must be set explicitly. Keep them aligned with the versions in the
Component Versions reference.Step 6: Verify Installation
Port-forward on TLS Port
With FIPS mode, ClickHouse uses TLS on port 9440 instead of the standard port 9000.Create Client Configuration
Create aclient-config.xml file to tell the ClickHouse client where to find the CA certificate. Update the path to your ca.crt file:
Connect and Run a Query
openSSL.required=true. Use port 9440 (native TLS) or port 8443 (HTTPS) instead.
Next Steps
- Teleport integration (optional): For secure database access via Teleport Enterprise, see Integrate Teleport with ClickHouse Private. This requires
SERVER_VERIFICATION_MODE=relaxedandKEEPER_VERIFICATION_MODE=relaxed.