In Deckhouse Code, when installed in a Kubernetes cluster, the following network configuration options are used:

  1. Configuration with an additional LoadBalancer for the web service and shell service: When the global.codeHelm.loadbalancer.enabled value in the Helm chart is set to true, the Haproxy component is deployed with a Service of type LoadBalancer. The Service accepts HTTP, HTTPS, and Git over SSH on a single external IP address via 80, 443, and 22 ports, respectively. Haproxy forwards traffic from port 22 to the corresponding Git SSH Pod. Ports 80 and 443 are handled by the Ingress controller, where TLS traffic is terminated. A separate IP address is also allocated, distinct from the Ingress controller’s IP address. A separate DNS record must be created for this address. The following services will be accessible via this DNS record:

    • Web interface (UI) on ports 80 and 443
    • Git SSH on port 22

    This network configuration is the default one. For more details on configuring the additional load balancer, refer to the Deckhouse Code documentation.

  2. Configuration without an additional LoadBalancer: When the global.codeHelm.loadbalancer.enabled value in the Helm chart is set to false, the Ingress controller is used to access the web interface (UI) and other services via standard HTTP (80) and HTTPS (443) ports. However, the Ingress controller does not support TCP port proxying. Therefore, to access Git SSH via port 22, a separate service of LoadBalancer or NodePort type is used.

Architecture

The following simplifications are made in the diagram:

  • The diagram shows containers in different pods interacting directly with each other. In reality, they communicate via the corresponding Kubernetes Services (internal load balancers). Service names are omitted if they are obvious from the diagram context. Otherwise, the Service name is shown above the arrow.
  • Pods may run multiple replicas. However, each pod is shown as a single replica in the diagram.

The Level 2 C4 architecture of Deckhouse Code network configurations is shown in the following diagrams.

  • With an additional LoadBalancer for the web and shell services:

    With an additional LoadBalancer

  • Without an additional LoadBalancer:

    Without an additional LoadBalancer