관리형 TLS 인증서 및 HTTPS 사용

이 페이지에서는 Knative serving에서 HTTPS 연결을 지원하도록 TLS 인증서를 자동으로 제공하고 갱신하는 관리형 TLS 인증서 기능을 사용 중지했다가 다시 사용 설정하는 방법을 설명합니다.

HTTPS를 사용하려면 다음 조건이 충족되어야 합니다.

  • 컨테이너가 $PORT에서 계속 리슨해야 합니다.
  • TLS 인증서를 제공하는 방법을 선택해야 합니다.

    • 관리형 TLS 인증서를 사용합니다. 필요에 따라 TLS 인증서가 자동으로 생성되고 자동으로 갱신됩니다. 이 페이지에서 설명하는 이 기능은 지원되는 Google Kubernetes Engine 버전에서 사용할 수 있습니다.
    • 자체 인증서를 사용합니다. 개발자가 인증서를 가져오고 갱신해야 합니다. 제한사항의 설명처럼 경우에 따라 자체 인증서를 사용해야 합니다.
  • 또한 관리형 인증서를 사용할 경우 커스텀 도메인을 매핑해야 관리형 인증서 기능을 사용할 수 있습니다.

HTTPS 및 HTTP 사용

기본적으로 관리형 인증서, 클러스터 또는 Knative serving 서비스를 관리형 인증서와 함께 사용하면 HTTP 트래픽과 HTTPS 트래픽에 모두 노출됩니다. HTTPS 트래픽만 원할 경우 HTTPS 리디렉션을 사용 설정하여 모든 트래픽에서 HTTPS만 사용하도록 강제하면 됩니다.

문제 해결

관리형 TLS 인증서를 사용할 때 문제가 발생하면 관리형 TLS 문제 해결 페이지를 참조하세요.

제한사항

다음은 관리형 TLS 인증서 기능을 사용할 때 고려해야 하는 사항입니다.

  • Google Cloud의 Knative serving 비공개 클러스터에서는 관리형 TLS 인증서가 중지되어 있고 지원되지 않습니다.
  • 관리형 인증서 기능을 사용하려면 서비스가 외부에 노출되어야 합니다. Virtual Private Cloud를 통해 노출된 서비스나 클러스터 로컬 서비스에는 사용할 수 없습니다.
  • 관리형 인증서 기능은 Cloud Service Mesh에서만 작동합니다. Istio 부가기능 또는 기타 Istio 구성은 지원되지 않습니다.
  • 이 기능은 초기 할당량 한도가 등록된 도메인별로 주당 50개 TLS 인증서인 Let's Encrypt를 사용합니다. Let's Encrypt 문서를 따라 할당량 상향을 요청할 수 있습니다.
  • 온프렘 또는 AWS와 같은 다른 플랫폼에서 Knative serving 클러스터를 실행하면 이 기능이 중지됩니다. 이 기능을 사용하려면 클러스터가 Let's Encrypt에 액세스할 수 있고 Cloud Service Mesh 인그레스 서비스가 공개 인터넷에 노출되어 있는지 확인해야 합니다.

시작하기 전에

이 페이지의 안내에서는 다음을 가정합니다.

  • 클러스터에 Knative serving 서비스를 배포했습니다.
  • 도메인을 소유하고 있습니다. 도메인이 없다면 Google 또는 다른 도메인 공급업체에서 도메인을 얻을 수 있습니다.
  • 서비스의 도메인 매핑을 만들고 도메인 매핑 페이지의 안내를 따라 DNS 레코드를 업데이트했습니다.
  • Cloud DNS 또는 원하는 DNS 서버를 사용합니다.

전체 클러스터에 관리형 TLS 인증서 및 HTTPS 중지

ConfigMap config-domainmapping을 업데이트하여 클러스터용 관리형 TLS를 중지합니다.

kubectl patch cm config-domainmapping -n knative-serving -p '{"data":{"autoTLS":"Disabled"}}'

특정 도메인 매핑에 관리형 TLS 및 HTTPS 중지

필요한 경우 특정 도메인 매핑에 관리형 TLS를 사용 중지할 수 있습니다.

  1. domains.cloudrun.com/disableAutoTLS: "true" 주석을 추가합니다.

    kubectl annotate domainmappings DOMAIN domains.cloudrun.com/disableAutoTLS=true
  2. HTTPS가 작동하지 않는지 확인합니다.

    curl https://DOMAIN

  3. HTTP가 서비스에 사용되고 있는지 확인합니다.

    gcloud run domain-mappings describe --domain DOMAIN

    DOMAIN을 이미 소유한 도메인 이름(예: your-domain.com)으로 바꿉니다.

    위 명령어의 반환에서 url: 필드를 확인합니다. URL에는 https가 아닌 http가 있어야 합니다.

관리형 TLS 인증서 및 HTTPS 다시 사용 설정

관리형 TLS를 다시 사용 설정하려면 다음 안내를 따르세요.

  1. 아직 도메인 매핑을 만들지 않았으면 서비스의 도메인 매핑을 만들고 도메인 매핑 페이지의 안내를 따라 DNS 레코드를 업데이트합니다.

  2. ConfigMap config-domainmapping을 업데이트하여 관리형 TLS 인증서와 HTTPS를 사용 설정합니다.

    kubectl patch cm config-domainmapping -n knative-serving -p '{"data":{"autoTLS":"Enabled"}}'
  3. 명령어를 실행하고 몇 분 정도 기다린 후 인증서 기능이 작동하는지 확인합니다.

    kubectl get kcert

    인증서가 준비되면 다음과 비슷한 메시지가 표시됩니다.

    NAME              READY   REASON
    your-domain.com              True

    Kcert를 준비하는 데 20초에서 2분 정도 걸릴 수 있습니다. 문제가 발생하면 이 기능에 대한 문제 해결 안내를 참조하세요.

성공 여부 확인

  1. 다음 명령어를 실행하여 DNS 레코드가 적용되었는지 확인합니다.

    gcloud run domain-mappings describe --domain DOMAIN

    DOMAIN을 이미 소유한 도메인 이름(예: your-domain.com)으로 바꿉니다.

  2. 위 명령어의 반환에서 url: 필드를 확인합니다. URL에는 http가 아닌 https가 있어야 합니다.

  3. resourceRecords:rrdata에 나열된 위 명령어에서 IP 주소를 확인하고 명령어 host DOMAIN을 실행할 때 표시되는 값과 비교합니다. 이 두 값은 동일해야 합니다.

Knative serving을 위한 HTTPS 리디렉션 사용 설정

관리형 TLS 인증서 기능을 사용하면 기본적으로 이전 버전과의 호환성 목적으로 클러스터가 HTTP 트래픽과 HTTPS 트래픽에 모두 노출됩니다. 모든 트래픽이 HTTPS만 사용하도록 강제하려면 다음 명령어를 호출하여 기존 도메인 매핑에 HTTPS 리디렉션을 사용 설정하면 됩니다.

kubectl annotate domainmappings DOMAIN domains.cloudrun.com/httpsRedirect=Enabled

여기서 DOMAIN은 도메인 매핑 이름입니다.

  • 도메인 매핑, 인증서 할당량, 주문 상태 및 주문 제한 시간, 승인 실패를 확인하는 방법에 대한 자세한 내용은 관리형 TLS 문제 해결을 참조하세요.
  • 관리형 TLS 인증서 대신 자체 TLS 인증서를 사용하는 방법에 대한 자세한 내용은 자체 TLS 인증서 사용을 참조하세요.