Kubernetes 에서 nginx 적용하기!

LeeJaeG·2023년 8월 14일
0
post-thumbnail

지난 포스트에서 nginx 에 vue 빌드 파일을 넣고 docker-compose를 하는 방법을 소개했다.

오늘 포스트 에서는 nginx와 certbot을 쿠버네티스 상에서 배포하고 관리할 수 있도록 하는
방법을 소개하려한다.

나중에는

준비

configmap 적용시 namespace가 같은지 확인해야한다.
적용할려는 파일의 정보의 문법 또한 확인(당연한걸..)
오류 발생시 describe와 logs 확인이 무조건이다.

kubectl create configmap nginx-app-config --from-file data/nginx/conf.d/app.conf -o yaml

(파일로 만들어놓기 nginx폴더에 넣어두기 apply로 사용하기)

app.conf 파일명과 내용을 configmap으로 만들어주는 명령어

밑은 적용방법

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.nginx.webserver: deployment
  name: nginx-server # deployment의 이름
spec:
  replicas: 1 # 개체수
  selector:
    matchLabels:
      app.nginx.webserver: node # pod의 label을 선택해서 가져오기
  template:
    metadata:
      labels:
        app.nginx.webserver: node # pod의 label을 지정
    spec:
      containers:
        - image: nginx:latest
          name: nginx-server
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
          volumeMounts:
            - mountPath: /etc/nginx/conf.d
              name: nginx-confi
      volumes: # 참고할 volume 지정
        - name: nginx-confi # volume 의 이름 지정
          configMap:
            name: nginx-app-config
         

서비스 연결-외부와 연결

apiVersion: v1

kind: Service

metadata:
  name: app-nginx-webserver
  namespace: cube

spec:
  selector:
    app: test-nginx

  ports:
    - port: 80 # 서비스 포트
      targetPort: 80 # 타켓, 즉 pod의 포트
      name: http
    - port: 433
      targetPort: 433
      name: https
  type: LoadBalancer

nginx-app-config.yaml 파일

apiVersion: v1
data:
  app.conf: |
    server {
        listen 80;
        server_name localhost;
        server_tokens off;

        location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
        }

        location /api {
        proxy_pass http://proxy.com:38071;
        }
    }
kind: ConfigMap
metadata:
  creationTimestamp: "2023-01-10T05:27:23Z"
  name: nginx-app-config
  namespace: cube
  resourceVersion: "31940263"
  uid: 91450a3b-4ffb-4b0d-a652-cc692867b1b1

쿠버네티스에 볼륨을 설정하고 싶을때 아래의 파일들을 참고 하길 바란다.

#vue-pv-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: vue-dist-pv
  namespace: cube
  labels:
    app: pv-vue-dist
spec:
  storageClassName: vue-dist
  capacity:
    storage: 1Gi
  accessModes:
    - ReadOnlyMany
  nfs:
   server: 192.168.15.132
   path: "/root/go/src/github.com/wlrmworms/vue/dist"

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: vue-dist-pvc
  namespace: cube
  labels:
    app: pvc-vue-dist
spec:
  storageClassName: vue-dist
  resources:
    requests:
      storage: 100M
  accessModes:
    - ReadOnlyMany
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    # app.nginx.webserver: deployment
    app: test-nginx # label 지정
  name: nginx-server # deployment의 이름
  namespace: cube
spec:
  replicas: 1 # 개체수
  selector:
    matchLabels:
      app: test-nginx
  template:
    metadata:
      labels:
        app: test-nginx
    spec:
      containers:
        - image: nginx:latest
          name: nginx-server
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
              name: http
            - containerPort: 443
              name: https
          volumeMounts:
            - mountPath: /etc/nginx/conf.d
              name: nginx-confi
            - mountPath: /usr/share/nginx/html
              name: vue-dist-nfs

      
      volumes: # 참고할 volume 지정
        - name: nginx-confi # volume 의 이름 지정
          configMap:
            name: nginx-app-config
        - name: vue-dist-nfs
          persistentVolumeClaim:
            claimName: vue-dist-pvc

nfs 볼륨 생성 pv,pvc생성 후 디플로이먼트생성

systemctl start nfs-server

systemctl enable nfs-server

kubectl apply -f vue-pv.yaml

kubectl get pv pvc 둘다 bound 됬는지 확인하기

echo '/root/go/src/github.com/wlrmworms/vue/dist 192.168.15.0/24(rw,sync,no_root_squash)' >> /etc/exports // nfs경로 넣기

kubectl apply -f pod_yaml/webserver.yaml 실행

pv,pvc 강제 삭제 명령어


kubectl patch pv vue-dist-pvc -p '{"metadata": {"finalizers": null}}’

kubectl delete pv vue-dist-pv --grace-period=0 --force

오류

certbot 같은 도메인으로 시간내 인증서를 여러번 받으면 126h 동안 인증서를 받지 못한다.

nginx 든 다른 이미지들을 받을때 이미지 다운로드 횟수가 200회 이다 보니 하버를 설치하여 이미지를 저장해두고 사용하는게 좋아보인다!

나중에!

디플로이먼트 속 certbot 파드 하나 nginx의 파드가 만들어지고

certbot 의 파드가 볼륨 하나 | 하나의 서비스 공유 볼륨에 저장 시켜서 nginx 사용하게 만들기

profile
코딩으로 경제적 자유까지

0개의 댓글