pfSense 와 CertManager 연동 오류

2025. 11. 29. 14:26·인프라/Kubernetes
반응형

집안의 홈서버에서 k3s 3node 를 이용한 HA 구성 연습을 하면서..

일주일동안 진전이 없던 부분이 있었다.

바로 traefik 기본 설정된 ACME 에서는 HA 구성이 안된다는 것을 알고 별도의 CertManager 를 이용하는 것이었는데..

아무리 해도 동작이 안되었다.

 

검색해본 모든 포스트를 해보고 각종 AI 의 솔루션들을 모두 적용해본것 같다.

Lets Encrypt 에서 내 도메인으로 인증시 .well-known/~~~ 주소로 들어와서 확인을 하게 되는데

이 부분이 지속적으로 404 에러와 함께 동작하지 않았다.

 

그 부분을 기록으로 남겨보려고 한다.

 

상황

내 서버는 일단 pfSense 가 공인아이피를 받아서 내부ip로 NAT 를 하는 구조이다.

또한 그 밑에는 k3s 3개 노드가 존재한다.

아이피는 10.34.1.151~153까지이고  10.34.1.150 으로 VIP를 설정해 두었다.

 

설치는 

* k3s with traefik

* metallb

* 샘플 웹서비스

* cert-manager

 

여기까지 되어 있다.

 

이슈상황

 

여기까지가 기본 실전 편에 작성된 내용이다.

 

인증서도 이런식으로 나온다.

그럼 상세 로그는 어떻게 되어 있을까?

 

 

이렇게 pending 이 되어 있다.

 

gglabadmin@k3s-node1:/k8s$ sudo kubectl describe challenge filmlife-net-tls-1-975396145-3416726947
Name:         filmlife-net-tls-1-975396145-3416726947
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  acme.cert-manager.io/v1
Kind:         Challenge
Metadata:
  Creation Timestamp:  2025-11-29T05:08:21Z
  Finalizers:
    acme.cert-manager.io/finalizer
  Generation:  1
  Owner References:
    API Version:           acme.cert-manager.io/v1
    Block Owner Deletion:  true
    Controller:            true
    Kind:                  Order
    Name:                  filmlife-net-tls-1-975396145
    UID:                   f12104d5-7dc8-4698-9dba-1239ad77afaa
  Resource Version:        2561
  UID:                     a332f39e-4f8b-4520-9b84-ebe67612f56e
Spec:
  Authorization URL:  https://acme-staging-v02.api.letsencrypt.org/acme/authz/246692703/20467262633
  Dns Name:           filmlife.net
  Issuer Ref:
    Group:  cert-manager.io
    Kind:   ClusterIssuer
    Name:   letsencrypt-staging
  Key:      49xTkDoY-6f9xWD7a0cRlD42YxoP6YbKZan9qXdzk3E.Hlx_gzxyxrU8i0M-dfpCkbRXI1EL21pGiBbC4v_vsKU
  Solver:
    http01:
      Ingress:
        Class:  traefik
  Token:        49xTkDoY-6f9xWD7a0cRlD42YxoP6YbKZan9qXdzk3E
  Type:         HTTP-01
  URL:          https://acme-staging-v02.api.letsencrypt.org/acme/chall/246692703/20467262633/TcD2yw
  Wildcard:     false
Status:
  Presented:   true
  Processing:  true
  Reason:      Waiting for HTTP-01 challenge propagation: wrong status code '404', expected '200'
  State:       pending
Events:
  Type    Reason     Age   From                     Message
  ----    ------     ----  ----                     -------
  Normal  Started    5m7s  cert-manager-challenges  Challenge scheduled for processing
  Normal  Presented  5m7s  cert-manager-challenges  Presented challenge using HTTP-01 challenge mechanism

 

여기 보면 status reason 부분을 보면

Waiting for HTTP-01 challenge propagation: wrong status code '404', expected '200'

 

이렇게 나온다. lests encrypt 에서 인증서 발급을 하기 위해 도메인 인증을 하고 내 서버에 접근했을때 특정 url 에 토큰을 넘겼을때 200 으로 리턴을 하게 되고 그것을 검증하는 과정이 있는데 그때 200 이 아니라 404가 온다는 것이다.

 

내가 아는 모든 gpt 에 물어보니...

http 80 으로 요청이 올때 certmanager pod 가 응답을 해야하는데 내 샘플 웹서비스로 응답이 들어온다는 것이다.

그래서 잘못된 라우팅을 자꾸 한다고 한다.

참 이상했다.

 

% curl -I http://filmlife.net/.well-known/acme-challenge/49xTkDoY-6f9xWD7a0cRlD42YxoP6YbKZan9qXdzk3E
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, must-revalidate
Content-Length: 87
Content-Type: text/plain; charset=utf-8
Date: Sat, 29 Nov 2025 05:16:08 GMT

 

이상한건.. 내 노트북에서 호출하면 이렇게 잘 나오는데???

왜그럴까????

 

lets encrypt 인증서를 발급할때는

1. letsencrypt 측에서 출발해서 내 서버에 검증

2. 내부에서 다시한번 인증 검증

 

이렇게 두 단계를 모두 수행하게 된다고 하는데.

외부에서 curl 이 잘되는 것은 1번의 이유때문이고 이 부분은 문제가 없었던 것인데.

 

내부에서 검증을 시도하려고 할때는

중간에 있는 pfsense 방화벽에서.. filmlife.net 의 도메인을 보고.. 어 내꺼네?? 하고 무시해버린다고 한다.

그래서 아래 설정을 켜면 정상적으로 라우팅을 해준다고 한다.

pfSense 설정 변경

맨위에 pure Nat 로 하고 아래 automatic outbound Nat for Reflection 을 체크

하니까 해결되었다.

 

gglabadmin@k3s-node1:/k8s/apps/filmlife$ sudo kubectl get challenges 
NAME                                      STATE     DOMAIN         AGE
filmlife-net-tls-1-975396145-1653609454   pending   filmlife.net   3m23s
gglabadmin@k3s-node1:/k8s/apps/filmlife$ sudo kubectl get challenges 
NAME                                      STATE   DOMAIN         AGE
filmlife-net-tls-1-975396145-1653609454   valid   filmlife.net   3m25s
gglabadmin@k3s-node1:/k8s/apps/filmlife$ sudo kubectl get challenges 
No resources found in default namespace.

 

pending -> valid -> 사라짐

반응형

'인프라 > Kubernetes' 카테고리의 다른 글

k3s Cert-Manager 에서 외부 서비스로 Proxy  (0) 2025.11.30
k3s 에서 dnszi 유동아이피 연동 스케쥴 추가하기  (0) 2025.11.30
(실전) k8s 설치부터 https 서비스 포팅까지  (0) 2025.11.23
(연습) k3s HA 구성 트래픽 흐름 구조  (0) 2025.11.21
(연습) k3s VIP 설정 (MetalLB)  (0) 2025.11.20
'인프라/Kubernetes' 카테고리의 다른 글
  • k3s Cert-Manager 에서 외부 서비스로 Proxy
  • k3s 에서 dnszi 유동아이피 연동 스케쥴 추가하기
  • (실전) k8s 설치부터 https 서비스 포팅까지
  • (연습) k3s HA 구성 트래픽 흐름 구조
GG.Lab
GG.Lab
GG.Lab
    반응형
  • GG.Lab
    GG.Lab
    GG.Lab
  • 전체
    오늘
    어제
    • 분류 전체보기 (45) N
      • APP (25)
        • 함쓰가계부 (22)
        • 랭킹구구단 (3)
      • 인프라 (15) N
        • Docker (1)
        • Proxmox (4)
        • Kubernetes (7) N
        • Network (3)
      • DB (5)
        • Postgresql (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 함쓰 메뉴얼
    • 함쓰 카페
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    external-svc
    함쓰
    pfsense
    함께쓰는가계부
    푸시인식
    가계부편의기능
    플러터
    구구단
    Kubernetes
    함쓰가계부
    sms자동등록
    쿠버네티스
    푸시인식가계부
    K8s
    Proxmox
    연인가계부
    k3s
    traefik
    해외통화지원
    공유가계부
    k3s외부서비스
    커플가계부
    문자자동인식가계부
    부부가계부
    앱출시
    Flutter
    문자자동인식
    sms인식가계부
    해외통화가계부
    자작앱
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
GG.Lab
pfSense 와 CertManager 연동 오류
상단으로

티스토리툴바