Ingress( NGINX )에서 Traefik으로 전환하기 IBM Cloud
IBM Cloud Kubernetes Service 업스트림 프로젝트가 중단됨에 따라 Ingress(NGINX) 에서 벗어나고 있습니다. Traefik은 IBM 이 앞으로 지원할 Ingress 컨트롤러입니다.
과도기 동안에는 두 Ingress 컨트롤러 모두 사용할 수 있으므로, Traefik을 테스트하고 본인의 속도에 맞춰 마이그레이션할 수 있는 유연성을 제공합니다.
이 주제는 Ingress( NGINX )와 Traefik 간의 주요 구성 차이점을 비교하고, 전환을 위한 지침을 제공합니다.
Ingress( NGINX )와 Traefik을 비교해보면 IBM Cloud
다음 표는 Ingress( NGINX )와 Traefik 간의 주요 차이점을 비교한 것입니다.
| 잉그레스- NGINX | Traefik | |
|---|---|---|
| IBM- 제공된 기본 Ingress 클래스 | public-iks-k8s-nginx 공개용은, 비공개용은 private-iks-k8s-nginx 입니다. |
public-iks-traefik 공개용은, 비공개용은 private-iks-traefik 입니다. |
| 버전 체계 | 0.X.X_XXXX_iks 및 1.X.X_XXXX_iks |
Traefik 버전 3부터: 3.X.X_XXXX_iks |
| 가공된 자원 | Ingress 전용 | Ingress (선택 사항인 Ingress- NGINX 호환성 및 Traefik CRD 지원) |
| IBM-배포된 서비스 계정 이름 | ibm-k8s-ingress |
ibm-traefik-ingress |
다음 표는 Ingress( NGINX )와 Traefik에서 일반적인 기능을 구성하는 방법을 비교한 것입니다.
| 구성 | 잉그레스- NGINX | Traefik |
|---|---|---|
| App ID 인증 | Ingress 리소스에 nginx.ingress.kubernetes.io/auth-url 및 관련 스니펫 어노테이션을 추가합니다. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Traefik ForwardAuth 미들웨어 CRD를 생성하고, traefik.ingress.kubernetes.io/router.middlewares 어노테이션을 통해 이를 적용합니다. Traefik 문서를 참조하세요. |
| 클라이언트 요청 본문의 최대 크기 | nginx.ingress.kubernetes.io/proxy-body-size 어노테이션을 사용하세요. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Traefik의 ‘ Buffering ’ 미들웨어 CRD를 생성하고 이를 Ingress 리소스에 적용합니다. Traefik 문서를 참조하세요. |
| 클라이언트 응답 데이터 버퍼링 | nginx.ingress.kubernetes.io/proxy-buffering 어노테이션을 사용하세요. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Traefik의 ‘ Buffering ’ 미들웨어 CRD를 생성하고 이를 Ingress 리소스에 적용합니다. Traefik 문서를 참조하세요. |
| 연결 및 읽기 타임아웃 | nginx.ingress.kubernetes.io/proxy-connect-timeout 및 proxy-read-timeout 어노테이션을 사용하세요. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
ibm-ingress-deploy-config ( ConfigMap, )에서 읽기/쓰기/유휴 타임아웃을 구성하고, 백엔드 전달 타임아웃에는 ServersTransport CRD를 사용하십시오. Traefik 문서를 참조하세요. |
| 사용자 정의 오류 조치 | ibm-k8s-controller-config 의 ‘ custom-http-errors ’ 필드를 설정하세요. ConfigMap. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Traefik의 ‘ Errors ’ 미들웨어 CRD를 생성하고 이를 Ingress 리소스에 적용합니다. Traefik 문서를 참조하세요. |
| 요청 헤더 사용자 지정 | ibm-k8s-controller-config 의 ‘ proxy-set-headers ’ 필드를 설정하세요. ConfigMap. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Traefik의 ‘ Headers ’ 미들웨어 CRD를 생성하고 이를 Ingress 리소스에 적용합니다. Traefik 문서를 참조하세요. |
| 응답 헤더 사용자 지정 | nginx.ingress.kubernetes.io/configuration-snippet 어노테이션을 사용하세요. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Traefik의 ‘ Headers ’ 미들웨어 CRD를 생성하고 이를 Ingress 리소스에 적용합니다. Traefik 문서를 참조하세요. |
| HTTP HTTPS 로 리디렉션 | ibm-k8s-controller-config 의 ssl-redirect 를 설정하거나( ConfigMap ), nginx.ingress.kubernetes.io/ssl-redirect 어노테이션을 사용하십시오. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
ibm-ingress-deploy-config 의 ‘ httpsRedirect ’ 필드를 설정하세요. ConfigMap. Traefik 문서를 참조하세요. |
| HSTS(HTTP Strict Transport Security) | ibm-k8s-controller-config 의 ‘ hsts ’ 필드를 설정하세요. ConfigMap. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
stsSeconds 와 관련 필드를 포함하는 Traefik Headers 미들웨어 CRD를 생성하고, 이를 Ingress 리소스에 적용합니다. Traefik 문서를 참조하세요. |
| URI 경로 일치 (정규식) | nginx.ingress.kubernetes.io/use-regex 어노테이션을 사용하세요. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
traefik.ingress.kubernetes.io/router.pathmatcher 어노테이션을 사용하세요. Traefik 문서를 참조하세요. |
| 상호 TLS 인증 | Ingress 리소스에 nginx.ingress.kubernetes.io/auth-tls-* 어노테이션을 사용하세요. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Traefik TLSOption CRD를 생성하고, traefik.ingress.kubernetes.io/router.tls.options 어노테이션을 통해 이를 적용합니다. Traefik 문서를 참조하세요. |
| 다시 시도 / 다음 업스트림 | nginx.ingress.kubernetes.io/proxy-next-upstream 와 관련 어노테이션을 사용하십시오. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Traefik의 ‘ Retry ’ 미들웨어 CRD를 생성하고 이를 Ingress 리소스에 적용합니다. Traefik 문서를 참조하세요. |
| 속도 제한 | Ingress 리소스에 nginx.ingress.kubernetes.io/limit-* 어노테이션을 사용하세요. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Traefik의 ‘ RateLimit ’ 미들웨어 CRD를 생성하고 이를 Ingress 리소스에 적용합니다. Traefik 문서를 참조하세요. |
| 경로 재작성 | nginx.ingress.kubernetes.io/rewrite-target 어노테이션을 사용하세요. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Traefik의 ReplacePath 또는 ReplacePathRegex 미들웨어 CRD를 생성하고, 이를 Ingress 리소스에 적용합니다. Traefik 문서를 참조하세요. |
| 세션 어피니티(스티키 쿠키) | nginx.ingress.kubernetes.io/affinity 와 관련 어노테이션을 사용하십시오. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
Ingress 리소스에 Traefik 서비스 sticky cookie 어노테이션을 직접 적용하세요. Traefik 문서를 참조하세요. |
| TLS 의 업스트림( SSL 서비스) | nginx.ingress.kubernetes.io/backend-protocol 및 proxy-ssl-* 어노테이션을 사용하세요. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
rootCAs 필드가 포함된 Traefik ServersTransport CRD를 생성하고, 이를 백엔드 서비스에 적용합니다. Traefik 문서를 참조하세요. |
| SSL 프로토콜과 암호 방식 | ibm-k8s-controller-config 의 ssl-protocols 및 ssl-ciphers 필드를 설정하십시오. ConfigMap. Ingress 관련 내용은 NGINX 문서를 참조하세요. |
minVersion, maxVersion, cipherSuites 필드를 포함하는 Traefik TLSOption CRD를 생성합니다. Traefik 문서를 참조하세요. |
Middleware, TLSOption 또는 ServersTransport 와 같이 Traefik CRD에 의존하는 기능이 있는 경우, CRD 처리가 활성화되어 있는지 확인하십시오. CRD 처리는 기본적으로 활성화되어 있습니다. CRD 처리를 구성하려면, ibm-ingress-deploy-config ConfigMap 문서의 “ processTraefikCRDs ” 필드를 참조하십시오. 자세한 내용은 Ingress에서 사용자 정의 설정 만들기(ConfigMap )를 참조하십시오.
다음 표에는 Ingress- NGINX 와 Traefik이 지원하는 사용자 정의 가능한 배포 매개변수가 나열되어 있습니다.
| 잉그레스- NGINX | Traefik | |
|---|---|---|
replicas |
지원됨 | 지원됨 |
ingressClass |
지원됨 | 지원됨 |
httpPort, httpsPort |
지원됨 | 지원됨 |
tcpServicesConfig |
지원됨 | 적용할 수 없습니다. IngressRouteTCP CRD 를 사용하십시오. |
enableSslPassthrough |
지원됨 | 적용할 수 없습니다. 이 설정을 별도로 활성화할 필요는 없습니다. |
defaultCertificate |
지원됨 | 적용할 수 없습니다. defaultCertificate 와 함께 TLSStore CRD 를 사용하십시오. |
defaultBackendService |
지원됨 | 적용할 수 없습니다. 글로벌 기본 백엔드 인그레스를 사용합니다. |
deepInspect |
지원됨 | 해당사항 없음 |
defaultConfig |
지원됨 | 해당사항 없음 |
enableAnnotationValidation |
지원됨 | 적용할 수 없습니다. Traefik은 어노테이션을 통한 구성 정보 주입에 취약하지 않습니다. |
enableIngressValidation |
지원됨 | 해당사항 없음 |
logLevel |
자세한 출력 수준을 0에서 5 사이의 숫자로 지정할 수 있습니다. | 다음 값을 가진 문자열로 지원됩니다: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC. |
ingressProvider |
해당사항 없음 | 지원됨 |
processTraefikCRDs |
해당사항 없음 | 지원됨 |
traefikIngressNginxAllowExternalNameServices |
해당사항 없음 | 지원됨 |
traefikCRDAllowCrossNamespace |
해당사항 없음 | 지원됨 |
traefikCRDAllowExternalNameServices |
해당사항 없음 | 지원됨 |
httpReadTimeout, httpsReadTimeout |
적용할 수 없습니다. 다음에서 설정하십시오. ibm-k8s-controller-config ConfigMap. |
지원됨 |
httpWriteTimeout, httpsWriteTimeout |
적용할 수 없습니다. 다음에서 설정하십시오. ibm-k8s-controller-config ConfigMap. |
지원됨 |
httpIdleTimeout, httpsIdleTimeout |
적용할 수 없습니다. 다음에서 설정하십시오. ibm-k8s-controller-config ConfigMap. |
지원됨 |
httpsRedirect |
적용할 수 없습니다. ibm-k8s-controller-config ConfigMap 또는 어노테이션을 통해 구성하십시오. |
지원됨 |
tolerations |
지원됨 | 지원됨 |
마이그레이션 과정에서 고려해야 할 사항
다음과 같은 IBM Cloud 메커니즘은 특정 상황에서 서비스 중단을 방지하는 데 도움이 됩니다.
클래식 클러스터에서의 DNS 처리
클래식 클러스터의 경우, 공용 ALB 인스턴스를 활성화하거나 비활성화하면 해당 ALB의 IP 주소가 클러스터의 기본 도메인에 자동으로 추가됩니다.
서로 다른 유형의 ALB를 활성화할 때(Traefik과 Ingress를 함께 사용하는 경우 - NGINX ), DNS 레코드가 추가되지 않습니다. 이를 통해 단일 도메인 뒤에 서로 다른 ALB 유형이 혼재되어 디버깅하기 어려운 문제가 발생할 수 있는 원치 않는 상황을 방지할 수 있습니다. 이 혼합 상태가 지속되는 동안에는 새로운 IP 주소가 등록되지 않습니다. IP 주소 삭제 기능은 여전히 이전과 동일하게 작동합니다.
다른 유형의 마지막 인스턴스(Traefik 또는 Ingress- NGINX )가 비활성화되면, 나머지 ALB 인스턴스들은 자동으로 재등록되어 원하는 상태로 복원되며, 이때 모든 공개 ALB 인스턴스는 클러스터의 기본 하위 도메인 뒤에 등록됩니다.
기본 Ingress 클래스 처리
기본 Ingress 클래스는 ALB 활성화 또는 비활성화 이벤트가 발생할 때마다 재조정됩니다. 기본 Ingress 클래스가 ‘ IBM ’의 기본 설정으로 유지되고 별도로 구성되지 않은 경우, 자동으로 업데이트됩니다.
클러스터에 Traefik 기반 ALB만 활성화된 경우, 이전 기본값이 public-iks-k8s-nginx 이었는지 private-iks-k8s-nginx 이었는지에 따라 public-iks-traefik 또는 private-iks-traefik 이 기본값으로 설정됩니다. 마찬가지로, 클러스터에서 Ingress( NGINX ) 기반
ALB만 활성화된 경우, 기본 Ingress 클래스는 Ingress( NGINX )로 다시 변경됩니다.
사용자 정의 잉그레스 클래스는 절대 자동으로 기본값으로 설정되지 않습니다.
Traefik의 구성 및 사용자 정의에 대한 자세한 내용은 ‘Traefik의 Ingress 소개’를 참조하십시오.