برنامه نویسی

از 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 et proxy_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 یا به سادگی یک پورت فوروارد سرویس را انجام دهید تا بتوانید دستکاری های خود را از دستگاه خود انجام دهید!


این همه برای این هفته است، امیدوارم کمک کند! 🍺

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا