from diagrams import Diagram, Cluster
from diagrams.onprem.analytics import Spark
from diagrams.onprem.client import Client
from diagrams.aws.compute import EC2
from diagrams.onprem.database import Oracle, PostgreSQL
from diagrams.onprem.network import HAProxy
from diagrams.elastic.elasticsearch import Elasticsearch , Kibana
from diagrams.programming.language import Python
from diagrams.programming.framework import Fastapi, React
from diagrams.onprem.queue import Kafka
from diagrams.onprem.certificates import LetsEncrypt
from diagrams.onprem.client import Users
from diagrams.onprem.container import Docker
from diagrams.generic.os import Centos
from diagrams.generic.database import SQL
from diagrams.onprem.network import Nginx
from diagrams.k8s.network import Ingress
from diagrams.programming.language import NodeJS
with Diagram("", show=False, direction="LR", outformat="png") as diag:
    with Cluster("Proxy Services"):
        nginxService             = Nginx("Reverse Proxy\n(SSL Termination)")
        prodVirtalHost           = Ingress("vhost 1")

        appVirtalHost            = Ingress("vhost 3")        
        testVirtalHost           = Ingress("vhost 2")        
    Users("Clients") >> nginxService
    nginxService >> [ prodVirtalHost ,appVirtalHost, testVirtalHost]
    with Cluster("Data Services"):
        elasticService = Elasticsearch("Datastore") 

    with Cluster("App Services"):
        apiService       = Fastapi("Prod API")
        uiService        = React("UI App")
        apiMockService   = NodeJS("Mock API")
    uiService >> apiService
    [apiService] >> elasticService
    prodVirtalHost >> [apiService]
    appVirtalHost >> uiService
    testVirtalHost >> [apiMockService]
diag
Warning: node '2db5bf4a88324af3974caee09d57f00a', graph '%3' size too small for label