Ingress( NGINX )에서 Traefik Ingress 컨트롤러로 마이그레이션하기

Ingress- NGINX 컨트롤러 대신 Traefik 컨트롤러를 사용하도록 Ingress 설정을 마이그레이션하세요.

시작하기 전에

마이그레이션하기 전에 이러한 필수 조건을 확인하십시오.

  1. 필요한 권한이 있는지 확인하십시오.

    • 클러스터에 대한 관리자 플랫폼 액세스 역할
    • 모든 네임스페이스의 관리자 서비스 액세스 역할
  2. Ingress- NGINX 에 특화된 어노테이션이나 구성이 있는지 확인하기 위해 기존 Ingress 리소스를 검토하십시오. 두 Ingress 컨트롤러 간의 주요 차이점에 대한 문서를 확인해 보세요.

  3. 워크로드 요구 사항, 가동 중단 허용 범위 및 리소스 가용성을 바탕으로 마이그레이션 전략을 수립하십시오. 마이그레이션 중에는 두 컨트롤러가 동시에 실행될 수 있습니다.

  4. 고가용성을 보장하기 위해 클러스터의 각 존마다 최소 두 개의 워커 노드가 있는지 확인하십시오.

  5. 변경 사항을 적용하기 전에 현재 Ingress 설정을 백업해 두세요.

전략 1: 다른 도메인을 사용하여 Ingress 설정 분리하기

프로덕션 환경은 Ingress를 계속 사용하면서 별도의 설정으로 Traefik을 테스트해 보세요 - NGINX. 이 전략은 최상의 격리와 안전을 보장합니다.

다음과 같은 경우에 이 전략을 사용하세요:

  • 프로덕션 워크로드를 마이그레이션하기 전에 Traefik을 철저히 테스트해야 합니다.
  • 테스트를 위해 별도의 애플리케이션 세트를 배포할 수 있습니다.
  • 추가 ALB를 운영할 수 있는 자원이 있습니다.
  • 테스트를 진행하는 동안 생산 환경에 어떠한 위험도 발생하지 않기를 원합니다.

단계

  1. 사용 가능한 Traefik 버전을 확인하세요.
    ibmcloud ks ingress alb versions
    
  2. Traefik을 사용하여 새 ALB를 생성합니다.

클래식 클러스터 sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION VPC 클러스터 sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION

  1. VPC 클러스터의 경우, 테스트를 위해 LoadBalancer 서비스를 수동으로 하나 더 배포하십시오. spec.selector 에 app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik (또는 사설 ALB의 경우 private-cr<cluster_id>-traefik )을 포함하도록 설정하십시오. 클래식 클러스터에서는 새로운 로드 밸런서가 자동으로 프로비저닝되므로 별도의 구성이 필요하지 않습니다.

  2. Traefik ALB용 사용자 지정 도메인을 생성하고, 이를 로드 밸런서의 호스트명이나 IP 주소로 연결하십시오. 자세한 지침은 ‘사용자 지정 도메인 생성’을 참조하세요.

  3. Traefik Ingress 클래스를 사용하여 테스트 애플리케이션용 Ingress 리소스를 생성합니다. 3단계: Ingress 리소스 생성 를 팔로우하고, ingressClassName: public-iks-traefik (비공개 ALB의 경우 private-iks-traefik )을 지정하세요.

  4. Traefik 도메인을 통해 애플리케이션을 테스트하고 기능이 정상적으로 작동하는지 확인합니다.

  5. 테스트를 마친 후에는 ‘전환 수행’ 단계로 넘어가 프로덕션 워크로드를 마이그레이션하십시오.

전략 2: 동일한 워크로드를 처리하는 이중 부하 분산 장치

동일한 서비스를 가리키는 두 개의 Ingress 리소스를 생성하여, 두 컨트롤러 모두를 동일한 워크로드에서 테스트해 보세요. 프로덕션 트래픽에 영향을 주지 않고 컨트롤러의 동작을 직접 비교할 수 있습니다.

다음과 같은 경우에 이 전략을 사용하세요:

  • 동일한 워크로드에서 Ingress( NGINX )와 Traefik의 동작을 비교하고자 합니다.
  • Traefik이 귀하의 특정 애플리케이션을 올바르게 처리하는지 확인해야 합니다.
  • 비운영용 도메인을 사용하여 테스트할 수 있습니다.
  • 필요한 테스트 애플리케이션의 수를 최소화하고 싶습니다.

단계

  1. Traefik 기반 버전을 사용하는 새로운 ALB를 활성화합니다.

클래식 클러스터 sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION VPC 클러스터 sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION

  1. VPC 클러스터의 경우, 테스트를 위해 LoadBalancer 서비스를 수동으로 하나 더 배포하십시오. spec.selector 에 app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik (또는 사설 ALB의 경우 private-cr<cluster_id>-traefik )을 포함하도록 설정하십시오. 클래식 클러스터에서는 새로운 로드 밸런서가 자동으로 프로비저닝되므로 별도의 구성이 필요하지 않습니다.

  2. Traefik ALB용 사용자 지정 도메인을 생성하고, 이를 로드 밸런서의 호스트명이나 IP 주소로 연결하십시오. 자세한 지침은 ‘사용자 지정 도메인 생성’을 참조하세요.

  3. Traefik Ingress 클래스를 사용하되, 기존 Ingress 리소스( NGINX )와 동일한 서비스를 가리키는 두 번째 Ingress 리소스를 생성합니다. 3단계: Ingress 리소스 생성의 지침을 따르되, 다음 사항에 유의하십시오:

    • ingressClassName: public-iks-traefik (또는 사설 ALB의 경우 private-iks-traefik )을 지정하십시오
    • 기존 Ingress( NGINX ) Ingress 리소스에서 사용하는 것과 동일한 service.name 값을 사용하십시오
    • host 및 tls.hosts 필드에 테스트 도메인을 입력하세요
  4. 두 도메인 모두에서 애플리케이션을 테스트해 보세요.

    • Ingress- NGINX 도메인(프로덕션)을 통해 접속
    • Traefik 도메인(testing)을 통한 접속
  5. 두 컨트롤러의 동작, 성능 및 기능을 비교해 보십시오.

  6. 검증이 완료되면, ‘전환하기’ 단계로 진행하여 프로덕션 도메인을 Traefik으로 마이그레이션하십시오.

전략 3: 분할 DNS 테스트

스플릿 DNS 설정을 사용하여, 사용자에게 영향을 주지 않으면서 실제 운영 환경과 유사한 환경에서 프로덕션 도메인을 통해 Traefik을 테스트해 보세요.

다음과 같은 경우에 이 전략을 사용하세요:

  • 실제 운영 도메인에서 테스트를 진행하고 싶으신가요?
  • 테스트 환경의 DNS 설정을 직접 관리할 수 있습니다.
  • 정확한 운영 환경 구성을 검증해야 합니다.
  • 테스트 환경과 운영 환경 간의 차이를 최소화하고 싶습니다.

단계

  1. Traefik 기반 버전을 사용하는 새로운 ALB를 활성화합니다.

클래식 클러스터 sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION VPC 클러스터 sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION

  1. VPC 클러스터의 경우, 테스트를 위해 LoadBalancer 서비스를 수동으로 하나 더 배포하십시오. spec.selector 에 app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik (또는 사설 ALB의 경우 private-cr<cluster_id>-traefik )을 포함하도록 설정하십시오. 클래식 클러스터에서는 새로운 로드 밸런서가 자동으로 프로비저닝되므로 별도의 구성이 필요하지 않습니다.

  2. 새 Traefik ALB의 IP 주소(클래식) 또는 호스트 이름(VPC)을 확인합니다.

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  3. 테스트 환경에서 분할 DNS를 구성하십시오.

    • 테스트용 서버나 네트워크의 경우, 프로덕션 도메인이 Traefik ALB의 IP 주소/호스트명으로 해결되도록 DNS를 설정하십시오
    • 프로덕션 사용자들은 계속해서 Ingress( NGINX ) ALB로 트래픽을 전달하고 있습니다
    • 이는 로컬 /etc/hosts 파일, 내부 DNS 서버 또는 VPN 전용 DNS 설정을 통해 수행할 수 있습니다
  4. Traefik Ingress 클래스를 사용하여 프로덕션 도메인을 지정해 새로운 Ingress 리소스를 생성합니다. 3단계: Ingress 리소스 생성 를 따르되, ‘ host ’ 및 ‘ tls.hosts ’ 필드에 ingressClassName: public-iks-traefik (비공개 ALB의 경우 private-iks-traefik )과 운영 환경 도메인을 지정하십시오.

  5. 스플릿 DNS 환경에서 테스트를 수행하여 Traefik이 프로덕션 도메인 및 구성과 정상적으로 작동하는지 확인하십시오.

  6. 검증이 완료되면, ‘전환하기’ 단계로 진행하여 프로덕션 DNS가 Traefik을 가리키도록 업데이트하십시오.

전략 4: 직접 마이그레이션

최소한의 구성 변경과 리소스 관리만으로 Ingress( NGINX )에서 Traefik으로 직접 전환할 수 있습니다.

이 전략은 마이그레이션 과정에서 서비스 중단을 초래합니다. 시작하기 전에 유지보수 시간을 미리 계획해 두세요.

다음과 같은 경우에 이 전략을 사용하세요:

  • 업무량이 적거나 중요도가 낮은 애플리케이션을 운영 중입니다.
  • 마이그레이션 과정에서 발생하는 짧은 중단 시간은 감수할 수 있습니다.
  • 관리해야 할 리소스의 수를 최소화하고 싶습니다.
  • 이미 다른 환경에서 Traefik 호환성을 확인하셨습니다.
  • Classic 환경에서는 클라이언트가 DNS 도메인 대신 IP 주소를 사용하여 연결하기 때문에 ALB의 IP 주소를 변경하지 않아야 합니다.

ALB를 비활성화했다가 다시 활성화하더라도, 그 사이에 다른 서비스에서 해당 IP 주소를 할당받지 않은 한 원래의 IP 주소는 유지됩니다. 자세한 내용은 ‘ALB 활성화 또는 비활성화’를 참조하십시오.

단계

  1. 현재 사용 중인 Ingress- NGINX ALB의 ID를 확인하세요.

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Ingress- NGINX ALB를 비활성화하십시오.

    ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAME
    

    VPC 클러스터: 마지막 공용 또는 사설 ALB를 비활성화한 경우, Traefik ALB를 활성화하기 전에 ALB 배포 및 해당 로드 밸런서 서비스 리소스가 삭제될 때까지 기다리십시오.

  3. Traefik 버전을 사용하여 ALB를 활성화합니다.

클래식 클러스터 sh {: pre} ibmcloud ks ingress alb enable classic --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME 클래식 환경의 ALB에 특정 IP 주소를 사용하려면 --ip 플래그를 사용하십시오. 자세한 내용은 ‘ALB 활성화 또는 비활성화’를 참조하십시오.

[VPC 클러스터]{: tag-vpc}
```sh {: pre}
ibmcloud ks ingress alb enable vpc-gen2 --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME
```
  1. VPC 클러스터의 경우, 로드 밸런서의 백엔드를 Traefik으로 설정하십시오.

VPC 클러스터 sh {: pre} ibmcloud ks ingress load-balancer backend set --cluster CLUSTER-ID --public-backend traefik [--private-backend traefik]

  1. Traefik Ingress 클래스를 사용하도록 Ingress 리소스를 업데이트하세요. 리소스에서 Ingress 클래스를 명시적으로 설정한 경우, spec.ingressClassName 의 값을 public-iks-k8s-nginx 에서 public-iks-traefik 로(또는 사설 ALB의 경우 private-iks-k8s-nginx 에서 private-iks-traefik 로) 업데이트하십시오.

  2. 업데이트된 Ingress 리소스를 적용하세요.

    kubectl apply -f ingress.yaml
    
  3. Traefik 컨트롤러를 통해 애플리케이션에 접근할 수 있는지 확인하십시오.

    curl https://<domain>/<app_path>
    

Traefik으로 전환하기

테스트가 끝나면 프로덕션 트래픽을 Traefik 컨트롤러를 사용하도록 전환하십시오. 클래식 클러스터와 VPC 클러스터의 절차는 서로 다릅니다. 사용 중인 클러스터 유형 및 구성에 맞는 옵션을 선택하십시오.

클래식 클러스터

클래식 클러스터의 경우, 프로덕션 도메인을 Ingress 대신 Traefik을 노출하는 로드 밸런서( NGINX )를 가리키도록 업데이트하십시오.

옵션 1: 도메인 매핑 업데이트

  1. Traefik ALB의 IP 주소를 확인하세요.
    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. 도메인이 Traefik ALB를 가리키도록 설정하세요.
    ibmcloud ks ingress domain update --cluster CLUSTER_NAME --domain DOMAIN_NAME --ip TRAEFIK_ALB_IP
    
  3. 도메인 업데이트를 확인하십시오.
    ibmcloud ks ingress domain ls --cluster CLUSTER_NAME
    
  4. 프로덕션 도메인을 통해 애플리케이션을 테스트하여, 이제 Traefik을 통해 애플리케이션이 정상적으로 제공되는지 확인하십시오.

옵션 2: Ingress 비활성화 - NGINX ALB

또는 Ingress- NGINX 를 기반으로 하는 모든 ALB를 비활성화할 수 있으며, 이 경우 도메인 매핑이 자동으로 업데이트됩니다.

  1. 모든 ALB를 나열하고, Ingress( NGINX ) 기반인 ALB를 식별하십시오.
    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. 각 Ingress( NGINX ) ALB를 비활성화하십시오.
    ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME
    
  3. 도메인이 이제 Traefik ALB를 가리키는지 확인하십시오.
    ibmcloud ks ingress domain ls --cluster CLUSTER_NAME
    

옵션 3: ALB IP 주소 유지

클라이언트가 DNS 이름 대신 ALB IP 주소에 직접 연결하는 경우, 마이그레이션 과정에서 해당 IP 주소를 그대로 유지할 수 있습니다. IP 주소를 보존하려면 ALB를 일시적으로 비활성화해야 하며, 이로 인해 서비스가 잠시 중단됩니다.

ALB를 비활성화했다가 다시 활성화하면, 해당 IP 주소가 다른 서비스에 할당되지 않은 한 원래의 IP 주소가 유지됩니다.

  1. 모든 ALB를 나열하고, Ingress( NGINX ) 기반인 ALB를 식별하여 해당 ID와 IP 주소를 확인하십시오.

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Ingress- NGINX ALB를 비활성화하십시오. 이로 인해 해당 IP 주소로 전송되는 트래픽에 일시적인 서비스 중단이 발생합니다.

    ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAME
    
  3. 동일한 IP 주소를 재사용하려면 Traefik 버전을 사용하여 ALB를 다시 활성화하십시오.

    ibmcloud ks ingress alb enable classic --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME
    

    또는 새 ALB를 생성하고 --ip 플래그를 사용하여 기존 IP 주소를 재사용할 수 있습니다.

  4. Traefik Ingress 클래스를 사용하도록 Ingress 리소스를 업데이트하세요. 리소스에서 Ingress 클래스를 명시적으로 설정한 경우, spec.ingressClassName 의 값을 public-iks-k8s-nginx 에서 public-iks-traefik 로(또는 사설 ALB의 경우 private-iks-k8s-nginx 에서 private-iks-traefik 로) 업데이트하십시오.

  5. 업데이트된 Ingress 리소스를 적용하세요.

    kubectl apply -f ingress.yaml
    
  6. Traefik 컨트롤러를 통해 애플리케이션에 접근할 수 있는지 확인하십시오.

    curl https://<domain>/<app_path>
    

VPC 클러스터

VPC 클러스터의 경우, Ingress 대신 Traefik을 노출하도록 로드 밸런서 백엔드를 업데이트하십시오. - NGINX.

옵션 1: 로드 밸런서 백엔드 업데이트

  1. 로드 밸런서를 Traefik 백엔드를 사용하도록 업데이트하십시오.
    ibmcloud ks ingress load-balancer backend set --cluster CLUSTER_NAME --public-backend traefik [--private-backend traefik]
    
  2. 로드 밸런서 구성을 확인하십시오.
    ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME
    
  3. 애플리케이션이 이제 Traefik을 통해 제공되는지 확인하기 위해 테스트를 수행하십시오.

옵션 2: Ingress 비활성화 - NGINX ALB

또는 Ingress- NGINX 를 기반으로 하는 모든 ALB를 비활성화할 수도 있습니다.

  1. 모든 ALB를 나열하고, Ingress( NGINX ) 기반인 ALB를 식별하십시오.
    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. 각 Ingress( NGINX ) ALB를 비활성화하십시오.
    ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME
    
  3. 로드 밸런서가 이제 Traefik ALB를 사용하고 있는지 확인하십시오.
    ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME
    

마이그레이션 후 태스크

Traefik으로 마이그레이션한 후 다음 작업을 완료하십시오:

  1. 마이그레이션 후 애플리케이션에서 예기치 않은 동작이나 오류가 발생하는지 모니터링하십시오.

  2. Traefik을 활용한 새로운 Ingress 설정을 반영하도록 내부 문서를 업데이트하십시오.

  3. 더 이상 필요하지 않은 테스트용 ALB, 도메인 또는 Ingress 리소스를 모두 제거하십시오.

  4. Traefik이 예상대로 작동하는지 확인한 후, 남아 있는 Ingress- NGINX ALB를 비활성화하십시오.

    ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME
    

문제점 해결

마이그레이션 중이나 마이그레이션 후에 문제가 발생하면 다음 단계를 따라 문제를 진단하고 해결하십시오.

잉그레스 클래스 확인

Ingress 리소스가 올바른 Traefik 클래스(public-iks-traefik 또는 private-iks-traefik)를 사용하고 있는지 확인하십시오.

ALB 상태 확인

Traefik ALB가 정상 상태인지 확인하십시오.

ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
Ingress 상태 확인

Ingress 리소스의 상태를 확인하십시오.

kubectl get ingress -A
로그 검토

Traefik 컨트롤러 로그에서 오류가 있는지 확인하십시오.

kubectl logs -n kube-system -l alb-image-type=traefik
진단 실행

Ingress 상태 보고서를 활용하여 문제를 파악하십시오.

ibmcloud ks ingress status-report get --cluster CLUSTER_NAME
필요한 경우 되돌리기

NGINX 중대한 문제가 발생하면 Traefik ALB를 비활성화하고, 원래 버전의 Ingress- NGINX ALB를 다시 활성화하여 Ingress- 로 롤백하십시오. 문제를 해결한 후 다시 마이그레이션할 계획을 세우십시오.

추가 도움이 필요하면 ‘Ingress 문제 해결’을 참조하거나 IBM Cloud 지원팀에 문의하세요.