TL;DR
如何設定輕量級 Web 服務器來執行外部程式來處理 REST 請求?
長版本:
我們通過 Helm 在 Kubernetes 中部署了一組服務和資料庫。有一些可執行檔案執行維護、清理、備份、恢復等,我需要執行(一些按需執行和一些定期執行)。
我想將一個小型、輕量級的 Web 服務器停放在某個安裝有訪問二進制檔案的地方,并在處理 REST 請求時執行它們。
- 服務器需要占用很小的記憶體
- 流量將非常小(例如每個請求之間的分鐘數)
- 安全性不是特別重要(它會在我們信任的區域內運行)
- 服務器需要處理 GET 和 POST(即向外部程式和從外部程式傳遞二進制內容)
我瀏覽了帶有 CGI 模塊的 lighttpd 或 nginx,但我對這些沒有經驗。
你有什么建議嗎?你有一個小例子來展示如何做到這一點嗎?
uj5u.com熱心網友回復:
這是 k8s 原生方法:
... a set of services and databases deployed in Kubernetes... some executables that perform maintenance, cleanup, backup, restore etc...some on-demand & some periodically
如果您可以將這些“可執行檔案”烘焙到映像中,您就可以將這些程式作為k8s 作業按需運行,并將重復作業安排為k8s cronjob。如果這在您的背景關系中是可能的,那么您可以創建一個 k8s 角色,該角色具有呼叫 job/cronjob api 的足夠權限,并將此角色系結到專用的 k8s 服務帳戶。
然后,您使用您選擇的任何語言/框架構建一個迷你 Web 應用程式,使用專用服務帳戶在 k8s 上運行此 Web 應用程式,使用 NodePort/LoadBalancer 將您的 pod 作為服務公開以接收 GET/POST 請求。最后,您對 k8s api-server 進行直接 api 呼叫以根據您的邏輯運行作業。
uj5u.com熱心網友回復:
我想我會做一個小服務。我會選擇 Node,因為這是我熟悉的東西,但是很多語言都采用這種設定服務器的方式,所以選擇你喜歡的東西。
索引.js
const express = require('express')
const { exec } = require('child_process')
const app = express()
const port = 3000
app.get('/os-release', (req, res) => {
exec('cat /etc/os-release', (error, stdout, stderr) => {
res.send(stdout)
})
})
app.listen(port, () => {
console.log(`Listening on port ${port}`)
})
包.json
{
"name": "shell-exec",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"child_process": "^1.0.2",
"express": "^4.17.1"
}
}
檔案
FROM node:alpine
EXPOSE 3000
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . ./
CMD ["node", "index.js"]
如果您需要這樣做,我應該相對容易地發出帶有輸入引數的 POST 請求。我也喜歡您可以將命令的輸出發送回呼叫者。
如果您構建并運行它,您就可以點擊 /os-release 端點并從cat /etc/os-release命令中獲取資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/344111.html
標籤:码头工人 休息 Kubernetes 服务器 计算机图形学
