본문 바로가기
WIKI 기술 지식 베이스

TLSOption

원문 보기 위키 갱신

출처: TLSOption

본문

TLSOption

TLS 옵션을 사용하면 Traefik에서 TLS 연결의 일부 파라미터를 구성할 수 있어요.

TLSOption 객체를 만들거나 IngressRoute/IngressRouteTCP 객체에서 TLS 옵션을 참조하기 전에 Traefik Kubernetes CRD를 Kubernetes 클러스터에 적용해야 해요.

참조와 네임스페이스

선택적 namespace 속성이 설정되지 않으면 구성은 IngressRoute/IngressRouteTCP의 네임스페이스로 적용돼요.

추가로, TLS 옵션의 정의가 다른 provider에서 온 경우, TLS 옵션을 참조할 때 교차 provider 문법(middlewarename@provider)을 사용해야 해요. 이 경우 namespace 속성을 지정하는 것은 의미가 없으며 무시돼요.

Kubernetes의 TLSOption

Kubernetes에서 TLSOption 리소스를 사용할 때, 명시적으로 덮어쓰지 않으면 모든 인그레스에 적용될 기본 옵션 집합을 설정할 수 있어요. 이를 달성하려면 이름이 default인 TLSOption 리소스를 만들어야 해요. 이름이 default인 TLSOption은 (모든 네임스페이스에서) 하나만 존재할 수 있어요 — 그렇지 않으면 모두 무시돼요. 다른 TLSOption을 명시적으로 사용하려면(Kubernetes Ingress 리소스를 사용할 때) Ingress에 다음 형식의 어노테이션을 추가해야 해요: traefik.ingress.kubernetes.io/router.tls.options: -@kubernetescrd.

이 default TLSOption은 명시적으로 TLSOption을 참조하지 않는 모든 라우터의 TLS 강제 정책(클라이언트 인증, TLS 버전, 암호화 스위트, SNI 엄격성)을 담당해요. defaultTLSResourcesNamespace provider 옵션은 이 클러스터 전역 기본값이 정의될 수 있는 네임스페이스를 제한해요.

Configuration Example (설정 예시)

TLSOption

apiVersion: traefik.io/v1alpha1
kind: TLSOption
metadata:
  name: mytlsoption
  namespace: default

spec:
  minVersion: VersionTLS12
  sniStrict: true
  cipherSuites:
    - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    - TLS_RSA_WITH_AES_256_GCM_SHA384
  clientAuth:
    secretNames:
      - secret-ca1
      - secret-ca2
    clientAuthType: VerifyClientCertIfGiven

Configuration Options (설정 옵션)

| Field | Description | Default | Required | | minVersion | 허용되는 최소 TLS 버전이에요. | "VersionTLS12" | No | | maxVersion | 허용되는 최대 TLS 버전이에요. 이 옵션을 사용해 TLS 1.3을 비활성화하는 것은 권장하지 않아요. | | No | | cipherSuites | TLS 1.2까지의 TLS 버전에 대해 지원되는 암호화 스위트 목록이에요. TLS 1.2 이하를 위해 정의된 암호화 스위트는 TLS 1.3에서 사용할 수 없고, 그 반대도 마찬가지예요. TLS 1.3에서는 암호화 스위트를 구성할 수 없어요(이 경우 모든 지원 암호화 스위트가 안전해요). | | No | | curvePreferences | ECDHE 핸드셰이크에서 사용될 타원 곡선 참조 목록이에요. crypto 또는 RFC의 곡선 이름을 사용하세요. 자세한 내용은 CurveID를 참고해 주세요. | | No | | clientAuth.secretNames | 클라이언트 인증(mTLS) 옵션이에요. 참조된 Kubernetes Secrets(TLSOption 네임스페이스)의 이름 목록이에요. 시크릿은 tls.ca 또는 ca.crt 키 중 하나에 인증서를 포함해야 해요. | | No | | clientAuth.clientAuthType | 클라이언트 인증(mTLS) 옵션이에요. 적용할 클라이언트 인증 유형이에요. 사용 가능한 값은 여기를 참고해 주세요. | | No | | sniStrict | server_name 확장을 지정하지 않는 클라이언트 연결을 거부하도록 허용해요. 옵션이 활성화되면 기본 인증서는 결코 제공되지 않아요. | false | No | | alpnProtocols | TLS 핸드셰이크를 위해 선호 순서대로 지원되는 애플리케이션 레벨 프로토콜 목록이에요. 클라이언트가 ALPN을 지원하면 선택되는 프로토콜은 이 목록 중 하나이며, 상호 지원되는 프로토콜이 없으면 연결이 실패해요. | "h2, http/1.1, acme-tls/1" | No | | disableSessionTickets | 세션 티켓 사용을 비활성화해서 모든 클라이언트가 세션을 재개하는 대신 전체 TLS 핸드셰이크를 수행하도록 강제해요. | false | No |

Client Authentication (mTLS) (클라이언트 인증)

clientAuth.clientAuthType 옵션은 다음과 같이 동작을 결정해요:

  • NoClientCert: 클라이언트 인증서를 무시해요.

  • RequestClientCert: 인증서를 요청하지만, 제공되지 않으면 계속 진행해요.

  • RequireAnyClientCert: 인증서를 요구하지만, clientAuth.caFiles나 clientAuth.secretNames에 나열된 CA가 서명했는지는 검증하지 않아요.

  • VerifyClientCertIfGiven: 인증서가 제공되면 clientAuth.caFiles나 clientAuth.secretNames에 나열된 CA가 서명했는지 검증해요. 그렇지 않으면 인증서 없이 진행해요.

  • RequireAndVerifyClientCert: 인증서를 요구하며, 이 인증서는 clientAuth.caFiles나 clientAuth.secretNames에 나열된 CA가 서명해야 해요.

CA Secret

CA 시크릿은 tls.ca 또는 ca.crt 키 중 하나에 base64로 인코딩된 인증서를 포함해야 해요.

Default TLS Option (기본 TLS 옵션)

IngressRoute/IngressRouteTCP에 TLS 옵션이 지정되지 않으면 default 옵션이 사용돼요. 기본 동작은 아래 표에 요약되어 있어요:

| Configuration | Behavior | | default TLS Option 없음 | 기본적으로 내부 기본 TLS 옵션 집합을 사용해요. | | default TLS Option 하나 | 기본적으로 사용자 정의 TLS 옵션이 적용돼요. | | default TLS Option 여러 개 | 오류 로그 + 기본적으로 내부 기본 TLS 옵션 집합을 사용해요. |

더 알아보기 (Learn more)