3.8 KiB
04 - Prod Terraform IaC
Bu asamanin amaci prod Hetzner Cloud Project icinde HA odakli IaaS kaynaklarini Terraform ile olusturmaktir. Bu dokuman prod Terraform ajanina tek basina verilebilir.
Kapsam
Terraform prod ortaminda sunlari olusturur:
- Private network:
iklim-prod-net - Subnetler:
- App/Swarm subnet:
10.20.10.0/24 - DB subnet:
10.20.20.0/24
- App/Swarm subnet:
- Firewall:
- Public ingress: sadece
22/tcp,80/tcp,443/tcp - Private ingress:
07-private-network-port-matrisi.mddosyasindaki prod kurallari
- Public ingress: sadece
- SSH key
- Placement groups:
prod-swarm-spreadprod-db-spread
- Servers:
prod-swarm-01prod-swarm-02prod-swarm-03prod-db-01prod-db-02prod-db-03
- Ansible inventory output
DB cluster yazilimi Terraform ile kurulmayacak. DB node'lari sadece makine, network ve firewall seviyesinde hazirlanacak.
Onerilen Dosya Yapisi
terraform/
hetzner/
prod/
versions.tf
providers.tf
variables.tf
locals.tf
network.tf
firewall.tf
placement.tf
servers.tf
outputs.tf
terraform.tfvars.example
terraform.tfvars, state dosyalari ve token repo'ya commit edilmeyecek.
Degiskenler
Minimum degiskenler:
hcloud_token = "secret"
environment = "prod"
location = "fsn1"
image = "ubuntu-24.04"
server_type_swarm = "cx42"
server_type_db = "cx52"
admin_ssh_public_key_path = "~/.ssh/id_ed25519.pub"
admin_allowed_cidrs = ["X.X.X.X/32"]
Server type degerleri kapasiteye gore degisebilir. Bu dokuman topoloji ve guvenlik kararini tanimlar; sizing daha sonra revize edilebilir.
Server Rolleri ve Private IP PlanI
| Server | Private IP | Rol |
|---|---|---|
prod-swarm-01 |
10.20.10.11 |
Swarm manager + app worker + runner |
prod-swarm-02 |
10.20.10.12 |
Swarm manager + app worker + runner |
prod-swarm-03 |
10.20.10.13 |
Swarm manager + app worker + runner |
prod-db-01 |
10.20.20.11 |
Manuel DB cluster node |
prod-db-02 |
10.20.20.12 |
Manuel DB cluster node |
prod-db-03 |
10.20.20.13 |
Manuel DB cluster node |
Private IP'ler sabit tanimlanmalidir.
Placement Group Karari
Prod icin iki ayri spread placement group:
prod-swarm-spread: prod-swarm-01/02/03
prod-db-spread: prod-db-01/02/03
Bu sayede Swarm quorum node'lari kendi aralarinda farkli fiziksel host'lara, DB node'lari da kendi aralarinda farkli fiziksel host'lara yerlestirilmeye calisilir.
Notlar:
- Hetzner kabinet secimi dogrudan sunmaz.
- Spread placement group farkli fiziksel host hedefler.
- Farkli lokasyon/region felaket kurtarma bu asamada konu disidir.
- Ileride scale buyudugunde multi-location DR ayri tasarlanmalidir.
Public Firewall
Public ingress:
| Port | Kaynak | Hedef |
|---|---|---|
22/tcp |
admin_allowed_cidrs |
Tum prod node'lari |
80/tcp |
0.0.0.0/0, ::/0 |
Prod gateway entrypoint |
443/tcp |
0.0.0.0/0, ::/0 |
Prod gateway entrypoint |
Prod'da su portlar public acilmayacak:
8200/tcpVault5432/tcpPostgreSQL27017/tcpMongoDB6379/tcpRedis5672/tcp,15672/tcp,61613/tcp,15674/tcpRabbitMQ2377/tcp,7946/tcp,7946/udp,4789/udpDocker Swarm9180/tcpAPISIX Admin API9090/tcpPrometheus3000/tcpGrafana
Bu servisler gerekiyorsa private network, VPN, bastion veya admin CIDR ile sinirlandirilmis ek kural uzerinden erisilebilir. Varsayilan public politika kapali kalir.
Kabul Kriterleri
terraform plansadece prod Hetzner Project token'i ile calisir.- 6 server olusur.
- Swarm node'lari
prod-swarm-spreadplacement group icindedir. - DB node'lari
prod-db-spreadplacement group icindedir. - Public firewall sadece
22,80,443ingress'e izin verir. - Private firewall
07-private-network-port-matrisi.mdile uyumludur. - Terraform state ve secret tfvars commit edilmez.