PoC Nomad + Consul — part 1
Install & ACL Implementation
Background poc ini adalah kebutuhan infrastruktur yang lebih dinamis yang saat ini belum bisa dilakukan di on premise yang saat ini banyak menggunakan firewall dan load balancer. Nomad dan consul ini merupakan alternative orchestration service semisal kubernetes, sehingga memudahkan scalling dan deployment service.
Sebagai perbandingan antara kubernetes dan nomad bisa dilihat di link berikut :
Scope di PoC Nomad Consul ini meliputi :
- Install Nomad dan Consul — part 1
- Implementasi ACL — part 1
- Submit job, scaling count, loadbalancer, healthcheck dan auto restart — part 2
- Strategy deployment — part3
- Penggunaan sidecar proxy service to service — part4
- Service mesh, ingress, dan terminating gateway — part 4
- Log forwarder job
- Stateful workload
- CI/CD integration
- Vault integration
Install Nomad, Consul
- Prepare 3 server, dalam hal ini penulis siapkan droplet di digital ocean masing-masing kita pilih yg terkecil cpu1Gb, mem 2Gb dan dengan ssh access.
- Install hashi-up, untuk memudahkan installasi di server
#install hashi-up
#https://github.com/jsiebens/hashi-upcurl -sLS https://get.hashi-up.dev | sh
sudo install hashi-up /usr/local/bin/
hashi-up version
- Prepare dan jalankan hasi-up untuk install consul kemudian nomad
pada poc ini, 3 server penulis jadikan sebagai berikut
consul : 3 server dan juga client
nomad : 3 server dan juga client
Untuk case digital ocean, perlu adanya tambahan di hasil instalasi nomad
advertise {
http = "{{GetInterfaceIP \"eth1\"}}"
rpc = "{{GetInterfaceIP \"eth1\"}}"
serf = "{{GetInterfaceIP \"eth1\"}}"
}
- Akses UI
nomad : http://139.59.117.162:4646/ui/
consul : http://139.59.117.162:8500/ui/dc1/services
Implementasi ACL
seperti yang kita lihat pada UI nomad kita belum bisa melakukan submit job, karena pada instalasi kita langsung mengaktifkan ACL.
- ACL di Nomad
Seperti terlihat digambar Access Control List (ACL) dapat kita lakukan dengan cara membuat policy terlebih dahulu. di dalam policy kita define list capability. baru selanjutnya kita membuat token untuk dishare ke user maupun semisal CI/CD sehingga dapat permission untuk melakukan call API ataupun access UI sesuai capability seperti submit job, query dan lainnya.
ACL dapat kita gunakan sebagai segregasi responsibility. kita bisa mencoba membagi menjadi dev, qa, preprod, prod. Kita bisa bagi menjadi 2 cluster misalkan 1 cluster (dev & qa) dan 1 cluster (preprod dan prod). Namun dalam poc ini penulis mencoba 1 cluster dc untuk kebutuhan dev dan qa.
Kita akan membuat seperti berikut :
Ada beberapa rule yang penting dalam ACL diantaranya namespace dan quota, dengan namespace kita bisa mengalokasikan job ke namespace tertentu dan melakukan limitasi terhadap update job, penggunaan quota cpu, memory maupun disk.
Sebelum membuat acl kita perlu acl bootsrap terlebih dahulu yang nanti menghasilkan token type management — bisa melakukan operation apa saja.
kemudian export token management tadi supaya bisa kita lakukan next pembuatan policy dan token
export NOMAD_TOKEN=a59df441-47d2-d718-0f0c-xxxx
Selanjutnya kita buat policy dev dan qa. berikut sample untuk dev, kita buat namespace rules untuk dev-*. artinya semua jobs yang nanti menggunakan namespace dev-xxx bisa di operate menggunakan policy ini.
Selanjutnya kita apply policy dev dan qa
Selanjutnya membuat token dari policy diatas
Selesai kita bisa menggunakan token / secret ID diatas
dev: e087d6a7-99ef-7f63-0e50-xxxxx
qa: 470fd5c9-be1f-d94e-a55a-xxxx
management : a59df441-47d2-d718-0f0c-xxxx
selanjutnya kita bisa buat namespace supaya job dapat menggunakannya
Testing di nomad UI
untuk submit job di awal, harus dilakukan menggunakan token type management
karena kita akan mencoba submit job berupa docker image kita perlu install docker di masing2 vm. begitu juga ketika driver kita butuh java, maka perlu install jdk.
Sample job
selanjutnya kita cek job yang kita submit akan mendapatkan alokasi client yg mana.
lanjut lagi ketika diklik akan muncul detail ip dan port yg bisa kita test
Test di browser
Kembali ke job, tanpa namespace didefine di nomad file job, maka akan masuk ke namespace default
selanjutnya kita akan mencoba submit menggunakan namespace dev-frontend supaya nanti bisa diedit oleh user dengan token dev1.
untuk resource penggunaan cpu/memory bisa kita batasi juga menggunakan resource quota, tapi sayangnya fitur ini hanya ada di versi enterprise
Summary
- Kita sudah berhasil install nomad & consul dan saling terhubung
- Kita bisa membuat acl melalui policy, membuat namespace, kemudian generate token dengan untuk kebutuhan security dan responsibilty yang berbeda antara dev dan qa
- Uji limitasi resource quota per namespace harus menggunakan versi enterprise
Next
Sample service job, penggunaan sideproxy, dan log forwarder job
Referensi
https://learn.hashicorp.com/tutorials/nomad/access-control https://learn.hashicorp.com/tutorials/nomad/quotas