HAProxy SSL Passthrough

frontend ssl
        bind :443
        mode tcp
        option tcplog

        # Wait for a client hello for at most 5 seconds
        tcp-request inspect-delay 5s
        tcp-request content accept if { req_ssl_hello_type 1 }

        use_backend be_ssl_hosting if { req_ssl_sni -i jooservices.com }

        default_backend be_ssl
backend be_ssl_hosting
        mode tcp
        balance roundrobin
        server aaa_ssl_server 192.168.1.39:443 check

My infrastructure network

Về cơ bản infrastructure network này mình build chưa được hoàn thiện, nhưng cũng thấy tương đối happy về nó. 1 chút chia sẽ.

Router 3910

  • Mình có tổng cộng 4 WANs. Tuy nhiên thực tế chỉ có 1 WAN chính với IP tĩnh

Core Switch – CnMatrix 2028-P

  • Thật ra em này có 1 điểm dở là không có port 2.5Gbe nên vướng 1 con Asus AX86U đành phải xài tạm port 1Gbe
  • 1 port SFP+ đến “Workstation”
  • 1 port 1Gbe đến X300
  • 1 port 1Gbe đến ProDesk
  • 1 port 1Gbe đến Asus AX86U

ProDesk

  • Em nó tuy nhỏ bé nhưng lại gần như là mấu chốt chính của toàn bộ Network. Gọi em nó là gatekeeper
  • HAProxy
    • Tiếp nhận 100% mọi requests và sau đó forwarding đến các server phía sau
    • Cũng là em SSH Jumper luôn
    • Tuy nhiên 1 số bất cập mình chưa làm được
      • Forward RDP
      • Passthrough SSL ( cái này đúng ra đã từng làm được mà giờ lại bị stucked )
  • Grafana
  • Loki
  • Syslog
  • Pihole

Asrock X300

  • Bản chất em này … ăn điện ít mà specs cũng kha khá ( 5700G / 64GB RAM & 2 TB SSD ) nên “hiểu” em nó như 1 thiết bị thứ sẽ online gần như 24/7. Do đó các “services” hosting trên đây là các services cần online liên tục
  • 1 con Virtualmin để hosting … chính các web này và n web khác
  • và 1 vài VM khác

Workstation

  • Em nó chính thức đã được triển khai với ESXi 7
  • 1 em VM “SMB” được attach với các HDDs. Em này bản thân cũng khá nhỏ, chủ yếu để phục vụ SMB / Plex & Torrent thôi
  • Em Workstation ngốn điện cao nên lý thuyết cũng khó online 24/7 mà sẽ có lúc down. Tuy nhiên specs em nó mạnh. Nên các service cần resource cao sẽ nằm trên đây.

ESXi – Github Runners via Docker

Context của bài toán này là build 1 con Docker để chạy Github Runners ( scaleble ). Và mọi thứ được chạy trong 1 con VM thuộc về ESXi

  • ESXi build 1 con VMWare chạy Ubuntu Server 20.04 . Cái này dễ dàng không có gì bàn cãi
  • Và tất nhiên sau đó sẽ setup Docker ( không cần chạy without sudo cũng được )

Và ta có 1 file docker-compose sau

version: "3.7"

services:
  runner:
    image: myoung34/github-runner:latest
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      RUNNER_SCOPE: repo
      RUNNER_NAME_PREFIX: runner
      LABELS: ubuntu,x64
      REPO_URL: <repository_url>
      EPHEMERAL: 1
      ACCESS_TOKEN: <github_token>
    deploy:
      replicas: 4
      resources:
        limits: // Giới hạn tối đa
          cpus: '1'
          memory: 2G
        reservations: // Tối thiểu
          cpus: '1'
          memory: 1G

Và giờ chỉ cần chạy docker-compose up -d

Tuy nhiên câu chuyện chưa hết vui !!! Do bản chất ta đang chạy qua Docker. Do đó việc build các service ( cũng qua docker ) lại không khả thi. Cụ thể là ta cần build MySQL / Redis etc … Vậy thì sao ???

…. tách em nó ra 1 VM khác và update lại IP về con VM đó thôi 😀 . Chút mất công nhưng cơ bản đã dễ dàng rất nhiều.

Từ giờ con VM chạy Runners ta tạo n folder, mỗi folder cho 1 docker-compose ứng với 1 repository