Skip to content

Infrastructure-as-Code project to provision and manage Kubernetes clusters across AWS (EKS),Azure (AKS),IBM Cloud,OCI and GCP (GKE) using Terraform, with Python-based automation scripts, containerized and deployed on Kubernetes for continuous operations.

License

Notifications You must be signed in to change notification settings

blp-infra/multi-cloud-kubernetes-infra-automation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

License: GPL v3

🌍 Multi-Cloud Kubernetes Infrastructure Automation

πŸ“Œ Overview

This project provisions and manages Kubernetes clusters across AWS (EKS) and GCP (GKE) using Terraform, and deploys a complete DevOps toolchain inside the clusters for infrastructure automation, monitoring, CI/CD, and security.

The goal is to demonstrate a multi-cloud strategy where Kubernetes serves as the common orchestration layer across cloud providers.


🎯 Features

βœ… Multi-Cloud Infrastructure – Provision AWS EKS and GCP GKE clusters with Terraform. βœ… Infrastructure Automation – Python scripts (containerized) for AWS (boto3) and GCP (google-cloud SDK) operations, plus Kubernetes API automation. βœ… Monitoring – Prometheus + Grafana dashboards across clusters. βœ… CI/CD – Jenkins deployed inside Kubernetes for automated pipelines. βœ… Code Quality & Security – SonarQube integration for static code analysis, Trivy for container vulnerability scanning. βœ… Secrets Management – Kubernetes secrets (can be extended with Vault). βœ… Scalable Architecture – Easily extendable to other clouds.


πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      Terraform (IaC)                      β”‚
β”‚ Provisions EKS, GKE, AKS, OKE & IKS Kubernetes Clusters  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚        β”‚        β”‚        β”‚        β”‚                     
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚        β”‚        β”‚        β”‚         └─────────┐
  β–Ό                 β–Ό        β–Ό        β–Ό                          β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   AWS EKS (K8s)   β”‚ β”‚   GCP GKE (K8s)   β”‚ β”‚  Azure AKS (K8s)  β”‚ β”‚   OCI OKE (K8s)   β”‚ β”‚ IBM IKS (K8s)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  β”‚                 β”‚                 β”‚                   β”‚                   β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β–Ό          β–Ό           β–Ό     β–Ό     β–Ό           β–Ό           β–Ό       β–Ό       β–Ό           β–Ό           β–Ό
Jenkins   SonarQube    Trivy Jenkins SonarQube   Trivy   Jenkins SonarQube   Trivy   Jenkins SonarQube   Trivy
(CI/CD)   (Code QA)    (Sec) (CI/CD) (Code QA)   (Sec)   (CI/CD) (Code QA)   (Sec)   (CI/CD) (Code QA)   (Sec)

β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β–Ό               β–Ό               β–Ό               β–Ό
          Prometheus + Grafana Monitoring (Unified Multi-Cluster Dashboards)



πŸ› οΈ Tech Stack

πŸ”Ή Infrastructure & Orchestration

  • Terraform
  • Ansible
  • AWS EKS
  • GCP GKE
  • Azure AKS
  • Oracle OKE
  • IBM Cloud
  • Kubernetes

πŸ”Ή Automation & Scripting

  • Python (boto3, google-cloud-sdk, kubernetes, pyyaml, requests)
  • Docker (for containerizing Python automation)

πŸ”Ή DevOps Toolchain

  • Jenkins (CI/CD)
  • SonarQube (Code Quality)
  • Trivy (Container Security Scanning)

πŸ”Ή Monitoring & Logging

  • Prometheus
  • Grafana

πŸ“‚ Repository Structure

multi-cloud-kubernetes-infra-automation/
β”œβ”€β”€ README.md
β”œβ”€β”€ .gitignore
β”œβ”€β”€ .terraform-version
β”œβ”€β”€ Makefile
  terraform/
  β”‚
  β”œβ”€β”€ global/
  β”‚   β”œβ”€β”€ variables/
  β”‚   β”‚   β”œβ”€β”€ dev/
  β”‚   β”‚   β”‚   β”œβ”€β”€ main.tfvars
  β”‚   β”‚   β”‚   └── state.tfvars
  β”‚   β”‚   β”œβ”€β”€ staging/
  β”‚   β”‚   β”‚   β”œβ”€β”€ main.tfvars
  β”‚   β”‚   β”‚   └── state.tfvars
  β”‚   β”‚   └── prod/
  β”‚   β”‚       β”œβ”€β”€ main.tfvars
  β”‚   β”‚       └── state.tfvars
  β”‚   └── common/
  β”‚       β”œβ”€β”€ common.tfvars
  β”‚       └── shared-variables.tf
  β”‚
  β”œβ”€β”€ environments/
  β”‚   β”œβ”€β”€ dev/
  β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”œβ”€β”€ backend.tf
  β”‚   β”‚   └── providers.tf
  β”‚   β”œβ”€β”€ staging/
  β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”œβ”€β”€ backend.tf
  β”‚   β”‚   └── providers.tf
  β”‚   └── prod/
  β”‚       β”œβ”€β”€ main.tf
  β”‚       β”œβ”€β”€ variables.tf
  β”‚       β”œβ”€β”€ outputs.tf
  β”‚       β”œβ”€β”€ backend.tf
  β”‚       └── providers.tf
  β”‚
  β”œβ”€β”€ modules/
  β”‚   β”œβ”€β”€ aws/
  β”‚   β”‚   β”œβ”€β”€ compute/
  β”‚   β”‚   β”‚   β”œβ”€β”€ ec2/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ ecs/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ eks/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── lambda/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ networking/
  β”‚   β”‚   β”‚   β”œβ”€β”€ vpc/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ security-groups/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ load-balancer/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── cloudfront/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ storage/
  β”‚   β”‚   β”‚   β”œβ”€β”€ s3/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── efs/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ database/
  β”‚   β”‚   β”‚   β”œβ”€β”€ rds/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ dynamodb/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── elasticache/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ monitoring/
  β”‚   β”‚   β”‚   β”œβ”€β”€ cloudwatch/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── sns/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ security/
  β”‚   β”‚   β”‚   β”œβ”€β”€ iam/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ secrets-manager/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── kms/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   └── management/
  β”‚   β”‚       β”œβ”€β”€ cloudtrail/
  β”‚   β”‚       β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚       β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚       β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚       β”‚   └── versions.tf
  β”‚   β”‚       └── config/
  β”‚   β”‚           β”œβ”€β”€ main.tf
  β”‚   β”‚           β”œβ”€β”€ variables.tf
  β”‚   β”‚           β”œβ”€β”€ outputs.tf
  β”‚   β”‚           └── versions.tf
  β”‚   β”‚
  β”‚   β”œβ”€β”€ azure/
  β”‚   β”‚   β”œβ”€β”€ compute/
  β”‚   β”‚   β”‚   β”œβ”€β”€ vm/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ vmss/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ aks/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ container-instances/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── functions/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ networking/
  β”‚   β”‚   β”‚   β”œβ”€β”€ vnet/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ nsg/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ load-balancer/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ application-gateway/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── cdn/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ storage/
  β”‚   β”‚   β”‚   β”œβ”€β”€ storage-account/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── disk/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ database/
  β”‚   β”‚   β”‚   β”œβ”€β”€ sql/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ cosmos-db/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── redis/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ monitoring/
  β”‚   β”‚   β”‚   β”œβ”€β”€ monitor/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── log-analytics/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ security/
  β”‚   β”‚   β”‚   β”œβ”€β”€ key-vault/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ identity/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── security-center/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   └── management/
  β”‚   β”‚       β”œβ”€β”€ resource-group/
  β”‚   β”‚       β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚       β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚       β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚       β”‚   └── versions.tf
  β”‚   β”‚       └── policy/
  β”‚   β”‚           β”œβ”€β”€ main.tf
  β”‚   β”‚           β”œβ”€β”€ variables.tf
  β”‚   β”‚           β”œβ”€β”€ outputs.tf
  β”‚   β”‚           └── versions.tf
  β”‚   β”‚
  β”‚   β”œβ”€β”€ gcp/
  β”‚   β”‚   β”œβ”€β”€ compute/
  β”‚   β”‚   β”‚   β”œβ”€β”€ vm/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ gke/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ cloud-run/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── cloud-functions/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ networking/
  β”‚   β”‚   β”‚   β”œβ”€β”€ vpc/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ firewall/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ load-balancer/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── cdn/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ storage/
  β”‚   β”‚   β”‚   β”œβ”€β”€ gcs/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── disk/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ database/
  β”‚   β”‚   β”‚   β”œβ”€β”€ cloud-sql/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ firestore/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── memorystore/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ monitoring/
  β”‚   β”‚   β”‚   β”œβ”€β”€ monitoring/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── logging/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   β”œβ”€β”€ security/
  β”‚   β”‚   β”‚   β”œβ”€β”€ iam/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   β”œβ”€β”€ secret-manager/
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚   β”‚   └── versions.tf
  β”‚   β”‚   β”‚   └── kms/
  β”‚   β”‚   β”‚       β”œβ”€β”€ main.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ variables.tf
  β”‚   β”‚   β”‚       β”œβ”€β”€ outputs.tf
  β”‚   β”‚   β”‚       └── versions.tf
  β”‚   β”‚   └── management/
  β”‚   β”‚       β”œβ”€β”€ project/
  β”‚   β”‚       β”‚   β”œβ”€β”€ main.tf
  β”‚   β”‚       β”‚   β”œβ”€β”€ variables.tf
  β”‚   β”‚       β”‚   β”œβ”€β”€ outputs.tf
  β”‚   β”‚       β”‚   └── versions.tf
  β”‚   β”‚       └── org-policy/
  β”‚   β”‚           β”œβ”€β”€ main.tf
  β”‚   β”‚           β”œβ”€β”€ variables.tf
  β”‚   β”‚           β”œβ”€β”€ outputs.tf
  β”‚   β”‚           └── versions.tf
  β”‚   β”‚
  β”‚   └── shared/
  β”‚       β”œβ”€β”€ naming/
  β”‚       β”‚   β”œβ”€β”€ main.tf
  β”‚       β”‚   β”œβ”€β”€ variables.tf
  β”‚       β”‚   β”œβ”€β”€ outputs.tf
  β”‚       β”‚   └── versions.tf
  β”‚       β”œβ”€β”€ tagging/
  β”‚       β”‚   β”œβ”€β”€ main.tf
  β”‚       β”‚   β”œβ”€β”€ variables.tf
  β”‚       β”‚   β”œβ”€β”€ outputs.tf
  β”‚       β”‚   └── versions.tf
  β”‚       └── data-sources/
  β”‚           β”œβ”€β”€ main.tf
  β”‚           β”œβ”€β”€ variables.tf
  β”‚           β”œβ”€β”€ outputs.tf
  β”‚           └── versions.tf
  β”‚
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ deploy.sh
β”‚   β”œβ”€β”€ init.sh
β”‚   β”œβ”€β”€ plan.sh
β”‚   β”œβ”€β”€ apply.sh
β”‚   β”œβ”€β”€ destroy.sh
β”‚   └── validate.sh
β”‚
β”œβ”€β”€ policies/
β”‚   β”œβ”€β”€ aws/
β”‚   β”‚   β”œβ”€β”€ security-policies/
β”‚   β”‚   β”‚   β”œβ”€β”€ s3-bucket-policies.json
β”‚   β”‚   β”‚   β”œβ”€β”€ ec2-security-policies.json
β”‚   β”‚   β”‚   └── iam-baseline-policies.json
β”‚   β”‚   └── compliance-policies/
β”‚   β”‚       β”œβ”€β”€ soc2-compliance.json
β”‚   β”‚       β”œβ”€β”€ pci-compliance.json
β”‚   β”‚       └── hipaa-compliance.json
β”‚   β”œβ”€β”€ azure/
β”‚   β”‚   β”œβ”€β”€ security-policies/
β”‚   β”‚   β”‚   β”œβ”€β”€ storage-account-policies.json
β”‚   β”‚   β”‚   β”œβ”€β”€ vm-security-policies.json
β”‚   β”‚   β”‚   └── rbac-baseline-policies.json
β”‚   β”‚   └── compliance-policies/
β”‚   β”‚       β”œβ”€β”€ soc2-compliance.json
β”‚   β”‚       β”œβ”€β”€ pci-compliance.json
β”‚   β”‚       └── gdpr-compliance.json
β”‚   └── gcp/
β”‚       β”œβ”€β”€ security-policies/
β”‚       β”‚   β”œβ”€β”€ gcs-bucket-policies.yaml
β”‚       β”‚   β”œβ”€β”€ compute-security-policies.yaml
β”‚       β”‚   └── iam-baseline-policies.yaml
β”‚       └── compliance-policies/
β”‚           β”œβ”€β”€ soc2-compliance.yaml
β”‚           β”œβ”€β”€ pci-compliance.yaml
β”‚           └── gdpr-compliance.yaml
β”‚
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ architecture/
β”‚   β”‚   β”œβ”€β”€ high-level-design.md
β”‚   β”‚   β”œβ”€β”€ network-topology.md
β”‚   β”‚   β”œβ”€β”€ security-architecture.md
β”‚   β”‚   └── data-flow-diagrams.md
β”‚   β”œβ”€β”€ runbooks/
β”‚   β”‚   β”œβ”€β”€ deployment-procedure.md
β”‚   β”‚   β”œβ”€β”€ incident-response.md
β”‚   β”‚   β”œβ”€β”€ backup-restore.md
β”‚   β”‚   └── scaling-procedures.md
β”‚   β”œβ”€β”€ troubleshooting/
β”‚   β”‚   β”œβ”€β”€ terraform-issues.md
β”‚   β”‚   β”œβ”€β”€ provider-errors.md
β”‚   β”‚   β”œβ”€β”€ networking-problems.md
β”‚   β”‚   └── state-management.md
β”‚   └── best-practices/
β”‚       β”œβ”€β”€ coding-standards.md
β”‚       β”œβ”€β”€ security-guidelines.md
β”‚       β”œβ”€β”€ naming-conventions.md
β”‚       └── deployment-guidelines.md
β”‚
└── tests/
    β”œβ”€β”€ unit/
    β”‚   β”œβ”€β”€ aws/
    β”‚   β”‚   β”œβ”€β”€ vpc_test.go
    β”‚   β”‚   β”œβ”€β”€ ec2_test.go
    β”‚   β”‚   └── s3_test.go
    β”‚   β”œβ”€β”€ azure/
    β”‚   β”‚   β”œβ”€β”€ vnet_test.go
    β”‚   β”‚   β”œβ”€β”€ vm_test.go
    β”‚   β”‚   └── storage_test.go
    β”‚   └── gcp/
    β”‚       β”œβ”€β”€ vpc_test.go
    β”‚       β”œβ”€β”€ compute_test.go
    β”‚       └── gcs_test.go
    β”œβ”€β”€ integration/
    β”‚   β”œβ”€β”€ aws-integration_test.go
    β”‚   β”œβ”€β”€ azure-integration_test.go
    β”‚   └── gcp-integration_test.go
    └── e2e/
        β”œβ”€β”€ full-stack_test.go
        β”œβ”€β”€ multi-cloud_test.go
        └── disaster-recovery_test.go

πŸš€ Getting Started

1️⃣ Clone the Repository

git clone https://github.com/<your-username>/multi-cloud-kubernetes-infra-automation.git
cd multi-cloud-kubernetes-infra-automation

2️⃣ Provision Infrastructure with Terraform

  • Configure AWS credentials (~/.aws/credentials)
  • Configure GCP credentials (gcp-service-account.json)
  • Run:
cd terraform
terraform init
terraform plan
terraform apply

3️⃣ Deploy Kubernetes Toolchain

kubectl apply -f k8s-manifests/jenkins/
kubectl apply -f k8s-manifests/sonarqube/
kubectl apply -f k8s-manifests/trivy/
kubectl apply -f k8s-manifests/prometheus/
kubectl apply -f k8s-manifests/grafana/

4️⃣ Run Python Automation in Kubernetes

  • Build & push Docker image:
cd python-automation
docker build -t <registry>/py-automation:latest .
docker push <registry>/py-automation:latest
  • Deploy to Kubernetes:
kubectl apply -f k8s-manifests/automation-deployment.yaml

πŸ“Š Monitoring & Dashboards

  • Access Grafana dashboards via kubectl port-forward.
  • Prometheus scrapes metrics from both clusters.

πŸ” Security

  • SonarQube for static code analysis.
  • Trivy scans container images inside Kubernetes.
  • Future enhancement: Integrate HashiCorp Vault for secrets.

🎯 Roadmap

  • Add multi-cluster federation (KubeFed)
  • Integrate ELK Stack for centralized logging
  • Add ArgoCD for GitOps workflows
  • Implement multi-region DR setup

License

This project is licensed under the GNU General Public License v3.0.
You are free to use, modify, and distribute this project under the same license.

About

Infrastructure-as-Code project to provision and manage Kubernetes clusters across AWS (EKS),Azure (AKS),IBM Cloud,OCI and GCP (GKE) using Terraform, with Python-based automation scripts, containerized and deployed on Kubernetes for continuous operations.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published