Cloud Platforms
This guide provides specific instructions for deploying Mermin on major cloud Kubernetes platforms: Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS), and Azure Kubernetes Service (AKS).
Google Kubernetes Engine (GKE)
Prerequisites
gcloudCLI installed and configuredGKE cluster created (Standard or Autopilot)
kubectlconfigured for your GKE cluster
GKE Standard Clusters
GKE Standard clusters work seamlessly with Mermin using the standard Helm deployment.
Create a GKE Standard cluster:
gcloud container clusters create mermin-cluster \
--zone us-central1-a \
--num-nodes 3 \
--machine-type n1-standard-2 \
--enable-ip-alias \
--network "default" \
--subnetwork "default"
# Configure kubectl
gcloud container clusters get-credentials mermin-cluster --zone us-central1-aDeploy Mermin:
GKE Autopilot Clusters
GKE Autopilot has stricter security policies. Mermin requires some adjustments:
GKE Autopilot does not allow privileged containers by default. You must enable the CAP_BPF capability and use Autopilot-compatible security context.
Create a GKE Autopilot cluster:
Deploy with Autopilot-compatible values:
GKE-Specific Configuration
Network interfaces on GKE nodes typically include:
Workload Identity (optional, for managed identity):
Set up Workload Identity:
GKE with Dataplane V2 (Cilium)
GKE Dataplane V2 uses Cilium for advanced networking features.
✅ Implemented: TC priority-aware attachment is now fully supported! mermin can safely monitor gke* interfaces on GKE Dataplane V2 clusters.
How it works:
Kernel >= 6.6: Uses TCX (Traffic Control eXpress) with
tcx_order = "first"(runs before other programs)Kernel < 6.6: Uses netlink with
tc_priority = 1(runs first in chain)
Observability characteristics:
Mermin runs first in the TC chain (default behavior), meaning:
✅ All traffic flows are captured
✅ State continuity: Flow statistics persist across mermin restarts via map pinning
✅ No flow gaps: Existing pods generate flows immediately after mermin restart
ℹ️ First-execution prevents orphan program issues on restart
This provides accurate flow visibility for monitoring and troubleshooting while maintaining cluster stability. Mermin operates passively (TC_ACT_UNSPEC) so running first doesn't interfere with Cilium's networking.
Verification:
After deployment, verify TC attachment and map pinning:
Amazon Elastic Kubernetes Service (EKS)
Prerequisites
awsCLI installed and configuredeksctlinstalled (optional but recommended)EKS cluster created
kubectlconfigured for your EKS cluster
Creating an EKS Cluster
Deploying Mermin on EKS
Standard Helm deployment works on EKS:
EKS-Specific Configuration
Network interfaces on EKS nodes (Amazon Linux 2):
For nodes using the VPC CNI plugin with secondary ENIs:
IAM Roles for Service Accounts (IRSA):
Set up IRSA:
Azure Kubernetes Service (AKS)
Prerequisites
azCLI installed and configuredAKS cluster created
kubectlconfigured for your AKS cluster
Creating an AKS Cluster
Deploying Mermin on AKS
Standard Helm deployment works on AKS:
AKS-Specific Configuration
Network interfaces on AKS nodes:
For nodes using Azure CNI:
Azure AD Pod Identity (optional):
Set up Azure AD Pod Identity:
Cloud-Specific Networking Considerations
Network Policies
All cloud platforms support Kubernetes NetworkPolicies. Ensure Mermin can reach:
Load Balancers
If exposing metrics externally:
GKE:
EKS:
AKS:
Cloud-Specific RBAC and IAM
GKE
Mermin requires Kubernetes RBAC (handled by Helm chart). No additional GCP IAM permissions needed for basic operation.
For advanced features (e.g., accessing GCP APIs):
EKS
Mermin requires Kubernetes RBAC (handled by Helm chart). No additional AWS IAM permissions needed for basic operation.
For advanced features (e.g., accessing AWS APIs):
AKS
Mermin requires Kubernetes RBAC (handled by Helm chart). No additional Azure IAM permissions needed for basic operation.
For advanced features (e.g., accessing Azure APIs):
Performance and Cost Optimization
GKE
Use Preemptible/Spot nodes for non-critical Mermin pods (with PodDisruptionBudget)
Use node autoscaling to match traffic patterns
Consider regional clusters for high availability
EKS
Use Spot instances for cost savings (with PodDisruptionBudget)
Use Cluster Autoscaler or Karpenter for dynamic scaling
Enable Container Insights for monitoring
AKS
Use Spot node pools for cost savings
Use Cluster Autoscaler for dynamic scaling
Enable Container Insights for monitoring
Multi-Region Deployments
For multi-region observability:
Deploy Mermin in each region's cluster
Use region-specific OTLP collectors to reduce cross-region data transfer
Aggregate at central collector if needed
Tag flows with region identifier for differentiation
Example configuration with region tagging:
Monitoring and Logging
Cloud-Native Monitoring
GKE - Cloud Monitoring:
EKS - Container Insights:
AKS - Container Insights:
Troubleshooting Cloud-Specific Issues
GKE Autopilot: "Operation not permitted"
Ensure you're using capabilities instead of privileged: true:
EKS: "Cannot load eBPF program"
Verify kernel version on AL2 nodes:
AKS: "Insufficient permissions"
Ensure managed identity has necessary permissions and AAD Pod Identity is configured correctly.
Next Steps
Advanced Scenarios: Custom CNI, multi-cluster deployments
Configuration Reference: Fine-tune Mermin for your environment
Observability Backends: Send Flow Traces to cloud-native observability platforms
Troubleshooting: Solve cloud-specific issues
Last updated