Langsung ke konten

Jaringan Privat ​

Layanan dalam satu proyek saling menjangkau lewat hostname privat:

<hostname>.zenavo.internal

Misalnya, sebuah API terhubung ke postgresql.zenavo.internal:5432. Hostname layanan baru berasal dari namanya (My API → my-api, PostgreSQL kedua → postgresql-2); ubah di Settings layanan pada Private hostname. Host-nya ditampilkan di tab Networking layanan pada bagian Private. Trafik tetap di dalam server; proyek tidak bisa menjangkau layanan proyek lain.

Resolusi nama ​

Host privat adalah nama DNS sungguhan di resolver server, jadi bisa dipakai di mana saja: resolver sistem, dig dan nslookup, serta program yang melakukan kueri DNS sendiri, seperti resolver nginx dengan proxy_pass berbasis variabel, atau klien Go dan Node dengan resolver-nya sendiri. Arahkan nginx ke nameserver dari /etc/resolv.conf kontainer:

nginx
resolver 10.43.0.10 valid=10s;   # baris nameserver di /etc/resolv.conf
set $api api.zenavo.internal;
location / { proxy_pass http://$api:8080; }

Sebuah nama hanya ter-resolve ke layanan di proyek milik layanan yang bertanya: api.zenavo.internal berarti layanan yang berbeda di setiap proyek, dan nama yang tidak dimiliki layanan mana pun di proyek Anda tidak mengembalikan alamat. ID layanan juga bisa dipakai sebagai nama (svc-k3j9x2ab.zenavo.internal). /etc/hosts setiap kontainer juga mencantumkan host privat proyek, sebagai cadangan.

Jawabannya berupa CNAME ke nama cluster layanan (api.<project namespace>.svc.cluster.local) diikuti alamatnya; konfigurasikan nama zenavo.internal, karena nama cluster adalah detail internal yang bisa berubah.

Di server yang baru terhubung, DNS privat mulai bekerja satu atau dua menit setelah deployment pertama; /etc/hosts menutupi jeda itu.

Mengubah hostname ​

Hostname baru berlaku pada deploy layanan berikutnya, dan yang lama berhenti ter-resolve saat itu. Variabel yang memakai ${CONTAINER_HOSTNAME} (seperti variabel bersama layanan database) mengikuti perubahan; apa pun yang mencantumkan alamat lama secara langsung, seperti connection string yang Anda tulis sendiri, harus diperbarui.

ID layanan ​

Setiap layanan juga punya ID acak permanen seperti svc-k3j9x2ab, yang ditampilkan di bawah namanya dan di Settings-nya. Volume, log, dan rute API memakainya, jadi mengganti nama layanan atau hostname-nya tidak memindahkan data apa pun.

Volume layanan yang dihapus tetap di server sampai proyek dihapus, sehingga ID-nya tidak pernah diberikan ke layanan lain.

Layanan yang dibuat sebelum ada fitur hostname punya ID yang dibentuk dari namanya (postgresql), yang juga menjadi hostname-nya sampai Anda memilih yang lain.

Port ​

Expose Port di bagian Private menambahkan port yang didengarkan layanan. Setiap port punya:

  • nama, seperti web, yang dipakai di variabel bawaan seperti WEB_PORT;
  • nomor, port di dalam kontainer;
  • tipe: HTTP (bisa diberi domain), TCP atau UDP (bisa dipublikasikan).

Perubahan port dan domain langsung berlaku: Zenavo menyimpannya dan men-deploy ulang proyek.

Tidak berafiliasi dengan Zeabur.