Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah cara saya membuat permintaan kebenaran daripada cronjob ke titik akhir API yang selamat?

Bagaimanakah cara saya membuat permintaan kebenaran daripada cronjob ke titik akhir API yang selamat?

王林
王林ke hadapan
2024-02-09 23:50:14853semak imbas

如何从 cronjobs 向安全 API 端点发出授权请求?

editor php Strawberry akan memperkenalkan kepada anda cara mengeluarkan permintaan kebenaran untuk mendapatkan titik akhir API daripada cronjob. Apabila membangunkan aplikasi web, kita selalunya perlu menggunakan cronjob untuk melaksanakan beberapa tugas yang dijadualkan. Walau bagaimanapun, menghantar permintaan terus daripada cronjob mungkin merupakan risiko keselamatan, jadi kami perlu mengambil beberapa langkah untuk memastikan keselamatan permintaan tersebut. Artikel ini akan menjawab soalan ini secara terperinci dan menyediakan kaedah dan cadangan praktikal untuk membantu pembangun menyelesaikan masalah ini.

Kandungan soalan

Saya mempunyai aplikasi golang yang melakukan kebenaran kunci API melalui JWT 令牌

Saya menggunakan Kubernetes. Jadi, aplikasi golang ini tinggal dalam pod.

Sekarang saya ingin mencipta satu lagi aplikasi untuk cronjob mengakses titik akhir golang seminggu sekali.

Apa yang saya perlukan:

Bagaimana untuk melaksanakan/melangkau kebenaran?

SKIP: Tidak perlu Ingress di sini kerana saya boleh memanggilnya secara dalaman. Adakah ini akan membantu kes ini?

Apa yang saya cuba:

Saya cuba mengekalkan cronjob dan api dalam aplikasi yang sama supaya saya boleh memanggil perkhidmatan dan bukannya titik akhir, tetapi ini juga mempunyai kelemahan. Saya tidak boleh membuat salinan kerana mereka juga menyalin cronjob dan titik akhir yang sama akan dipukul 1*no ofreplicas kali

Saya mahu menghubungi titik akhir "abc.com" seminggu sekali. Ia memerlukan token, dan saya tidak boleh hanya memberikan token. Saya harap ada cara untuk menyelesaikan masalah ini.

Penyelesaian

Ia pasti membantu jika anda hanya menghubungi mereka secara dalaman tanpa mendedahkannya. Jika dua Pod (dan oleh itu penempatan) berjalan di bawah kelompok yang sama, anda boleh menggunakan DNS dalaman Kubernetes.

K8s secara automatik mencipta rekod DNS untuk perkhidmatan yang anda buat, yang boleh digunakan untuk komunikasi dalaman dalam format berikut: <service-name>.<service-namespace>.svc.cluster.local

Maklumat lanjut daripada dokumentasi rasmi: Perkhidmatan dan DNS Pods

Jika ini kedengaran pelik atau membantu memahami intipatinya, cuba fikirkan "titik akhir" sebagai peraturan yang ditambahkan pada fail hos sistem anda: ia pada asasnya bermuara kepada menambahkan peraturan di mana <service-name>. <service-namespace>.svc.cluster.local menunjuk ke alamat IP pod anda , melainkan ianya autolengkap

Sebagai contoh

  • Aplikasi golang anda berjalan di dalam Pod.
  • Anda berada dalam ruang nama go-apps 下创建了一个指向它的服务,名为 go-api.
  • Jika pekerja cron-job anda menjalankan dalam Pods dalam kelompok yang sama, anda boleh menggunakan go-api.go-apps.svc.cluster.local[:<port>] untuk mengakses aplikasi anda tanpa menggunakan Ingress李>

Kebenaran terpulang kepada anda kerana anda biasanya mengendalikannya secara langsung atau menggunakan rangka kerja tertentu. Sebagai contoh, anda boleh menambah laluan titik akhir tersuai dalam aplikasi anda untuk memastikan bahawa satu-satunya pelanggan yang diterima adalah daripada subnet IP peribadi yang sama bagi kluster, sama ada tanpa menggunakan token (tidak disyorkan) atau menggunakan token separa tetap tertentu yang anda jana dan Satu untuk dikawal supaya anda boleh menghantar permintaan kepada sesuatu seperti ini daripada crons anda: go-api.go-apps.svc.cluster.local:8080/api/v1/callWithNoAuth

Atas ialah kandungan terperinci Bagaimanakah cara saya membuat permintaan kebenaran daripada cronjob ke titik akhir API yang selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam