TheKoguryo's 기술 블로그

 Version 2023.11.20

5.1.3 OCI Native Ingress Controller에서 host 기반 라우팅

DNS에 등록하기

이미 구입한 Domain Name이 있다는 전제하에 설정하는 과정입니다. 테스트를 위해 따로 구입한 Domain Name(thekoguryo.xyz)을 사용하였습니다.

DNS 서비스 설정
  1. 도메인 구입처 또는 OCI DNS 서비스에서 위임하여 서비스하는 경우 OCI DNS 서비스에서 사용한 host를 등록합니다.

  2. 추가할 레코드를 입력하고 제출합니다.

    • Record Type: A - IPv4 Address

    • Name: *.ingress

      • 와일드 카드 형식으로 ingress controller가 사용할 서브 Domain Name을 입력합니다.
    • Address: 매핑할 IP, 여기서는 앞서 만든 OCI Native Ingress Controller의 Load Balancer의 IP 입력

    • 예, GoDaddy DNS 관리화면

    image-20230612185930023

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: 158.180.xx.xxx
    

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(native-ic-ingress-host-basic.yaml)을 작성합니다.

    • blue.ingress.thekoguryo.ml 요청은 nginx-blue-svc 로 라우팅
    • green.ingress.thekoguryo.ml 요청은 nginx-green-svc로 라우팅
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: native-ic-ingress-host-basic
    spec:
      ingressClassName: native-ic-ingress-class
      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. 작성한 native-ic-ingress-host-basic.yaml을 배포합니다.

    $ kubectl apply -f native-ic-ingress-host-basic.yaml
    ingress.networking.k8s.io/native-ic-ingress-host-basic created
    $ kubectl get ingress
    NAME                           CLASS                     HOSTS                                                      ADDRESS          PORTS   AGE
    native-ic-ingress-host-basic   native-ic-ingress-class   blue.ingress.thekoguryo.xyz,green.ingress.thekoguryo.xyz   158.180.xx.xxx   80      2m36s
    
  4. ingress rule에서 적용한 host 명으로 각각 접속하여 결과를 확인합니다.

    • blue.ingress.thekoguryo.xyz 요청

      image-20230612191116549

    • green.ingress.thekoguryo.xyz 요청

      image-20230612191136586

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



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

Last updated on 12 Jun 2023