Search K
Appearance
Appearance
F5 AI Security protects generative AI traffic. F5 AI Security Guardrails moderates prompts and responses in real time. F5 AI Security Red Team runs adversarial test campaigns against AI endpoints. Both run on the same Kubernetes operator and can share a single GKE cluster.
This guide covers a manual install on Google Kubernetes Engine. You'll provision a GKE cluster with three node pools, set up Cloud SQL for PostgreSQL, pull container images from Artifact Registry, and install the Helm chart with values that match your environment.
Before you begin, verify that you have:
gcloud, kubectl, and helm installed on the workstation where you'll run the install.harbor.calypsoai.app to pull operand images at runtime.g2-standard-12 or larger). Red Team uses NVIDIA A100 (a2-highgpu-1g or a2-ultragpu-1g). If needed, request a quota adjustment.pg_trgm extension allowed. We recommend Cloud SQL for PostgreSQL. Red Team requires pg_trgm. Guardrails works without it.The chart and image paths in this guide assume you've cloned this repository and have it open on your workstation.
Set the environment variables you'll use throughout the install. The variables shown are examples. Your versions may differ.
export PROJECT_ID="my-project"
export REGION="us-central1"
export ZONE="us-central1-a"
export CLUSTER_NAME="f5-ai-security"
export VERSION="1.0.2"Authenticate and select the project.
gcloud auth login
gcloud config set project "${PROJECT_ID}"Enable the required APIs.
gcloud services enable \
container.googleapis.com \
compute.googleapis.com \
artifactregistry.googleapis.com \
sqladmin.googleapis.com \
servicenetworking.googleapis.comConfigure Docker to pull from the F5 public Artifact Registry.
gcloud auth configure-docker gcr.ioF5 AI Security needs three node pools: one for the moderator, one for the KubeAI controller, and one for GPU-backed inference. The pool labels in this section match the defaults the Helm chart looks for. For more information on GKE compute types, see Google Cloud Compute Engine documentation.
Create the cluster with a small default pool. The default pool hosts the operator and the Prefect workflow server.
Add the moderator node pool. The moderator service needs 16 vCPUs.
Add the KubeAI controller pool. KubeAI manages the inference model lifecycle.
Add the GPU pool. Use g2-standard-12 with NVIDIA L4 for Guardrails. Use a2-highgpu-1g with NVIDIA A100 and a larger boot disk for Red Team.
Get cluster credentials.
gcloud container clusters get-credentials "${CLUSTER_NAME}" --location "${REGION}"Confirm the GPU drivers are available.
kubectl get nodes --selector node_group=gpu -o wide
kubectl describe node -l node_group=gpu | grep nvidia.com/gpuEach GPU node should report at least one nvidia.com/gpu resource. If the count is zero, wait a few minutes for the driver installer to finish, then check again.
Create a Cloud SQL for PostgreSQL instance.
gcloud sql instances create f5-ai-security-db \
--database-version POSTGRES_15 \
--tier db-custom-4-16384 \
--region "${REGION}" \
--storage-size 100 \
--storage-type SSD \
--storage-auto-increaseSet the admin password.
gcloud sql users set-password postgres \
--instance f5-ai-security-db \
--password "<choose-a-strong-password>"Enable the pg_trgm extension. This step is required for Red Team. It's optional for Guardrails-only installs.
gcloud sql instances patch f5-ai-security-db \
--database-flags cloudsql.enable_pg_trgm=onAuthorize the GKE cluster's outbound IP range, or attach the instance to the cluster's VPC.
The simplest path for a test environment is to use the Cloud SQL Auth Proxy as a sidecar. For a production install, configure private services access and connect the instance to the same VPC as your cluster.
Create the install namespace.
kubectl create namespace f5-ai-secCreate the Harbor image pull secret. The chart uses this secret to pull operand images.
kubectl create secret docker-registry harbor-pull-secret \
--namespace f5-ai-sec \
--docker-server "harbor.calypsoai.app" \
--docker-username "<harbor-user>" \
--docker-password "<harbor-password>"Create a values override file at my-values.yaml. Replace the placeholders with your environment.
global:
platform: gcp
gcp:
flavor: guardrails
installMode: new
config:
license: "<your-f5-license-key>"
moderatorBaseUrl: "https://moderator.example.com"
postgresHost: "<cloud-sql-private-ip>"
postgresAdminPassword: "<postgres-admin-password>"
harborUsername: "<harbor-user>"
harborPassword: "<harbor-password>"
nodeGroups:
moderator: "moderator"
kubeai: "kubeai"
gpu: "gpu"
ingress:
class: "nginx"
hostname: "moderator.example.com"
cache:
enabled: falseInstall the chart.
helm install f5-ai-security ./charts/f5-ai-security-operator \
--namespace f5-ai-sec \
--values ./charts/f5-ai-security-operator/values-gcp.yaml \
--values ./my-values.yamlWait for the operator to reconcile.
kubectl wait --namespace f5-ai-sec \
--for=condition=Ready pod \
--selector app.kubernetes.io/name=f5-ai-security-operator \
--timeout=5mIf you already have F5 AI Security Guardrails running, you can extend the install with Red Team. The operator detects the existing SecurityOperator custom resource and patches it instead of creating a new one.
Update the Cloud SQL instance to allow pg_trgm if you haven't already, and confirm the GPU pool has at least one NVIDIA A100. You can swap the pool by following the GPU pool step in the cluster section above.
Add a Red Team values file at redteam-values.yaml.
global:
gcp:
flavor: redteam
installMode: addon
config:
license: "<your-f5-license-key>"Apply the add-on values to the existing release.
helm upgrade f5-ai-security ./charts/f5-ai-security-operator \
--namespace f5-ai-sec \
--reuse-values \
--values ./redteam-values.yamlWait for Red Team pods to come up.
kubectl get pods -n f5-ai-sec -l app.kubernetes.io/component=redteamList the pods in the install namespace and confirm they're all running.
kubectl get pods -n f5-ai-secConfirm the moderator endpoint responds.
curl -k "https://${MODERATOR_HOSTNAME}/healthz"Open the F5 AI Security console in a browser at the hostname you configured in ingress.hostname, then sign in with the admin credentials from your license email.
ImagePullBackOff Symptom: One or more pods stay in ImagePullBackOff with a 401 error in kubectl describe pod.
Cause: The Harbor pull secret is missing, has the wrong credentials, or isn't in the install namespace.
Fix: Re-create the secret with the correct credentials and re-roll the pod:
kubectl delete secret harbor-pull-secret -n f5-ai-sec
kubectl create secret docker-registry harbor-pull-secret \
--namespace f5-ai-sec \
--docker-server "harbor.calypsoai.app" \
--docker-username "<harbor-user>" \
--docker-password "<harbor-password>"
kubectl rollout restart deployment -n f5-ai-sec0/1 nodes are available: insufficient nvidia.com/gpu Symptom: The inference pod stays in Pending with an unschedulable event referring to nvidia.com/gpu.
Cause: The NVIDIA driver installer hasn't finished on the GPU node, or the pool was created without the accelerator flag.
Fix: Confirm the GPU pool was created with the --accelerator flag and the nvidia.com/gpu=present:NoSchedule taint. Wait up to 10 minutes after creating the pool for the driver installer DaemonSet to complete. If the issue persists, re-create the pool with the flags shown in the cluster section.
pg_trgm error Symptom: The Prefect server pod crashes with a log line that references pg_trgm.
Cause: The PostgreSQL server doesn't have the pg_trgm extension enabled. Red Team requires this extension. A Guardrails-only install doesn't.
Fix: Enable the extension on the Cloud SQL instance:
gcloud sql instances patch f5-ai-security-db --database-flags cloudsql.enable_pg_trgm=onAfter the instance restarts, delete the failing Prefect pod so it picks up the new database setup.