PoC Nomad + Consul — part 1

qomarullah
5 min readJul 2, 2021

Install & ACL Implementation

Nomad + Consul

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-up
curl -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\"}}"
}
config nomad di server
config consul di server
  • Akses UI
nomad : http://139.59.117.162:4646/ui/
consul : http://139.59.117.162:8500/ui/dc1/services
nomad ui
consul ui

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
concept ACL

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 :

pembagian policy untuk namespace

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

create namespace dengan prefix qa-* dan dev-*

Testing di nomad UI

untuk submit job di awal, harus dilakukan menggunakan token type management

login acl token management
ready to submit job

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.

available driver

Sample job

submit job
success deploy

selanjutnya kita cek job yang kita submit akan mendapatkan alokasi client yg mana.

terlihat alokasi job pada server app3

lanjut lagi ketika diklik akan muncul detail ip dan port yg bisa kita test

cek ip dan port yang running

Test di browser

Kembali ke job, tanpa namespace didefine di nomad file job, maka akan masuk ke namespace default

namespace default

selanjutnya kita akan mencoba submit menggunakan namespace dev-frontend supaya nanti bisa diedit oleh user dengan token dev1.

login menggunakan token dev, akan dapat melakukan perubaha terhadap namespace dev-*

untuk resource penggunaan cpu/memory bisa kita batasi juga menggunakan resource quota, tapi sayangnya fitur ini hanya ada di versi enterprise

penjelasan resource quota
konfiurasi untuk melakukan limitasi

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

--

--