Summary

Obsidian 정적 페이지 생성기인 QuartzK3s 환경에서 설정하는 과정을 기록했습니다.

Cert Manager 설치

Nginx Proxy Manager는 자체로 SSL 인증 툴을 포함하기 때문에 쉽게 SSL 인증서를 발급할 수 있지만 k3sCert Manager라는 프로젝트를 설치해서 SSL 인증서 출력기를 설치해야 합니다.

yaml

Service

파드의 네트워크 관련 설정입니다.

quartz-blog.yaml
apiVersion: v1
kind: Service
metadata:
  name: quartz-blog-svc
  namespace: apps
spec:
  type: ClusterIP       # 클러스터 내부에서만 접근 가능한 서비스
  selector:
    app: quartz-blog
  ports:
    - port: 80
      targetPort: 80

Ingress

클러스터 외부에서 내부 서비스로 들어오는 HTTP/HTTPS 트래픽 라우팅 규칙을 처리합니다.

quartz-blog.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: quartz-blog-ingress
  namespace: apps
spec:
  ingressClassName: traefik             # SSL 자동화를 위해 Traefik IngressClass 지정
  rules:
    - host: obsidian.junbeom.work       # 사용할 도메인
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: quartz-blog-svc
                port:
                  number: 80

Deployment

파드의 앱 실행 설정을 관리합니다.

quartz-blog.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: quartz-blog
  namespace: apps
  labels:
    app: quartz-blog
spec:
  replicas: 1
  selector:
    matchLabels:
      app: quartz-blog
  template:
    metadata:
      labels:
        app: quartz-blog
    spec:
      containers:
        - name: quartz-blog
          image: nginx:alpine
          ports:
            - containerPort: 80
          
          volumeMounts:
            - name: blog-content
              mountPath: /usr/share/nginx/html
              readOnly: true
            - name: nginx-conf
              mountPath: /etc/nginx/conf.d/default.conf
              readOnly: true
          
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "512Mi"
          
          livenessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 10
            periodSeconds: 15
          readinessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 5
            periodSeconds: 10
 
      volumes:
        - name: blog-content
          hostPath:   # 호스트의 볼륨을 컨테이너에 마운트
            path: /home/junbeom/quartz-blog
            type: DirectoryOrCreate
        - name: nginx-conf
          hostPath:   # 호스트의 볼륨을 컨테이너에 마운트
            path: /home/junbeom/quartz-blog/default.conf
            type: File

Tip

모든 객체는 quartz-blog.yaml에 포함됩니다.

Installation

kubectl apply -f quartz-blog.yaml

Success