[본투비엔지니어] 나에게 베어본만 주어진다면?? (10)

2026. 2. 1. 20:57·project/본투비엔지니어

이번에는 HTTPS 를 적용해 보겠습니다. 기존에 도메인을 Cloudflare 에서 관리하고 있어서 같이 활용해서 적용하겠습니다.

 

1. Cloudflare 토큰

 

  • Cloudflare 대시보드 → My Profile → API Tokens
  • Create Token → Edit zone DNS 템플릿 선택
  • Zone Resources → Include - Specific zone - heejunp.com 선택

 

 

이렇게 토큰이 준비 됐습니다.

2. Cert-Manager 설치

쿠버네티스에서 HTTPS를 적용하는 방법은 크게 세 가지가 있습니다.

  1. 수동 관리 : openssl로 직접 인증서를 만들고, 쿠버네티스 Secret에 파일로 업로드하고, 3개월마다 알람 맞춰놓고 갱신합니다. 
  2. 클라우드 관리형 인증서 : AWS ACM이나 Google Managed Certificate를 씁니다.
  3. Cert-Manager : 쿠버네티스 내부에서 인증서의 요청, 발급, 갱신을 '자동화' 해주는 표준 도구입니다.

쿠버네티스에는 인증서 발급과 갱신을 자동으로 관리해주는 'cert-manager' 가 있습니다.

# 1. Jetstack 레포지토리 추가
helm repo add jetstack https://charts.jetstack.io
helm repo update

# 2. cert-manager 설치 (CRD 포함)
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --set installCRDs=true

 

잘 설치가 됐습니다.

3. Cloudflare 연동

이제 'cert-manager' 에게 Cloudflare API 토큰을 쥐어줘야 합니다.

API 토큰을 Secret 에 저장

'cloudflare-secret.yaml' 파일을 작성 하겠습니다.

apiVersion: v1
kind: Secret
metadata:
  name: cloudflare-api-token-secret
  namespace: cert-manager
type: Opaque
stringData:
  api-token: [복사한_토큰_붙여넣기]

 

아래 명령어로 생성

kubectl apply -f cloudflare-secret.yaml

ClusterIssuer 생성 (인증서 발급 대행사 설정)

Let's Encrypt 프로덕션 서버를 사용하고, 검증은 Cloudflare DNS 로 하겠습니다. 'cluster-issuer.yaml' 파일을 작성하겠습니다.

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    # 이메일은 인증서 만료 알림용
    email: [본인 이메일 입력]
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - dns01:
        cloudflare:
          email: [본인 이메일 입력]
          apiTokenSecretRef:
            name: cloudflare-api-token-secret
            key: api-token

 

아래 명령어로 생성

kubectl apply -f cluster-issuer.yaml

4. Ingress 에 HTTPS 적용

지난 편에 작성한 'foundry.yaml' 의 Ingress 부분에 추가하겠습니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: foundry-ingress
  annotations:
    # 1. 아까 만든 발급 대행사(ClusterIssuer)를 지정
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  # 2. TLS 설정 추가
  tls:
  - hosts:
    - foundry.heejunp.com
    secretName: foundry-tls-secret # 인증서가 저장될 곳 이름 (자동 생성됨)
  rules:
  - host: foundry.heejunp.com
    http:
      # ... (기존 라우팅 규칙들) ...

 

아래 명령어로 업데이트

kubectl apply -f foundry.yaml

 

하지만 역시 한 번에 되지 않습니다...

kubectl describe challenge [챌린지이름]

 

위의 명령어로 확인해보니 

 

원인을 찾아보니

 

  • DNS 해석의 오류: 쿠버네티스 클러스터 내부의 DNS(CoreDNS)는 기본적으로 호스트(노드)의 /etc/resolv.conf 설정을 상속받습니다
  • ISP DNS의 개입: 홈랩 환경(LG U+ 인터넷)이다 보니, 공유기가 DHCP를 통해 통신사 기본 DNS 주소를 할당해 줬습니다.
  • 충돌 발생: LG U+ DNS 서버가 Let's Encrypt의 도메인(acme-v02...)을 제대로 해석하지 못하고, 자사의 엉뚱한 IP(아마도 차단 페이지나 내부 라우팅 IP)로 응답해버렸습니다.
  • 결과: Cert-Manager는 Let's Encrypt가 아닌 LG U+ 서버의 443 포트로 접속을 시도하다가 연결 거부(Timeout)를 당했습니다.

해결하기 위해

CoreDNS 설정 수정

kubectl edit cm coredns -n kube-system

 

Upstream DNS 변경

# 수정 전
forward . /etc/resolv.conf

# 수정 후 (직접 지정)
forward . 8.8.8.8 1.1.1.1

CoreDNS 재시작 및 챌린지 갱신

kubectl delete pod -n kube-system -l k8s-app=kube-dns

kubectl delete pod -n cert-manager --all

# 전체 삭제
kubectl delete challenge --all

확인

kubectl get certificate

 

성공 했습니다.

'project > 본투비엔지니어' 카테고리의 다른 글

[본투비엔지니어] 나에게 베어본만 주어진다면?? (11)  (0) 2026.02.03
[본투비엔지니어] 나에게 베어본만 주어진다면?? (9)  (0) 2026.01.31
[본투비엔지니어] 나에게 베어본만 주어진다면?? (8)  (0) 2026.01.29
[본투비엔지니어] 나에게 베어본만 주어진다면?? (7)  (0) 2026.01.29
[본투비엔지니어] 나에게 베어본만 주어진다면?? (6)  (0) 2026.01.29
'project/본투비엔지니어' 카테고리의 다른 글
  • [본투비엔지니어] 나에게 베어본만 주어진다면?? (11)
  • [본투비엔지니어] 나에게 베어본만 주어진다면?? (9)
  • [본투비엔지니어] 나에게 베어본만 주어진다면?? (8)
  • [본투비엔지니어] 나에게 베어본만 주어진다면?? (7)
heejunp
heejunp
희준개발
  • heejunp
    희준개발
    heejunp
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 회고 (1)
      • project (13)
        • 본투비엔지니어 (12)
        • 페어쉐어 (1)
      • java (16)
      • spring (1)
      • go (1)
      • web (1)
      • cloud (1)
      • cloudflare (1)
      • database (1)
      • algorithm (16)
      • OS (1)
      • ai (1)
      • 기타 (2)
      • 오류 (1)
      • 생각정리 (2)
      • 자격증 (1)
        • RHCSA (1)
      • linux (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    heejunp
    [본투비엔지니어] 나에게 베어본만 주어진다면?? (10)
    상단으로

    티스토리툴바