개요
RKE2 기반 Kubernetes 클러스터에서 서비스를 Ingress로 외부에 노출하는 테스트를 진행했습니다. Ingress 리소스를 작성하기 전에 클러스터 구성을 확인했지만 사용할 수 있는 IngressClass가 존재하지 않았습니다.
문제 상황
Ingress를 구성하기 위해 현재 등록된 IngressClass를 조회했으나 리소스가 존재하지 않는다는 결과가 반환됐습니다.
$ kubectl get ingressclass
No resources found영향과 비영향을 분리했습니다
확인된 영향은 Ingress를 통한 외부 HTTP 진입 경로를 구성할 수 없다는 점입니다. 이 출력만으로 Pod, Service, 노드 네트워크 또는 애플리케이션 자체가 실패했다고 결론 내릴 수는 없습니다.
현재 확정된 사실
kubectl get ingressclass결과가 비어 있었습니다.- Ingress YAML에 넣을 검증된 클래스 이름이 없었습니다.
- 클래스가 없다는 사실만으로 Controller 설치 여부까지 확정할 수는 없습니다.
- 정상 외부 응답과 Controller 로그는 아직 확보하지 못했습니다.
가설을 계층별로 나눴습니다
요청 경로로 진단했습니다
Client
→ DNS / Load Balancer
→ Ingress Controller
→ Ingress rule + IngressClass
→ Service
→ Ready PodIngress 리소스는 라우팅 선언일 뿐 요청을 직접 처리하지 않습니다. 따라서 Controller가 실제로 실행되고 해당 Class를 감시하는지 먼저 확인해야 합니다.
확인한 명령과 아직 확인할 명령
kubectl get ingressclass
# No resources foundkubectl get pods -n kube-system
kubectl get daemonset,deploy -A
kubectl get helmchart -A
kubectl get svc,endpoints -A
kubectl describe ingress <name>두 묶음을 구분해 실행하지 않은 명령에 결과가 있었던 것처럼 보이지 않게 했습니다.
현재 원인 범위
사용 가능한 Ingress Controller가 설치되지 않았거나, Controller는 있지만 IngressClass를 등록하지 않았거나, RKE2 기본 애드온이 비활성화·미배포된 상태 중 하나로 범위를 좁혔습니다.
IngressClass 없음은 원인 후보를 좁히는 관찰 결과이며 Controller 리소스와 로그를 봐야 확정할 수 있습니다.해결 경로를 비교했습니다
다음 조치 순서
kube-system에서 ingress 관련 Pod와 HelmChart를 찾습니다.- 배포가 있다면 Events·로그·Service 포트를 확인합니다.
- 없다면 RKE2 설치 옵션에서 기본 Controller 비활성화 여부를 확인합니다.
- 기존 구성을 복구하거나 한 종류의 Controller만 설치합니다.
- 생성된 IngressClass 이름을 YAML에 명시합니다.
- 테스트 Service → Ingress → 외부 HTTP 순서로 검증합니다.
해결 완료 기준
- Ingress Controller Pod가 Ready 상태여야 합니다.
kubectl get ingressclass에 사용할 클래스가 보여야 합니다.- Ingress Address와 Events에 오류가 없어야 합니다.
- Service Endpoints가 실제 Pod를 가리켜야 합니다.
- 클러스터 외부에서 테스트 호스트로 HTTP 200을 확인해야 합니다.
이 증거가 모두 생기기 전까지 상태는 Investigating입니다.
현재 결과
문제를 애플리케이션 YAML 하나로 좁히지 않고 Controller와 클러스터 애드온 계층으로 이동시켰습니다. 그러나 아직 외부 응답을 복구하지 않았으므로 해결 사례가 아니라 진행 중인 진단 기록으로 공개합니다.
해결 후 남길 운영 문서
- Controller 종류·버전·설치 방식
- IngressClass 이름과 기본 클래스 여부
- 노출 포트, DNS, TLS 연결 구조
- 재현 가능한 설치 매니페스트 또는 Helm values
- Ready·라우팅·외부 응답 확인 명령
지금 부족한 증거
Controller Pod 목록, RKE2 설정 파일, HelmChart 상태, 테스트 Service·Ingress YAML, 외부 curl 응답이 아직 기록에 없습니다. 이 다섯 자료가 있어야 원인을 확정하고 “해결 완료”로 바꿀 수 있습니다.
배운 점
Ingress가 동작하지 않는다고 처음부터 YAML 문법만 수정하면 안 됩니다. 외부 요청이 통과하는 각 계층을 나누고, 선언 리소스인 Ingress와 실제 데이터 평면인 Controller를 구분해야 합니다.