Ingress( NGINX )에서 Traefik Ingress 컨트롤러로 마이그레이션하기
Ingress- NGINX 컨트롤러 대신 Traefik 컨트롤러를 사용하도록 Ingress 설정을 마이그레이션하세요.
시작하기 전에
마이그레이션하기 전에 이러한 필수 조건을 확인하십시오.
-
필요한 권한이 있는지 확인하십시오.
- 클러스터에 대한 관리자 플랫폼 액세스 역할
- 모든 네임스페이스의 관리자 서비스 액세스 역할
-
Ingress- NGINX 에 특화된 어노테이션이나 구성이 있는지 확인하기 위해 기존 Ingress 리소스를 검토하십시오. 두 Ingress 컨트롤러 간의 주요 차이점에 대한 문서를 확인해 보세요.
-
워크로드 요구 사항, 가동 중단 허용 범위 및 리소스 가용성을 바탕으로 마이그레이션 전략을 수립하십시오. 마이그레이션 중에는 두 컨트롤러가 동시에 실행될 수 있습니다.
-
고가용성을 보장하기 위해 클러스터의 각 존마다 최소 두 개의 워커 노드가 있는지 확인하십시오.
-
변경 사항을 적용하기 전에 현재 Ingress 설정을 백업해 두세요.
전략 1: 다른 도메인을 사용하여 Ingress 설정 분리하기
프로덕션 환경은 Ingress를 계속 사용하면서 별도의 설정으로 Traefik을 테스트해 보세요 - NGINX. 이 전략은 최상의 격리와 안전을 보장합니다.
다음과 같은 경우에 이 전략을 사용하세요:
- 프로덕션 워크로드를 마이그레이션하기 전에 Traefik을 철저히 테스트해야 합니다.
- 테스트를 위해 별도의 애플리케이션 세트를 배포할 수 있습니다.
- 추가 ALB를 운영할 수 있는 자원이 있습니다.
- 테스트를 진행하는 동안 생산 환경에 어떠한 위험도 발생하지 않기를 원합니다.
단계
- 사용 가능한 Traefik 버전을 확인하세요.
ibmcloud ks ingress alb versions - 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
-
VPC 클러스터의 경우, 테스트를 위해 LoadBalancer 서비스를 수동으로 하나 더 배포하십시오.
spec.selector에app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik(또는 사설 ALB의 경우private-cr<cluster_id>-traefik)을 포함하도록 설정하십시오. 클래식 클러스터에서는 새로운 로드 밸런서가 자동으로 프로비저닝되므로 별도의 구성이 필요하지 않습니다. -
Traefik ALB용 사용자 지정 도메인을 생성하고, 이를 로드 밸런서의 호스트명이나 IP 주소로 연결하십시오. 자세한 지침은 ‘사용자 지정 도메인 생성’을 참조하세요.
-
Traefik Ingress 클래스를 사용하여 테스트 애플리케이션용 Ingress 리소스를 생성합니다. 3단계: Ingress 리소스 생성 를 팔로우하고,
ingressClassName: public-iks-traefik(비공개 ALB의 경우private-iks-traefik)을 지정하세요. -
Traefik 도메인을 통해 애플리케이션을 테스트하고 기능이 정상적으로 작동하는지 확인합니다.
-
테스트를 마친 후에는 ‘전환 수행’ 단계로 넘어가 프로덕션 워크로드를 마이그레이션하십시오.
전략 2: 동일한 워크로드를 처리하는 이중 부하 분산 장치
동일한 서비스를 가리키는 두 개의 Ingress 리소스를 생성하여, 두 컨트롤러 모두를 동일한 워크로드에서 테스트해 보세요. 프로덕션 트래픽에 영향을 주지 않고 컨트롤러의 동작을 직접 비교할 수 있습니다.
다음과 같은 경우에 이 전략을 사용하세요:
- 동일한 워크로드에서 Ingress( NGINX )와 Traefik의 동작을 비교하고자 합니다.
- Traefik이 귀하의 특정 애플리케이션을 올바르게 처리하는지 확인해야 합니다.
- 비운영용 도메인을 사용하여 테스트할 수 있습니다.
- 필요한 테스트 애플리케이션의 수를 최소화하고 싶습니다.
단계
- 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
-
VPC 클러스터의 경우, 테스트를 위해 LoadBalancer 서비스를 수동으로 하나 더 배포하십시오.
spec.selector에app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik(또는 사설 ALB의 경우private-cr<cluster_id>-traefik)을 포함하도록 설정하십시오. 클래식 클러스터에서는 새로운 로드 밸런서가 자동으로 프로비저닝되므로 별도의 구성이 필요하지 않습니다. -
Traefik ALB용 사용자 지정 도메인을 생성하고, 이를 로드 밸런서의 호스트명이나 IP 주소로 연결하십시오. 자세한 지침은 ‘사용자 지정 도메인 생성’을 참조하세요.
-
Traefik Ingress 클래스를 사용하되, 기존 Ingress 리소스( NGINX )와 동일한 서비스를 가리키는 두 번째 Ingress 리소스를 생성합니다. 3단계: Ingress 리소스 생성의 지침을 따르되, 다음 사항에 유의하십시오:
ingressClassName: public-iks-traefik(또는 사설 ALB의 경우private-iks-traefik)을 지정하십시오- 기존 Ingress( NGINX ) Ingress 리소스에서 사용하는 것과 동일한
service.name값을 사용하십시오 host및tls.hosts필드에 테스트 도메인을 입력하세요
-
두 도메인 모두에서 애플리케이션을 테스트해 보세요.
- Ingress- NGINX 도메인(프로덕션)을 통해 접속
- Traefik 도메인(testing)을 통한 접속
-
두 컨트롤러의 동작, 성능 및 기능을 비교해 보십시오.
-
검증이 완료되면, ‘전환하기’ 단계로 진행하여 프로덕션 도메인을 Traefik으로 마이그레이션하십시오.
전략 3: 분할 DNS 테스트
스플릿 DNS 설정을 사용하여, 사용자에게 영향을 주지 않으면서 실제 운영 환경과 유사한 환경에서 프로덕션 도메인을 통해 Traefik을 테스트해 보세요.
다음과 같은 경우에 이 전략을 사용하세요:
- 실제 운영 도메인에서 테스트를 진행하고 싶으신가요?
- 테스트 환경의 DNS 설정을 직접 관리할 수 있습니다.
- 정확한 운영 환경 구성을 검증해야 합니다.
- 테스트 환경과 운영 환경 간의 차이를 최소화하고 싶습니다.
단계
- 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
-
VPC 클러스터의 경우, 테스트를 위해 LoadBalancer 서비스를 수동으로 하나 더 배포하십시오.
spec.selector에app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik(또는 사설 ALB의 경우private-cr<cluster_id>-traefik)을 포함하도록 설정하십시오. 클래식 클러스터에서는 새로운 로드 밸런서가 자동으로 프로비저닝되므로 별도의 구성이 필요하지 않습니다. -
새 Traefik ALB의 IP 주소(클래식) 또는 호스트 이름(VPC)을 확인합니다.
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME -
테스트 환경에서 분할 DNS를 구성하십시오.
- 테스트용 서버나 네트워크의 경우, 프로덕션 도메인이 Traefik ALB의 IP 주소/호스트명으로 해결되도록 DNS를 설정하십시오
- 프로덕션 사용자들은 계속해서 Ingress( NGINX ) ALB로 트래픽을 전달하고 있습니다
- 이는 로컬
/etc/hosts파일, 내부 DNS 서버 또는 VPN 전용 DNS 설정을 통해 수행할 수 있습니다
-
Traefik Ingress 클래스를 사용하여 프로덕션 도메인을 지정해 새로운 Ingress 리소스를 생성합니다. 3단계: Ingress 리소스 생성 를 따르되, ‘
host’ 및 ‘tls.hosts’ 필드에ingressClassName: public-iks-traefik(비공개 ALB의 경우private-iks-traefik)과 운영 환경 도메인을 지정하십시오. -
스플릿 DNS 환경에서 테스트를 수행하여 Traefik이 프로덕션 도메인 및 구성과 정상적으로 작동하는지 확인하십시오.
-
검증이 완료되면, ‘전환하기’ 단계로 진행하여 프로덕션 DNS가 Traefik을 가리키도록 업데이트하십시오.
전략 4: 직접 마이그레이션
최소한의 구성 변경과 리소스 관리만으로 Ingress( NGINX )에서 Traefik으로 직접 전환할 수 있습니다.
이 전략은 마이그레이션 과정에서 서비스 중단을 초래합니다. 시작하기 전에 유지보수 시간을 미리 계획해 두세요.
다음과 같은 경우에 이 전략을 사용하세요:
- 업무량이 적거나 중요도가 낮은 애플리케이션을 운영 중입니다.
- 마이그레이션 과정에서 발생하는 짧은 중단 시간은 감수할 수 있습니다.
- 관리해야 할 리소스의 수를 최소화하고 싶습니다.
- 이미 다른 환경에서 Traefik 호환성을 확인하셨습니다.
- Classic 환경에서는 클라이언트가 DNS 도메인 대신 IP 주소를 사용하여 연결하기 때문에 ALB의 IP 주소를 변경하지 않아야 합니다.
ALB를 비활성화했다가 다시 활성화하더라도, 그 사이에 다른 서비스에서 해당 IP 주소를 할당받지 않은 한 원래의 IP 주소는 유지됩니다. 자세한 내용은 ‘ALB 활성화 또는 비활성화’를 참조하십시오.
단계
-
현재 사용 중인 Ingress- NGINX ALB의 ID를 확인하세요.
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME -
Ingress- NGINX ALB를 비활성화하십시오.
ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAMEVPC 클러스터: 마지막 공용 또는 사설 ALB를 비활성화한 경우, Traefik ALB를 활성화하기 전에 ALB 배포 및 해당 로드 밸런서 서비스 리소스가 삭제될 때까지 기다리십시오.
-
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
```
- VPC 클러스터의 경우, 로드 밸런서의 백엔드를 Traefik으로 설정하십시오.
VPC 클러스터
sh {: pre} ibmcloud ks ingress load-balancer backend set --cluster CLUSTER-ID --public-backend traefik [--private-backend traefik]
-
Traefik Ingress 클래스를 사용하도록 Ingress 리소스를 업데이트하세요. 리소스에서 Ingress 클래스를 명시적으로 설정한 경우,
spec.ingressClassName의 값을public-iks-k8s-nginx에서public-iks-traefik로(또는 사설 ALB의 경우private-iks-k8s-nginx에서private-iks-traefik로) 업데이트하십시오. -
업데이트된 Ingress 리소스를 적용하세요.
kubectl apply -f ingress.yaml -
Traefik 컨트롤러를 통해 애플리케이션에 접근할 수 있는지 확인하십시오.
curl https://<domain>/<app_path>
Traefik으로 전환하기
테스트가 끝나면 프로덕션 트래픽을 Traefik 컨트롤러를 사용하도록 전환하십시오. 클래식 클러스터와 VPC 클러스터의 절차는 서로 다릅니다. 사용 중인 클러스터 유형 및 구성에 맞는 옵션을 선택하십시오.
클래식 클러스터
클래식 클러스터의 경우, 프로덕션 도메인을 Ingress 대신 Traefik을 노출하는 로드 밸런서( NGINX )를 가리키도록 업데이트하십시오.
옵션 1: 도메인 매핑 업데이트
- Traefik ALB의 IP 주소를 확인하세요.
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME - 도메인이 Traefik ALB를 가리키도록 설정하세요.
ibmcloud ks ingress domain update --cluster CLUSTER_NAME --domain DOMAIN_NAME --ip TRAEFIK_ALB_IP - 도메인 업데이트를 확인하십시오.
ibmcloud ks ingress domain ls --cluster CLUSTER_NAME - 프로덕션 도메인을 통해 애플리케이션을 테스트하여, 이제 Traefik을 통해 애플리케이션이 정상적으로 제공되는지 확인하십시오.
옵션 2: Ingress 비활성화 - NGINX ALB
또는 Ingress- NGINX 를 기반으로 하는 모든 ALB를 비활성화할 수 있으며, 이 경우 도메인 매핑이 자동으로 업데이트됩니다.
- 모든 ALB를 나열하고, Ingress( NGINX ) 기반인 ALB를 식별하십시오.
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME - 각 Ingress( NGINX ) ALB를 비활성화하십시오.
ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME - 도메인이 이제 Traefik ALB를 가리키는지 확인하십시오.
ibmcloud ks ingress domain ls --cluster CLUSTER_NAME
옵션 3: ALB IP 주소 유지
클라이언트가 DNS 이름 대신 ALB IP 주소에 직접 연결하는 경우, 마이그레이션 과정에서 해당 IP 주소를 그대로 유지할 수 있습니다. IP 주소를 보존하려면 ALB를 일시적으로 비활성화해야 하며, 이로 인해 서비스가 잠시 중단됩니다.
ALB를 비활성화했다가 다시 활성화하면, 해당 IP 주소가 다른 서비스에 할당되지 않은 한 원래의 IP 주소가 유지됩니다.
-
모든 ALB를 나열하고, Ingress( NGINX ) 기반인 ALB를 식별하여 해당 ID와 IP 주소를 확인하십시오.
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME -
Ingress- NGINX ALB를 비활성화하십시오. 이로 인해 해당 IP 주소로 전송되는 트래픽에 일시적인 서비스 중단이 발생합니다.
ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAME -
동일한 IP 주소를 재사용하려면 Traefik 버전을 사용하여 ALB를 다시 활성화하십시오.
ibmcloud ks ingress alb enable classic --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME또는 새 ALB를 생성하고
--ip플래그를 사용하여 기존 IP 주소를 재사용할 수 있습니다. -
Traefik Ingress 클래스를 사용하도록 Ingress 리소스를 업데이트하세요. 리소스에서 Ingress 클래스를 명시적으로 설정한 경우,
spec.ingressClassName의 값을public-iks-k8s-nginx에서public-iks-traefik로(또는 사설 ALB의 경우private-iks-k8s-nginx에서private-iks-traefik로) 업데이트하십시오. -
업데이트된 Ingress 리소스를 적용하세요.
kubectl apply -f ingress.yaml -
Traefik 컨트롤러를 통해 애플리케이션에 접근할 수 있는지 확인하십시오.
curl https://<domain>/<app_path>
VPC 클러스터
VPC 클러스터의 경우, Ingress 대신 Traefik을 노출하도록 로드 밸런서 백엔드를 업데이트하십시오. - NGINX.
옵션 1: 로드 밸런서 백엔드 업데이트
- 로드 밸런서를 Traefik 백엔드를 사용하도록 업데이트하십시오.
ibmcloud ks ingress load-balancer backend set --cluster CLUSTER_NAME --public-backend traefik [--private-backend traefik] - 로드 밸런서 구성을 확인하십시오.
ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME - 애플리케이션이 이제 Traefik을 통해 제공되는지 확인하기 위해 테스트를 수행하십시오.
옵션 2: Ingress 비활성화 - NGINX ALB
또는 Ingress- NGINX 를 기반으로 하는 모든 ALB를 비활성화할 수도 있습니다.
- 모든 ALB를 나열하고, Ingress( NGINX ) 기반인 ALB를 식별하십시오.
ibmcloud ks ingress alb ls --cluster CLUSTER_NAME - 각 Ingress( NGINX ) ALB를 비활성화하십시오.
ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME - 로드 밸런서가 이제 Traefik ALB를 사용하고 있는지 확인하십시오.
ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME
마이그레이션 후 태스크
Traefik으로 마이그레이션한 후 다음 작업을 완료하십시오:
-
마이그레이션 후 애플리케이션에서 예기치 않은 동작이나 오류가 발생하는지 모니터링하십시오.
-
Traefik을 활용한 새로운 Ingress 설정을 반영하도록 내부 문서를 업데이트하십시오.
-
더 이상 필요하지 않은 테스트용 ALB, 도메인 또는 Ingress 리소스를 모두 제거하십시오.
-
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 지원팀에 문의하세요.