본문으로 건너뛰기

5.2. Ingresses (인그레스)

개요

Ingresses 페이지는 MCM 컨트롤 플레인에서 관리하는 모든 Ingress를 통합적으로 관리하는 페이지입니다. Ingress는 클러스터 외부에서 내부 서비스로 HTTP/HTTPS 트래픽을 라우팅하는 Kubernetes 리소스입니다.

주요 목적:

  • 멀티클러스터 Ingress 통합 관리
  • 외부 HTTP/HTTPS 트래픽 라우팅 설정
  • 호스트 기반 및 경로 기반 라우팅
  • TLS/SSL 인증서 관리
  • PropagationPolicy를 통한 Ingress 배포

Ingress 사용 사례:

  • 도메인 기반 트래픽 라우팅
  • 경로 기반 마이크로서비스 라우팅
  • HTTPS 종료 (TLS Termination)
  • 가상 호스팅
  • 로드 밸런싱

화면 구성

Ingresses 페이지는 테이블 형태로 Ingress 목록을 표시합니다.

Ingresses 메인 화면

페이지 상단 요소

요소설명
네임스페이스 필터특정 네임스페이스의 Ingress만 표시
새로고침 버튼Ingress 목록 갱신
생성 버튼새 Ingress 생성 다이얼로그 열기
검색창Ingress 이름으로 검색

테이블 컬럼

컬럼설명정렬
이름Ingress 이름
네임스페이스Ingress가 속한 네임스페이스
호스트라우팅 대상 호스트명
인그레스 클래스사용하는 Ingress Controller (예: nginx)
엔드포인트할당된 외부 IP 주소 목록
TLSTLS 활성화 상태
경과시간Ingress 생성 후 경과 시간
작업편집/삭제 버튼-

TLS 상태 표시

상태설명표시
활성화됨TLS가 설정되어 HTTPS 사용녹색 아이콘 + "활성화됨"
비활성화됨TLS 미설정, HTTP만 사용회색 표시

엔드포인트 표시

엔드포인트 컬럼은 할당된 외부 IP 주소를 표시합니다:

  • 처음 2개 IP 주소 표시
  • IP가 많은 경우 "+N개 더 보기" 형태로 축약 표시
  • 예: 10.20.10.11, 10.20.10.12, +11개 더 보기

Ingress 상세 정보

Ingress 행을 클릭하면 상세 정보 패널이 열립니다.

Ingress 상세 정보

상세 패널 헤더

요소설명
Ingress 이름선택한 Ingress 이름
네임스페이스Ingress가 속한 네임스페이스
TLS 배지TLS 활성화 시 표시
인그레스 클래스사용하는 Ingress Controller

액션 버튼

버튼기능
새로고침Ingress 정보 갱신
편집YAML 편집 모드
삭제Ingress 삭제

탭 메뉴

개요 탭

Ingress의 기본 정보, 엔드포인트, 라우팅 규칙을 표시합니다.

기본 정보:

항목설명
이름Ingress 이름
네임스페이스Ingress가 속한 네임스페이스
인그레스 클래스사용하는 Ingress Controller
호스트라우팅 대상 호스트명
TLSTLS 활성화 상태
경과시간생성 후 경과 시간
생성일Ingress 생성 일시

엔드포인트:

Ingress에 할당된 외부 IP 주소 목록을 표시합니다:

  • 검색 기능으로 IP 필터링
  • 각 IP 주소에 복사 버튼 제공
  • 클러스터별 다양한 IP 주소 표시

규칙:

호스트별 라우팅 규칙을 표시합니다:

요소설명
호스트명라우팅 대상 도메인 (예: example.com)
TLS 배지해당 호스트의 TLS 활성화 표시
새 탭에서 열기해당 호스트로 브라우저에서 접속

규칙 테이블:

컬럼설명
경로URL 경로 (예: /, /api)
경로 타입Prefix, Exact, ImplementationSpecific
백엔드트래픽을 전달할 Service:Port

TLS 구성 탭

Ingress의 TLS/SSL 인증서 구성을 표시합니다.

TLS 구성 탭

TLS 인증서 정보:

항목설명
시크릿 이름TLS 인증서가 저장된 Secret
호스트인증서가 적용되는 호스트명

참고: TLS 인증서 Secret은 kubernetes.io/tls 타입이어야 하며, tls.crttls.key 키를 포함해야 합니다.

멀티클러스터 정책 탭

Ingress에 적용된 멀티 클러스터 정책 정보를 표시합니다.

멀티클러스터 정책 탭

전파 정책 (PropagationPolicy):

컬럼설명
이름PropagationPolicy 이름
네임스페이스정책이 속한 네임스페이스
범위네임스페이스 범위 정책 / 클러스터 범위 정책
대상 클러스터타겟 클러스터 목록

오버라이드 정책 (OverridePolicy):

클러스터별 커스텀 설정이 있는 경우 표시됩니다.

레이블 탭

Ingress에 적용된 Kubernetes 레이블 목록을 표시합니다.

어노테이션 탭

Ingress에 적용된 어노테이션 목록을 표시합니다.

참고: Ingress Controller별 설정은 주로 어노테이션을 통해 구성됩니다 (예: nginx.ingress.kubernetes.io/rewrite-target).

이벤트 탭

Ingress 관련 Kubernetes 이벤트를 표시합니다.

Ingress 생성

새로운 Ingress를 MCM 컨트롤 플레인에 생성합니다.

입력 항목

항목필수설명
이름Ingress 이름
네임스페이스배포할 네임스페이스
인그레스 클래스사용할 Ingress Controller
호스트라우팅 대상 호스트명
규칙경로 기반 라우팅 규칙
TLS-TLS 인증서 설정 (선택 사항)

Ingress 예시

기본 Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: default
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80

TLS가 적용된 Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tls-ingress
namespace: default
spec:
ingressClassName: nginx
tls:
- hosts:
- example.com
secretName: tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80

다중 경로 Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-path-ingress
namespace: default
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- path: /web
pathType: Prefix
backend:
service:
name: web-service
port:
number: 3000

다중 호스트 Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-host-ingress
namespace: default
spec:
ingressClassName: nginx
rules:
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- host: web.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 3000

YAML 편집

"YAML 편집" 탭에서 Ingress 정의를 직접 작성할 수 있습니다.

Ingress 작업

Ingress 편집

  1. Ingress 선택
  2. 상세 패널에서 "편집" 버튼 클릭
  3. YAML 에디터에서 Ingress 정의 수정
  4. "저장" 버튼 클릭

Ingress 삭제

⚠️ 주의: Ingress를 삭제하면 해당 도메인으로의 외부 접근이 불가능해집니다.

  1. 삭제할 Ingress 선택
  2. 상세 패널에서 "삭제" 버튼 클릭
  3. 확인 다이얼로그에서 Ingress 이름 입력
  4. "삭제" 버튼 클릭

사용 예시

시나리오 1: 기본 Ingress 생성

  1. "생성" 버튼 클릭
  2. Ingress 정보 입력:
    • 이름: web-ingress
    • 네임스페이스: production
    • 인그레스 클래스: nginx
    • 호스트: www.example.com
    • 경로: /web-service:80
  3. "생성" 버튼 클릭
  4. PropagationPolicy로 타겟 클러스터 지정
  5. DNS에서 도메인을 Ingress 엔드포인트로 지정

시나리오 2: HTTPS Ingress 설정

  1. TLS Secret 먼저 생성:
    apiVersion: v1
    kind: Secret
    metadata:
    name: tls-secret
    namespace: production
    type: kubernetes.io/tls
    data:
    tls.crt: <base64-encoded-cert>
    tls.key: <base64-encoded-key>
  2. Ingress 생성 시 TLS 설정 추가:
    • TLS Secret: tls-secret
    • 호스트: www.example.com
  3. TLS 구성 탭에서 인증서 정보 확인

시나리오 3: 마이크로서비스 경로 라우팅

  1. "생성" 버튼 클릭 → YAML 편집 탭 선택
  2. 다중 경로 규칙 작성:
    • /api/*api-service:8080
    • /auth/*auth-service:8081
    • /frontend-service:3000
  3. "생성" 버튼 클릭
  4. 각 경로로 트래픽이 올바르게 라우팅되는지 확인

시나리오 4: Ingress 엔드포인트 확인

  1. Ingress 목록에서 확인할 Ingress 클릭
  2. 개요 탭에서 엔드포인트 섹션 확인
  3. 할당된 외부 IP 주소 목록 확인
  4. 필요시 검색 기능으로 특정 IP 찾기
  5. 복사 버튼으로 IP 주소 복사

시나리오 5: 멀티클러스터 Ingress 배포

  1. Ingress 생성
  2. PropagationPolicy 생성:
    • 리소스 셀렉터: Ingress 지정
    • 타겟 클러스터: 배포할 클러스터 선택
  3. 상세 패널에서 "멀티클러스터 정책" 탭 확인
  4. 각 클러스터에서 할당된 엔드포인트 확인
  5. Global Load Balancer 또는 DNS 라운드 로빈으로 통합

관련 개념

Ingress Controller

Ingress 리소스를 실제로 처리하는 컨트롤러:

Controller특징
nginx가장 널리 사용, 풍부한 기능
traefik자동 설정, Let's Encrypt 통합
haproxy고성능, 엔터프라이즈 기능
istio서비스 메시 통합
kongAPI Gateway 기능

경로 타입 (Path Type)

타입설명예시
Prefix경로 접두사 매칭/api/api, /api/v1 모두 매칭
Exact정확한 경로 매칭/api/api만 매칭
ImplementationSpecificController에 따라 다름Controller 문서 참조

TLS/SSL 설정

Ingress에서 HTTPS를 사용하려면:

  1. TLS Secret 생성:

    kubectl create secret tls my-tls-secret \
    --cert=path/to/cert.crt \
    --key=path/to/cert.key \
    -n namespace
  2. Ingress에 TLS 설정:

    spec:
    tls:
    - hosts:
    - example.com
    secretName: my-tls-secret
  3. 자동 인증서 관리 (cert-manager):

    annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod

Ingress 어노테이션

nginx Ingress Controller의 주요 어노테이션:

어노테이션설명
nginx.ingress.kubernetes.io/rewrite-targetURL 재작성
nginx.ingress.kubernetes.io/ssl-redirectHTTPS 리다이렉트
nginx.ingress.kubernetes.io/proxy-body-size요청 본문 크기 제한
nginx.ingress.kubernetes.io/proxy-connect-timeout연결 타임아웃
nginx.ingress.kubernetes.io/affinity세션 어피니티

멀티클러스터 Ingress 관리

MCM을 통해 Ingress를 멀티클러스터에 배포할 때:

PropagationPolicy:

  • 동일한 Ingress를 여러 클러스터에 복제
  • 클러스터 선택 및 배포 전략 설정

OverridePolicy:

  • 클러스터별로 다른 Ingress 설정 적용
  • 예: 클러스터별 다른 인증서 사용

Multi-Cluster Ingress 패턴:

  • 각 클러스터에 동일한 Ingress 배포
  • Global Load Balancer로 클러스터 간 트래픽 분산
  • DNS 기반 지역 라우팅

문제 해결

Ingress가 작동하지 않는 경우:

  • Ingress Controller가 설치되어 있는지 확인
  • ingressClassName이 올바른지 확인
  • 백엔드 Service가 존재하고 정상 동작하는지 확인
  • Service의 포트가 올바른지 확인

TLS가 작동하지 않는 경우:

  • TLS Secret이 존재하는지 확인
  • Secret 타입이 kubernetes.io/tls인지 확인
  • 인증서 호스트명이 Ingress 호스트와 일치하는지 확인
  • 인증서가 만료되지 않았는지 확인

외부에서 접근이 안 되는 경우:

  • Ingress Controller Service가 LoadBalancer 타입인지 확인
  • External IP가 할당되었는지 확인
  • 방화벽 규칙 확인
  • DNS 설정 확인

다음 단계