6.3. Ingress 컨트롤러 구성 매개변수

ingresscontrollers.operator.openshift.io 리소스에서 제공되는 구성 매개변수는 다음과 같습니다.

매개변수설명

domain

domain은 Ingress 컨트롤러에서 제공하는 DNS 이름이며 여러 기능을 구성하는 데 사용됩니다.

  • LoadBalancerService 끝점 게시 방식에서는 domain을 사용하여 DNS 레코드를 구성합니다. endpointPublishingStrategy를 참조하십시오.
  • 생성된 기본 인증서를 사용하는 경우, 인증서는 domain 및 해당 subdomains에 유효합니다. defaultCertificate를 참조하십시오.
  • 사용자가 외부 DNS 레코드의 대상 위치를 확인할 수 있도록 이 값이 개별 경로 상태에 게시됩니다.

domain 값은 모든 Ingress 컨트롤러에서 고유해야 하며 업데이트할 수 없습니다.

비어 있는 경우 기본값은 ingress.config.openshift.io/cluster .spec.domain입니다.

replicas

replicas는 원하는 개수의 Ingress 컨트롤러 복제본입니다. 설정되지 않은 경우, 기본값은 2입니다.

endpointPublishingStrategy

endpointPublishingStrategy는 Ingress 컨트롤러 끝점을 다른 네트워크에 게시하고 로드 밸런서 통합을 활성화하며 다른 시스템에 대한 액세스를 제공하는 데 사용됩니다.

설정되지 않은 경우, 기본값은 infrastructure.config.openshift.io/cluster .status.platform을 기반으로 다음과 같습니다.

  • AWS: LoadBalancerService (외부 범위 포함)
  • Azure: LoadBalancerService (외부 범위 포함)
  • GCP: LoadBalancerService (외부 범위 포함)
  • 베어 메탈: NodePortService
  • 기타: HostNetwork

    참고

    RHOSP(Red Hat OpenStack Platform)에서 LoadBalancerService 끝점 게시 전략은 클라우드 공급자가 상태 모니터를 생성하도록 구성된 경우에만 지원됩니다. RHOSP 16.1 및 16.2의 경우 Amphora Octavia 공급자를 사용하는 경우에만 이 전략이 가능합니다.

    자세한 내용은 RHOSP 설치 설명서의 "클라우드 공급자 옵션 설정" 섹션을 참조하십시오.

대부분의 플랫폼의 경우 endpointPublishingStrategy 값을 업데이트할 수 있습니다. GCP에서는 다음 endpointPublishingStrategy 필드를 구성할 수 있습니다.

  • loadBalancer.scope
  • loadbalancer.providerParameters.gcp.clientAccess
  • hostNetwork.protocol
  • nodePort.protocol

defaultCertificate

defaultCertificate 값은 Ingress 컨트롤러가 제공하는 기본 인증서가 포함된 보안에 대한 참조입니다. 경로가 고유한 인증서를 지정하지 않으면 defaultCertificate가 사용됩니다.

보안에는 키와 데이터, 즉 *tls.crt: 인증서 파일 내용 *tls.key: 키 파일 내용이 포함되어야 합니다.

설정하지 않으면 와일드카드 인증서가 자동으로 생성되어 사용됩니다. 인증서는 Ingress 컨트롤러 도메인하위 도메인에 유효하며 생성된 인증서의 CA는 클러스터의 신뢰 저장소와 자동으로 통합됩니다.

생성된 인증서 또는 사용자 정의 인증서는 OpenShift Container Platform 내장 OAuth 서버와 자동으로 통합됩니다.

namespaceSelector

namespaceSelector는 Ingress 컨트롤러가 서비스를 제공하는 네임스페이스 집합을 필터링하는 데 사용됩니다. 이는 분할을 구현하는 데 유용합니다.

routeSelector

routeSelector는 Ingress 컨트롤러가 서비스를 제공하는 경로 집합을 필터링하는 데 사용됩니다. 이는 분할을 구현하는 데 유용합니다.

nodePlacement

nodePlacement를 사용하면 Ingress 컨트롤러의 스케줄링을 명시적으로 제어할 수 있습니다.

설정하지 않으면 기본값이 사용됩니다.

참고

nodePlacement 매개변수는 nodeSelectortolerations의 두 부분으로 구성됩니다. 예를 들면 다음과 같습니다.

nodePlacement:
 nodeSelector:
   matchLabels:
     kubernetes.io/os: linux
 tolerations:
 - effect: NoSchedule
   operator: Exists

tlsSecurityProfile

tlsSecurityProfile은 Ingress 컨트롤러의 TLS 연결 설정을 지정합니다.

설정되지 않으면, 기본값은 apiservers.config.openshift.io/cluster 리소스를 기반으로 설정됩니다.

Old, IntermediateModern 프로파일 유형을 사용하는 경우 유효한 프로파일 구성은 릴리스마다 변경될 수 있습니다. 예를 들어, 릴리스 X.Y.Z에 배포된 Intermediate 프로파일을 사용하도록 설정한 경우 X.Y.Z+1 릴리스로 업그레이드하면 새 프로파일 구성이 Ingress 컨트롤러에 적용되어 롤아웃이 발생할 수 있습니다.

Ingress 컨트롤러의 최소 TLS 버전은 1.1이며 최대 TLS 버전은 1.3입니다.

참고

구성된 보안 프로파일의 암호 및 최소 TLS 버전은 TLSProfile 상태에 반영됩니다.

중요

Ingress Operator는 Old 또는 Custom 프로파일의 TLS 1.01.1 로 변환합니다.

clientTLS

clientTLS는 클러스터 및 서비스에 대한 클라이언트 액세스를 인증하므로 상호 TLS 인증이 활성화됩니다. 설정되지 않은 경우 클라이언트 TLS가 활성화되지 않습니다.

clientTLS에는 필수 하위 필드인 spec.clientTLS.clientCertificatePolicyspec.clientTLS.ClientCA가 있습니다.

ClientCertificatePolicy 하위 필드는 Required 또는 Optional 이라는 두 값 중 하나를 허용합니다. ClientCA 하위 필드는 openshift-config 네임스페이스에 있는 구성 맵을 지정합니다. 구성 맵에는 CA 인증서 번들이 포함되어야 합니다.

AllowedSubjectPatterns는 요청을 필터링할 유효한 클라이언트 인증서의 고유 이름과 일치하는 정규식 목록을 지정하는 선택적 값입니다. 정규 표현식은 PCRE 구문을 사용해야 합니다. 클라이언트 인증서의 고유 이름과 일치하는 하나 이상의 패턴이 있어야 합니다. 그러지 않으면 Ingress 컨트롤러에서 인증서를 거부하고 연결을 거부합니다. 지정하지 않으면 Ingress 컨트롤러에서 고유 이름을 기반으로 인증서를 거부하지 않습니다.

routeAdmission

routeAdmission은 네임스페이스에서 클레임을 허용 또는 거부하는 등 새로운 경로 클레임을 처리하기 위한 정책을 정의합니다.

namespaceOwnership은 네임스페이스에서 호스트 이름 클레임을 처리하는 방법을 설명합니다. 기본값은 Strict입니다.

  • Strict: 경로가 네임스페이스에서 동일한 호스트 이름을 요청하는 것을 허용하지 않습니다.
  • InterNamespaceAllowed: 경로가 네임스페이스에서 동일한 호스트 이름의 다른 경로를 요청하도록 허용합니다.

wildcardPolicy는 Ingress 컨트롤러에서 와일드카드 정책이 포함된 경로를 처리하는 방법을 설명합니다.

  • WildcardsAllowed: 와일드카드 정책이 포함된 경로가 Ingress 컨트롤러에 의해 허용됨을 나타냅니다.
  • WildcardsDisallowed: 와일드카드 정책이 None인 경로만 Ingress 컨트롤러에 의해 허용됨을 나타냅니다. WildcardsAllowed에서 WildcardsDisallowedwildcardPolicy를 업데이트하면 와일드카드 정책이 Subdomain인 허용되는 경로의 작동이 중지됩니다. Ingress 컨트롤러에서 이러한 경로를 다시 허용하려면 이 경로를 설정이 None인 와일드카드 정책으로 다시 생성해야 합니다. 기본 설정은 WildcardsDisallowed입니다.

IngressControllerLogging

logging은 어디에서 무엇이 기록되는지에 대한 매개변수를 정의합니다. 이 필드가 비어 있으면 작동 로그는 활성화되지만 액세스 로그는 비활성화됩니다.

  • access는 클라이언트 요청이 기록되는 방법을 설명합니다. 이 필드가 비어 있으면 액세스 로깅이 비활성화됩니다.

    • destination은 로그 메시지의 대상을 설명합니다.

      • type은 로그 대상의 유형입니다.

        • Container 는 로그가 사이드카 컨테이너로 이동하도록 지정합니다. Ingress Operator는 Ingress 컨트롤러 pod에서 logs 라는 컨테이너를 구성하고 컨테이너에 로그를 작성하도록 Ingress 컨트롤러를 구성합니다. 관리자는 이 컨테이너에서 로그를 읽는 사용자 정의 로깅 솔루션을 구성해야 합니다. 컨테이너 로그를 사용한다는 것은 로그 비율이 컨테이너 런타임 용량 또는 사용자 정의 로깅 솔루션 용량을 초과하면 로그가 삭제될 수 있음을 의미합니다.
        • Syslog는 로그가 Syslog 끝점으로 전송되도록 지정합니다. 관리자는 Syslog 메시지를 수신할 수 있는 끝점을 지정해야 합니다. 관리자가 사용자 정의 Syslog 인스턴스를 구성하는 것이 좋습니다.
      • 컨테이너Container 로깅 대상 유형의 매개변수를 설명합니다. 현재는 컨테이너 로깅에 대한 매개변수가 없으므로 이 필드는 비어 있어야 합니다.
      • syslogSyslog 로깅 대상 유형의 매개변수를 설명합니다.

        • address는 로그 메시지를 수신하는 syslog 끝점의 IP 주소입니다.
        • port는 로그 메시지를 수신하는 syslog 끝점의 UDP 포트 번호입니다.
        • maxLength 는 syslog 메시지의 최대 길이입니다. 4804096 바이트 사이여야 합니다. 이 필드가 비어 있으면 최대 길이는 기본값인 1024 바이트로 설정됩니다.
        • facility는 로그 메시지의 syslog 기능을 지정합니다. 이 필드가 비어 있으면 장치가 local1이 됩니다. 아니면 kern, user, mail, daemon, auth, syslog, lpr, news, uucp, cron, auth2, ftp, ntp, audit, alert, cron2, local0, local1, local2, local3, local4, local5, local6 또는 local7 중에서 유효한 syslog 장치를 지정해야 합니다.
    • httpLogFormat은 HTTP 요청에 대한 로그 메시지의 형식을 지정합니다. 이 필드가 비어 있으면 로그 메시지는 구현의 기본 HTTP 로그 형식을 사용합니다. HAProxy의 기본 HTTP 로그 형식과 관련한 내용은 HAProxy 문서를 참조하십시오.

httpHeaders

httpHeaders는 HTTP 헤더에 대한 정책을 정의합니다.

IngressControllerHTTPHeadersforwardedHeaderPolicy 를 설정하면 Ingress 컨트롤러가 Forwarded,X-Forwarded-For,X-Forwarded- Port,X-Forwarded- Proto -Version HTTP 헤더를 설정하는 시기와 방법을 지정합니다.

기본적으로 정책은 Append로 설정됩니다.

  • Append는 Ingress 컨트롤러에서 기존 헤더를 유지하면서 헤더를 추가하도록 지정합니다.
  • Replace는 Ingress 컨트롤러에서 헤더를 설정하고 기존 헤더를 제거하도록 지정합니다.
  • IfNone은 헤더가 아직 설정되지 않은 경우 Ingress 컨트롤러에서 헤더를 설정하도록 지정합니다.
  • Never는 Ingress 컨트롤러에서 헤더를 설정하지 않고 기존 헤더를 보존하도록 지정합니다.

headerNameCaseAdjustments를 설정하여 HTTP 헤더 이름에 적용할 수 있는 대/소문자 조정을 지정할 수 있습니다. 각 조정은 원하는 대문자를 사용하여 HTTP 헤더 이름으로 지정됩니다. 예를 들어 X-Forwarded-For를 지정하면 지정된 대문자를 사용하도록 x-forwarded-for HTTP 헤더를 조정해야 합니다.

이러한 조정은 HTTP/1을 사용하는 경우에만 일반 텍스트, 에지 종료 및 재암호화 경로에 적용됩니다.

요청 헤더의 경우 이러한 조정은 haproxy.router.openshift.io/h1-adjust-case=true 주석이 있는 경로에만 적용됩니다. 응답 헤더의 경우 이러한 조정이 모든 HTTP 응답에 적용됩니다. 이 필드가 비어 있으면 요청 헤더가 조정되지 않습니다.

httpCompression

httpCompression 은 HTTP 트래픽 압축 정책을 정의합니다.

  • mimetypes 는 압축을 적용해야 하는 MIME 유형 목록을 정의합니다. 예를 들어, text/css; substringset=utf-8,text/html,text/*, image/svg+xml,application/octet-stream,X-custom/customsub, using the format pattern, type/subtype; [;attribute=value]. 유형은 다음과 같습니다: application, image, message, multipart, text, video, or a custom type prefaced by X-..g. MIME 유형 및 하위 형식에 대한 전체 표기법을 보려면 RFC1341을 참조하십시오.

httpErrorCodePages

httpErrorCodePages는 사용자 정의 HTTP 오류 코드 응답 페이지를 지정합니다. 기본적으로 IngressController는 IngressController 이미지에 빌드된 오류 페이지를 사용합니다.

httpCaptureCookies

httpCapECDHECookies 는 액세스 로그에서 캡처하려는 HTTP 쿠키를 지정합니다. httpCapECDHECookies 필드가 비어 있으면 액세스 로그에서 쿠키를 캡처하지 않습니다.

캡처하려는 모든 쿠키의 경우 다음 매개변수는 IngressController 구성에 있어야 합니다.

  • name 은 쿠키 이름을 지정합니다.
  • MaxLength 는 쿠키의 최대 길이를 지정합니다.
  • matchType 은 쿠키의 필드 이름이 캡처 쿠키 설정과 정확히 일치하는지 또는 캡처 쿠키 설정의 접두사인지 지정합니다. matchType 필드는 ExactPrefix 매개변수를 사용합니다.

예를 들면 다음과 같습니다.

  httpCaptureCookies:
  - matchType: Exact
    maxLength: 128
    name: MYCOOKIE

httpCaptureHeaders

httpCapECDHEHeaders 는 액세스 로그에서 캡처할 HTTP 헤더를 지정합니다. httpCapECDHEHeaders 필드가 비어 있으면 액세스 로그에서 헤더를 캡처하지 않습니다.

httpCapECDHEHeaders 에는 액세스 로그에서 캡처할 두 개의 헤더 목록이 포함되어 있습니다. 두 헤더 필드 목록은 requestresponse 입니다. 두 목록 모두에서 name 필드는 헤더 이름을 지정해야 하며 maxlength 필드는 헤더의 최대 길이를 지정해야 합니다. 예를 들면 다음과 같습니다.

  httpCaptureHeaders:
    request:
    - maxLength: 256
      name: Connection
    - maxLength: 128
      name: User-Agent
    response:
    - maxLength: 256
      name: Content-Type
    - maxLength: 256
      name: Content-Length

tuningOptions

tuningOptions는 Ingress 컨트롤러 Pod의 성능을 조정하는 옵션을 지정합니다.

  • headerBufferBytes는 Ingress 컨트롤러 연결 세션에 대해 예약된 메모리 양을 바이트 단위로 지정합니다. Ingress 컨트롤러에 HTTP/2가 활성화된 경우 이 값은 16384 이상이어야 합니다. 설정되지 않은 경우, 기본값은 32768 바이트입니다. headerBufferBytes 값이 너무 작으면 Ingress 컨트롤러가 손상될 수 있으며 headerBufferBytes 값이 너무 크면 Ingress 컨트롤러가 필요 이상으로 많은 메모리를 사용할 수 있기 때문에 이 필드를 설정하지 않는 것이 좋습니다.
  • headerBufferMaxRewriteBytes는 HTTP 헤더 재작성 및 Ingress 컨트롤러 연결 세션에 대한 headerBufferBytes의 바이트 단위로 예약해야 하는 메모리 양을 지정합니다. headerBufferMaxRewriteBytes의 최소 값은 4096입니다. headerBufferBytes는 들어오는 HTTP 요청에 대해 headerBufferMaxRewriteBytes보다 커야 합니다. 설정되지 않은 경우, 기본값은 8192 바이트입니다. headerBufferMaxRewriteBytes 값이 너무 작으면 Ingress 컨트롤러가 손상될 수 있으며 headerBufferMaxRewriteBytes 값이 너무 크면 Ingress 컨트롤러가 필요 이상으로 많은 메모리를 사용할 수 있기 때문에 이 필드를 설정하지 않는 것이 좋습니다.
  • threadCount는 HAProxy 프로세스별로 생성할 스레드 수를 지정합니다. 더 많은 스레드를 생성하면 각 Ingress 컨트롤러 Pod가 더 많은 시스템 리소스 비용으로 더 많은 연결을 처리할 수 있습니다. HAProxy는 최대 64개의 스레드를 지원합니다. 이 필드가 비어 있으면 Ingress 컨트롤러는 기본값 4 스레드를 사용합니다. 기본값은 향후 릴리스에서 변경될 수 있습니다. HAProxy 스레드 수를 늘리면 Ingress 컨트롤러 Pod에서 부하에 더 많은 CPU 시간을 사용할 수 있고 다른 Pod에서 수행해야 하는 CPU 리소스를 수신하지 못하므로 이 필드를 설정하지 않는 것이 좋습니다. 스레드 수를 줄이면 Ingress 컨트롤러가 제대로 작동하지 않을 수 있습니다.
  • ClientTimeout은 클라이언트 응답을 기다리는 동안 연결이 열린 상태로 유지되는 시간을 지정합니다. 설정되지 않으면 기본 제한 시간은 30s입니다.
  • serverFinTimeout은 연결을 종료하는 클라이언트에 대한 서버 응답을 기다리는 동안 연결이 열린 상태로 유지되는 시간을 지정합니다. 설정되지 않은 경우 기본 제한 시간은 1s입니다.
  • ServerTimeout은 서버 응답을 기다리는 동안 연결이 열린 상태로 유지되는 시간을 지정합니다. 설정되지 않으면 기본 제한 시간은 30s입니다.
  • clientFinTimeout은 연결을 닫는 서버에 대한 클라이언트 응답을 기다리는 동안 연결이 열린 상태로 유지되는 시간을 지정합니다. 설정되지 않은 경우 기본 제한 시간은 1s입니다.
  • tlsInspectDelay는 라우터에서 일치하는 경로를 찾기 위해 데이터를 보유할 수 있는 기간을 지정합니다. 이 값을 너무 짧게 설정하면 라우터가 더 나은 일치 인증서를 사용하는 경우에도 에지 종료, 재암호화 또는 패스스루에 대한 기본 인증서로 대체될 수 있습니다. 설정되지 않은 경우 기본 검사 지연은 5s입니다.
  • tunnelTimeout은 터널이 유휴 상태일 때 웹소켓을 포함한 터널 연결이 열린 상태로 유지되는 시간을 지정합니다. 설정되지 않은 경우 기본 제한 시간은 1h입니다.

logEmptyRequests

logEmptyRequests는 요청이 수신 및 기록되지 않은 연결을 지정합니다. 이러한 빈 요청은 로드 밸런서 상태 프로브 또는 웹 브라우저 추측 연결(사전 연결)에서 발생하며 이러한 요청을 로깅하는 것은 바람직하지 않을 수 있습니다. 이러한 빈 요청은 로드 밸런서 상태 프로브 또는 웹 브라우저 추측 연결(사전 연결)에서 발생하며 이러한 요청을 로깅하는 것은 바람직하지 않을 수 있습니다. 이러한 요청은 포트 검색으로 인해 발생할 수 있으며 빈 요청을 로깅하면 침입 시도를 감지하는 데 도움이 될 수 있습니다. 이 필드에 허용되는 값은 LogIgnore 입니다. 기본값은 Log 입니다.

LoggingPolicy 유형은 다음 두 값 중 하나를 허용합니다.

  • Log: 이 값을 Log로 설정하면 이벤트가 로깅되어야 함을 나타냅니다.
  • ignore: 이 값을 Ignore 로 설정하면 HAproxy 구성에서 dontlognull 옵션이 설정됩니다.

HTTPEmptyRequestsPolicy

HTTPEmptyRequestsPolicy는 요청을 수신하기 전에 연결 시간이 초과된 경우 HTTP 연결이 처리되는 방법을 설명합니다.. 이 필드에 허용되는 값은 RespondIgnore입니다. 기본값은 Respond입니다.

HTTPEmptyRequestsPolicy 유형은 다음 두 값 중 하나를 허용합니다.

  • Response: 필드가 Respond로 설정된 경우 Ingress 컨트롤러는 HTTP 400 또는 408 응답을 전송하고 액세스 로깅이 활성화된 경우 연결을 로깅한 다음 적절한 메트릭의 연결을 계산합니다.
  • ignore: 이 옵션을 Ignore로 설정하면 HAproxy 구성에 http-ignore-probes 매개변수가 추가됩니다. 필드가 Ignore 로 설정된 경우 Ingress 컨트롤러는 응답을 전송하지 않고 연결을 종료한 다음 연결을 기록하거나 메트릭을 늘립니다.

이러한 연결은 로드 밸런서 상태 프로브 또는 웹 브라우저 추측 연결(preconnect)에서 제공되며 무시해도 됩니다. 그러나 이러한 요청은 네트워크 오류로 인해 발생할 수 있으므로 이 필드를 Ignore로 설정하면 문제를 탐지하고 진단할 수 있습니다. 이러한 요청은 포트 검색으로 인해 발생할 수 있으며, 이 경우 빈 요청을 로깅하면 침입 시도를 탐지하는 데 도움이 될 수 있습니다.

참고

모든 매개변수는 선택 사항입니다.

6.3.1. Ingress 컨트롤러 TLS 보안 프로필

TLS 보안 프로필은 서버가 서버에 연결할 때 연결 클라이언트가 사용할 수 있는 암호를 규제하는 방법을 제공합니다.

6.3.1.1. TLS 보안 프로필 이해

TLS(Transport Layer Security) 보안 프로필을 사용하여 다양한 OpenShift Container Platform 구성 요소에 필요한 TLS 암호를 정의할 수 있습니다. OpenShift Container Platform TLS 보안 프로필은 Mozilla 권장 구성을 기반으로 합니다.

각 구성 요소에 대해 다음 TLS 보안 프로필 중 하나를 지정할 수 있습니다.

표 6.1. TLS 보안 프로필

Profile설명

Old

이 프로필은 레거시 클라이언트 또는 라이브러리와 함께 사용하기 위한 것입니다. 프로필은 이전 버전과의 호환성 권장 구성을 기반으로 합니다.

Old 프로파일에는 최소 TLS 버전 1.0이 필요합니다.

참고

Ingress 컨트롤러의 경우 최소 TLS 버전이 1.0에서 1.1로 변환됩니다.

Intermediate

이 프로필은 대부분의 클라이언트에서 권장되는 구성입니다. Ingress 컨트롤러, kubelet 및 컨트롤 플레인의 기본 TLS 보안 프로필입니다. 프로필은 중간 호환성 권장 구성을 기반으로 합니다.

Intermediate 프로필에는 최소 TLS 버전이 1.2가 필요합니다.

Modern

이 프로필은 이전 버전과의 호환성이 필요하지 않은 최신 클라이언트와 사용하기 위한 것입니다. 이 프로필은 최신 호환성 권장 구성을 기반으로 합니다.

Modern 프로필에는 최소 TLS 버전 1.3이 필요합니다.

사용자 지정

이 프로필을 사용하면 사용할 TLS 버전과 암호를 정의할 수 있습니다.

주의

Custom 프로파일을 사용할 때는 잘못된 구성으로 인해 문제가 발생할 수 있으므로 주의해야 합니다.

참고

미리 정의된 프로파일 유형 중 하나를 사용하는 경우 유효한 프로파일 구성은 릴리스마다 변경될 수 있습니다. 예를 들어 릴리스 X.Y.Z에 배포된 중간 프로필을 사용하는 사양이 있는 경우 릴리스 X.Y.Z+1로 업그레이드하면 새 프로필 구성이 적용되어 롤아웃이 발생할 수 있습니다.

6.3.1.2. Ingress 컨트롤러의 TLS 보안 프로필 구성

Ingress 컨트롤러에 대한 TLS 보안 프로필을 구성하려면 IngressController CR(사용자 정의 리소스)을 편집하여 사전 정의된 또는 사용자 지정 TLS 보안 프로필을 지정합니다. TLS 보안 프로필이 구성되지 않은 경우 기본값은 API 서버에 설정된 TLS 보안 프로필을 기반으로 합니다.

Old TLS 보안 프로파일을 구성하는 샘플 IngressController CR

apiVersion: operator.openshift.io/v1
kind: IngressController
 ...
spec:
  tlsSecurityProfile:
    old: {}
    type: Old
 ...

TLS 보안 프로필은 Ingress 컨트롤러의 TLS 연결에 대한 최소 TLS 버전과 TLS 암호를 정의합니다.

Status.Tls Profile 아래의 IngressController CR(사용자 정의 리소스) 및 Spec.Tls Security Profile 아래 구성된 TLS 보안 프로필에서 구성된 TLS 보안 프로필의 암호 및 최소 TLS 버전을 확인할 수 있습니다. Custom TLS 보안 프로필의 경우 특정 암호 및 최소 TLS 버전이 두 매개변수 아래에 나열됩니다.

참고

HAProxy Ingress 컨트롤러 이미지는 TLS 1.3Modern 프로필을 지원합니다.

Ingress Operator는 Old 또는 Custom 프로파일의 TLS 1.01.1로 변환합니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.

프로세스

  1. openshift-ingress-operator 프로젝트에서 IngressController CR을 편집하여 TLS 보안 프로필을 구성합니다.

    $ oc edit IngressController default -n openshift-ingress-operator
  2. spec.tlsSecurityProfile 필드를 추가합니다.

    Custom 프로필에 대한 IngressController CR 샘플

    apiVersion: operator.openshift.io/v1
    kind: IngressController
     ...
    spec:
      tlsSecurityProfile:
        type: Custom 1
        custom: 2
          ciphers: 3
          - ECDHE-ECDSA-CHACHA20-POLY1305
          - ECDHE-RSA-CHACHA20-POLY1305
          - ECDHE-RSA-AES128-GCM-SHA256
          - ECDHE-ECDSA-AES128-GCM-SHA256
          minTLSVersion: VersionTLS11
     ...

    1
    TLS 보안 프로필 유형(Old,Intermediate 또는 Custom)을 지정합니다. 기본값은 Intermediate입니다.
    2
    선택한 유형의 적절한 필드를 지정합니다.
    • old: {}
    • intermediate: {}
    • custom:
    3
    custom 유형의 경우 TLS 암호화 목록 및 최소 허용된 TLS 버전을 지정합니다.
  3. 파일을 저장하여 변경 사항을 적용합니다.

검증

  • IngressController CR에 프로파일이 설정되어 있는지 확인합니다.

    $ oc describe IngressController default -n openshift-ingress-operator

    출력 예

    Name:         default
    Namespace:    openshift-ingress-operator
    Labels:       <none>
    Annotations:  <none>
    API Version:  operator.openshift.io/v1
    Kind:         IngressController
     ...
    Spec:
     ...
      Tls Security Profile:
        Custom:
          Ciphers:
            ECDHE-ECDSA-CHACHA20-POLY1305
            ECDHE-RSA-CHACHA20-POLY1305
            ECDHE-RSA-AES128-GCM-SHA256
            ECDHE-ECDSA-AES128-GCM-SHA256
          Min TLS Version:  VersionTLS11
        Type:               Custom
     ...

6.3.1.3. 상호 TLS 인증 구성

spec.clientTLS 값을 설정하여 mTLS(mTLS) 인증을 사용하도록 Ingress 컨트롤러를 구성할 수 있습니다. clientTLS 값은 클라이언트 인증서를 확인하도록 Ingress 컨트롤러를 구성합니다. 이 구성에는 구성 맵에 대한 참조인 clientCA 값 설정이 포함됩니다. 구성 맵에는 클라이언트의 인증서를 확인하는 데 사용되는 PEM 인코딩 CA 인증서 번들이 포함되어 있습니다. 필요한 경우 인증서 주체 필터 목록을 구성할 수도 있습니다.

clientCA 값이 X509v3 인증서 취소 목록(CRL) 배포 지점을 지정하는 경우 Ingress Operator는 제공된 각 인증서에 지정된 HTTP URI X509v3 CRL 배포 포인트를 기반으로 CRL 구성 맵을 다운로드하고 관리합니다. Ingress 컨트롤러는 mTLS/TLS 협상 중에 이 구성 맵을 사용합니다. 유효한 인증서를 제공하지 않는 요청은 거부됩니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • PEM 인코딩 CA 인증서 번들이 있습니다.
  • CA 번들이 CRL 배포 지점을 참조하는 경우 클라이언트 CA 번들에 end-entity 또는 leaf 인증서도 포함되어 있어야 합니다. 이 인증서에는 RFC 5280에 설명된 대로 CRL 배포 포인트 아래에 HTTP URI가 포함되어야 합니다. 예를 들면 다음과 같습니다.

     Issuer: C=US, O=Example Inc, CN=Example Global G2 TLS RSA SHA256 2020 CA1
             Subject: SOME SIGNED CERT            X509v3 CRL Distribution Points:
                    Full Name:
                      URI:http://crl.example.com/example.crl

절차

  1. openshift-config 네임스페이스에서 CA 번들에서 구성 맵을 생성합니다.

    $ oc create configmap \
       router-ca-certs-default \
       --from-file=ca-bundle.pem=client-ca.crt \1
       -n openshift-config
    1
    구성 맵 데이터 키는 ca-bundle.pem이어야 하며 데이터 값은 PEM 형식의 CA 인증서여야 합니다.
  2. openshift-ingress-operator 프로젝트에서 IngressController 리소스를 편집합니다.

    $ oc edit IngressController default -n openshift-ingress-operator
  3. spec.clientTLS 필드 및 하위 필드를 추가하여 상호 TLS를 구성합니다.

    패턴 필터링을 지정하는 clientTLS 프로필에 대한 IngressController CR 샘플

      apiVersion: operator.openshift.io/v1
      kind: IngressController
      metadata:
        name: default
        namespace: openshift-ingress-operator
      spec:
        clientTLS:
          clientCertificatePolicy: Required
          clientCA:
            name: router-ca-certs-default
          allowedSubjectPatterns:
          - "^/CN=example.com/ST=NC/C=US/O=Security/OU=OpenShift$"