잡동사니

쿠버네티스(Kubernetes)에서 NGINX 설정 변경하기 본문

IT/Open Source

쿠버네티스(Kubernetes)에서 NGINX 설정 변경하기

yeTi 2019. 12. 12. 16:09

안녕하세요. yeTi입니다.
오늘은 쿠버네티스로 관리하는 NGINX의 설정을 변경하는 방법을 공유하겠습니다.

기본적인 컨셉은 ConfigMap에 설정 정보를 등록하고
ConfigMap의 정보를 volume의 파일로 저장하는 방식입니다.

/etc/nginx/nginx.conf의 설정 변경하기

ConfigMap을 설정합니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-conf
data:
  nginx-main.conf: |
    user  nginx;
    worker_processes  2;

    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;

    events {
        worker_connections  1024;
    }

    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx/access.log  main;

        sendfile        on;
        #tcp_nopush     on;

        keepalive_timeout  65;

        #gzip  on;

        include /etc/nginx/conf.d/*.conf;
    }

볼륨을 마운트합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
      - name: nginx-test
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /etc/nginx/nginx.conf # mount nginx-conf volumn to /etc/nginx/nginx.conf
          readOnly: true
          name: nginx-main-conf-test
          subPath: nginx.conf
      volumes:
      - name: nginx-main-conf-test
        configMap:
          name: nginx-conf
          items:
            - key: nginx-main.conf
              path: nginx.conf

위의 내용을 간략하게 설명하면 다음과 같습니다.

  1. nginx-main-conf-test로 볼륨을 생성한다. 이 때 ConfigMap의 정보를 맵핑합니다.
  2. /etc/nginx/nginx.conf로 볼륨을 마운트합니다. 이 때 subPath옵션을 추가하여 다른 파일들이 숨는 현상을 막아야한다. [Kubernetes] ConfigMap 참조

/etc/nginx/conf.d에 설정 추가하기

ConfigMap을 설정합니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-conf-load-test
data:
  nginx.conf: |
    upstream model-server-load-test {
      ip_hash;
      server model-server-load-test:8000;
    }

    server {
      location / {
            proxy_pass http://model-server-load-test/;
        }
      listen 80;
      server_name localhost;
    }

볼륨을 마운트합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
      - name: nginx-test
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /etc/nginx/conf.d 
          readOnly: true
          name: nginx-conf-test
      volumes:
      - name: nginx-conf-test
        configMap:
          name: nginx-conf
          items:
            - key: nginx.conf
              path: nginx.conf

위의 내용을 간략하게 설명하면 다음과 같습니다.

  1. nginx-conf-test로 볼륨을 생성한다. 이 때 ConfigMap의 정보를 맵핑합니다.
  2. /etc/nginx/conf.d로 볼륨을 마운트합니다. 기존 파일이 없기 때문에 폴더에 마운트해도 됩니다.
Comments