از NGINX به عنوان پراکسی پایگاه داده استفاده کنید

در زندگی روزمره ما، این امکان وجود دارد که دسترسی مستقیم به پایگاه داده را از دست بدهیم و فقط از طریق خدمات در خوشه Kubernetes قابل دسترسی باشد.
بنابراین، در این نوع شرایط، استفاده از پروکسی می تواند این مشکل اتصال را حل کند. بنابراین امروز به شما نحوه انجام این کار با Nginx را معرفی می کنم.
NGINX چیست؟
برای کسانی که هنوز فرصت کشف چیستی را نداشته اند Nginx. این یک نرم افزار متن باز است که می تواند به عنوان متعادل کننده بار، وب سرور یا پروکسی استفاده شود.
پیکربندی NGINX
پیکربندی Nginx به این شکل است
user nginx;
worker_processes auto;
error_log /dev/stdout info;
pid /var/run/nginx.pid;
events {
worker_connections 1024; ## Default: 1024
}
http {
access_log /dev/stdout combined;
log_format logger-json escape=json '{"source": "nginx", "time": $msec, "resp_body_size": $body_bytes_sent, "host": "$http_host", "address": "$remote_addr", "request_length": $request_length, "method": "$request_method", "uri": "$request_uri", "status": $status, "user_agent": "$http_user_agent", "resp_time": $request_time, "upstream_addr": "$upstream_addr"}';
server {
listen 8080 so_keepalive=on;
location = /health {
auth_basic off;
return 200;
}
}
}
stream {
upstream database {
server [endpoint base de données]:[port base de données];
}
server {
listen [port base de données] so_keepalive=on;
proxy_connect_timeout 60s;
proxy_socket_keepalive on;
proxy_pass database;
}
}
در اینجا، چند چیز برای جایگزینی وجود دارد:
-
[endpoint base de données]
: url برای دسترسی به پایگاه داده -
[port base de données]
: پورت دسترسی به پایگاه داده
جزئیات راه اندازی
http
بخش HTTP برای نمایش یک نقطه پایانی ساده است /health
برای اطمینان از حضور و در دسترس بودن سرویس.
جریان
در مورد ما، این بخشی است که بیشتر از همه به ما علاقه دارد.
بخش upstream
برای ایجاد یک گروه سرور است (در اینجا ما فقط یک تماس داریم database
، اما خواندن آن را کمی ساده تر می کند).
بخش server
او تعریف خواهد کرد:
- Nginx در کدام پورت به ترافیک تغییر مسیر می دهد ->
listen
- جایی که ترافیک را تغییر مسیر می دهد ->
proxy_pass
و همچنین تنظیمات دیگری مانندso_keepalive=on
etproxy_socket_keepalive on;
مهم است که از قطع شدن اتصال در وسط عملیاتی که در پایگاه داده انجام می شود جلوگیری شود.
استقرار در Kubernetes
پس از آماده شدن پیکربندی، می توانید آن را در خوشه خود مستقر کنید.
در اینجا یک قالب برای ایجاد کانفیگ مپ، استقرار و سرویس وجود دارد.
apiVersion: v1
data:
nginx.conf: "user nginx;\r\nworker_processes auto;\r\nerror_log /dev/stdout info;\r\npid
\ /var/run/nginx.pid;\r\nevents {\r\n worker_connections 1024; ## Default:
1024\r\n}\r\n\r\nhttp {\r\n access_log /dev/stdout combined;\r\n log_format
logger-json escape=json '{\"source\": \"nginx\", \"time\": $msec, \"resp_body_size\":
$body_bytes_sent, \"host\": \"$http_host\", \"address\": \"$remote_addr\", \"request_length\":
$request_length, \"method\": \"$request_method\", \"uri\": \"$request_uri\", \"status\":
$status, \"user_agent\": \"$http_user_agent\", \"resp_time\": $request_time,
\"upstream_addr\": \"$upstream_addr\"}';\r\n\r\n\r\n server {\r\n listen
8080 so_keepalive=on;\r\n\r\n location = /health {\r\n auth_basic
off;\r\n return 200;\r\n }\r\n }\r\n}\r\nstream {\r\n upstream
postgres {\r\n server database:port;\r\n
\ }\r\n\r\n server {\r\n listen port so_keepalive=on;\r\n proxy_connect_timeout
60s;\r\n proxy_socket_keepalive on;\r\n proxy_pass postgres;\r\n
\ }\r\n}"
kind: ConfigMap
metadata:
name: nginx-config
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
name: http
- port: port
protocol: TCP
targetPort: port
name: database
selector:
app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
name: nginx
spec:
containers:
- args:
- nginx
- -g
- daemon off;
- -c
- /nginx/etc/config/nginx.conf
image: nginx:1.23.3
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /health
port: nginx
scheme: HTTP
initialDelaySeconds: 10
name: nginx
ports:
- containerPort: 8080
name: nginx
protocol: TCP
- containerPort: port
name: database
protocol: TCP
readinessProbe:
httpGet:
path: /health
port: nginx
scheme: HTTP
initialDelaySeconds: 10
resources:
limits:
memory: 200Mi
requests:
cpu: 50m
memory: 200Mi
volumeMounts:
- mountPath: /nginx/etc/config
name: nginx-config-volume
volumes:
- configMap:
name: nginx-config
name: nginx-config-volume
قبل از استفاده از آن، مطمئن شوید که اطلاعات صحیح را در کانفیگ مپ قرار داده اید، و همچنین پورت مورد نیاز خود را برای نمایش پایگاه داده در استقرار و سرویس خود تنظیم کنید!
استفاده
هنگامی که در خوشه خود مستقر شد، می توانید آن را از طریق a در معرض دید قرار دهید Ingress
یا به سادگی یک پورت فوروارد سرویس را انجام دهید تا بتوانید دستکاری های خود را از دستگاه خود انجام دهید!
این همه برای این هفته است، امیدوارم کمک کند! 🍺