@startuml box Internal Network participant Jenkins participant Pod participant Kubernetes participant Autoscaler participant Provisioner Jenkins -> Kubernetes : Create Pod Kubernetes -> Autoscaler : Scale Up end box Autoscaler -> AWS : Launch Instance create "EC2 Instance" AWS -> "EC2 Instance" : Start AWS --> Provisioner : Instance Started Provisioner -> Provisioner : Generate Bootstrap Token Provisioner -> Kubernetes : Store Bootstrap Token Provisioner -> Kubernetes : Allocate WireGuard Config "EC2 Instance" -> Provisioner : Request WireGuard Config Provisioner -> Kubernetes : Request WireGuard Config Kubernetes -> Provisioner : Return WireGuard Config Provisioner -> "EC2 Instance" : Return WireGuard Config "EC2 Instance" -> "EC2 Instance" : Configure WireGuard "EC2 Instance" -> Provisioner : Request Cluster Config Provisioner -> "EC2 Instance" : Return Cluster Config group WireGuard Tunnel "EC2 Instance" -> Kubernetes : Request Certificate Kubernetes -> "EC2 Instance" : Return Certificate "EC2 Instance" -> Kubernetes : Join Cluster Kubernetes -> "EC2 Instance" : Acknowledge Join Kubernetes -> "EC2 Instance" : Schedule Pod "EC2 Instance" -> Kubernetes : Pod Started end Kubernetes -> Jenkins : Pod Started create Pod Jenkins -> Pod : Execute job @enduml