AKS 기반 도메인 분리 운영 가이드

수정일 월, 12월 29, 2025 시간: 5:15 PM

1. 개요


Kubernetes 환경에서 하나의 애플리케이션을 도메인(또는 접근 경로) 별로 분리하여 운영해야 하는 경우가 있습니다.
예를 들어, 사용자 전용 도메인과 관리자 전용 도메인을 각각 다른 공인 IP로 서비스해야 하는 보안·정책적 요구사항이 발생할 수 있습니다.
이 문서는 AKS(Azure Kubernetes Service)를 기준으로, 동일한 Pod을 대상으로 하되 도메인/IP를 분리하여 구성하는 일반적인 패턴을 설명합니다.



2. 환경 예시

  • Kubernetes 배포 환경: AKS (Azure Kubernetes Service)
  • Ingress Controller: NGINX Ingress Controller 또는 Azure Application Gateway Ingress Controller
  • Service 타입: LoadBalancer (Azure Public IP 할당)
  • 도메인 예시:
    • 사용자용: user.example.com → IP: 20.30.40.50
    • 관리자용: admin.example.com → IP: 20.30.40.60
  • Pod: 동일한 Selector를 가지는 Deployment 혹은 StatefulSet



3. 지원 범위 및 구성 비교

항목단일 IP + Ingress 분기IP 분리 + Service 이중화
공인 IP 개수1개2개 이상
도메인 정책 대응제한적자유롭게 분리 가능
Pod 공유 여부공유공유
관리 편의성간단다소 복잡
보안(도메인/IP 매핑)동일 IP라 정책 위반 가능성정책 충족



4. 발생 가능한 문제 사례

  • 보안 감사 시: 사용자·관리자 도메인이 동일 IP를 사용하면 정책 위반 판정 가능성
  • Pod IP 직접 사용 시: Pod 재배포 시 IP 변경 → 서비스 불가
  • 서비스 이름 하나로만 운영 시: DNS 레코드/IP 관리 단일화 불가



5. 원인

  • 기본적으로 Kubernetes Service는 하나의 ClusterIP 또는 LoadBalancer IP만 점유
  • 동일 IP에 대한 Host 기반 라우팅은 가능하지만, IP 자체 분리는 Service를 분리해야 가능
  • Pod 직접 노출(NodePort, hostNetwork) 시 IP/Port 변경 가능성 및 보안 취약점 존재



6. 운영 권장 사항


6.1 도메인/IP 분리가 필요한 경우

  • 동일 Selector(같은 Pod)를 바라보는 2개의 LoadBalancer 타입 Service 생성
  • 각 Service에 서로 다른 Azure Public IP를 할당
  • 도메인 DNS 레코드를 각기 다른 Public IP로 매핑

6.2 한쪽만 Ingress 사용

  • 한 Service는 LoadBalancer로 IP만 노출
  • 다른 Service는 Ingress Controller를 통해 라우팅
  • 정책과 비용 고려 시 유연한 선택 가능

6.3 자동화 관리

  • Terraform, Bicep, Helm Chart 등을 사용하여 Service/IP 생성 및 매핑 자동화
  • Azure Public IP 자원은 Static으로 할당(동적 할당 방지)



7. 절차 예시 (AKS)

1) Public IP 생성 (Azure CLI)

# 관리자용 Public IP 생성

az network public-ip create \

  --resource-group RG-AKS \

  --name ip-admin \

  --sku Standard \

  --allocation-method static

# 사용자용 Public IP 생성

az network public-ip create \

  --resource-group RG-AKS \

  --name ip-user \

  --sku Standard \

  --allocation-method static


2) Service 매니페스트 (YAML)

apiVersion: v1

kind: Service

metadata:

  name: app-svc-admin

spec:

  type: LoadBalancer

  loadBalancerIP: ADMIN_PUBLIC_IP    # 생성한 관리자 IP 입력

  selector:

    app: myapp

  ports:

    - port: 80

      targetPort: 8080

---

apiVersion: v1

kind: Service

metadata:

  name: app-svc-user

spec:

  type: LoadBalancer

  loadBalancerIP: USER_PUBLIC_IP     # 생성한 사용자 IP 입력

  selector:

    app: myapp

  ports:

    - port: 80

      targetPort: 8080


3) DNS 설정

  • admin.example.comADMIN_PUBLIC_IP
  • user.example.comUSER_PUBLIC_IP







8. 참고 URL


아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.