TheKoguryo's 기술 블로그

 Version 2023.11.20

4.1.3 NGINX Ingress Controller에서 HOST 기반 라우팅(feat. OCI DNS)

Ingress Controller에서 도메인 네임을 기반하여 라우팅하기 위해 OCI DNS를 사용하는 방법을 확인합니다.

OCI DNS 서비스 사용하기

이미 구입한 Domain Name이 있다는 전제하에 설정하는 과정입니다. 테스트를 위해 GoDaddy 사이트에서 구매한 도메인 네임(thekoguryo.xyz)을 사용하였습니다. 이전에 사용한 freenom은 2023년 4월 기준 정상 서비스가 되지 않아, GoDaddy를 이용해 테스트 하였습니다.

11.1 Domain Name과 매핑하기를 통해 사전에 설정된 상태를 기준으로 진행합니다.

HOST 기반 라우팅 테스트

HOST 이름에 따라 라우팅 서비스를 달리하는 경우입니다.

  1. 테스트를 위한 샘플 앱을 배포합니다. PATH 기반 라우팅 때 사용한 앱을 그대로 사용합니다.

    배경 색깔이 다른 두개의 웹페이지를 배포합니다.

    kubectl create deployment nginx-blue --image=thekoguryo/nginx-hello:blue
    kubectl expose deployment nginx-blue --name nginx-blue-svc --port 80
    kubectl create deployment nginx-green --image=thekoguryo/nginx-hello:green
    kubectl expose deployment nginx-green --name nginx-green-svc --port 80
    
  2. ingress 설정 YAML(host-basic.yaml)을 작성합니다.

    • blue.ingress.thekoguryo.xyz 요청은 nginx-blue-svc 로 라우팅
    • green.ingress.thekoguryo.xyz 요청은 nginx-green-svc로 라우팅
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-host-basic
    spec:
      ingressClassName: nginx
      rules:
      - host: blue.ingress.thekoguryo.xyz
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-blue-svc
                port:
                  number: 80
      - host: green.ingress.thekoguryo.xyz
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-green-svc
                port:
                  number: 80
    
  3. 작성한 host-basic.yaml을 배포합니다.

    $ kubectl apply -f host-basic.yaml 
    ingress.networking.k8s.io/ingress-host-basic created
    $ $ kubectl get ingress
    NAME                          CLASS   HOSTS                                                      ADDRESS          PORTS   AGE
    ingress-host-basic            nginx   blue.ingress.thekoguryo.xyz,green.ingress.thekoguryo.xyz   152.xx.xxx.xxx   80      44s
    

OCI DNS 서비스 설정

blue.ingress.thekoguryo.xyz, green.ingress.thekoguryo.xyz 주소가 Listener의 IP로 가도록 DNS 정보에 추가가 필요합니다. *.ingress.thekoguryo.xyz에 대한 정보를 추가합니다.

  1. OCI 콘솔에 로그인합니다.

  2. 좌측 상단 햄버거 메뉴에서 Networking > DNS Management > Zones로 이동합니다.

  3. 생성해둔 Zone으로 이동합니다.

  4. Manage records를 클릭하여 레코드를 추가해 줍니다.

    image-20230630170433266

  5. Publish changes를 클릭하여 반영합니다.

  6. 반영결과

    image-20230630170737804

DNS 테스트

  1. nslookup 툴로 등록한 DNS를 테스트 해봅니다. 잘 등록된 것을 알 수 있습니다.

    $ nslookup *.ingress.thekoguryo.xyz
    Server:         127.0.0.11
    Address:        127.0.0.11#53
    
    Non-authoritative answer:
    Name:   *.ingress.thekoguryo.xyz
    Address: 152.69.xxx.xxx
    

HOST 기반 라우팅 테스트

  1. ingress rule에서 적용한 host 명으로 각각 접속하여 결과를 확인합니다.

    • blue.ingress.thekoguryo.xyz 요청

      image-20230630171129531

    • green.ingress.thekoguryo.xyz 요청

      image-20230630171155890

    • 와일드 카드 주소로 DNS에 등록한 Ingress Controller의 Load Balancer를 거쳐 접속한 host의 FQDN에 따라 대상 서비스에 라우팅 되는 것을 확인할 수 있습니다.



이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

Last updated on 5 Dec 2021