이 페이지에서는 GKE에서 보안 인그레스에 Google 관리 SSL 인증서를 사용하는 방법을 설명합니다. Google의 자동 인증서 관리 서비스를 사용하여 애플리케이션의 HTTPS 암호화를 간소화하는 방법을 알아봅니다.
이 인증서는 Google에서 도메인 이름을 프로비저닝, 갱신, 관리하는 도메인 유효성 검사(DV) 인증서입니다. 이 인증서에는 개인 또는 조직의 ID가 표시되지 않습니다.
이 페이지는 네트워크 보안을 계획 및 구현하고 보안 정책을 개발 및 유지보수하는 네트워킹 전문가와 보안 전문가를 대상으로 합니다.Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크를 자세히 알아보려면 일반 GKE 사용자 역할 및 태스크를 참조하세요.
이 페이지를 읽기 전에 GKE에 대한 실무 지식이 있고 네트워킹 및 네트워크 보안을 잘 이해하고 있어야 합니다.
Google Cloud로 Google 관리 인증서를 만드는 방법을 알아보려면 Google 관리 인증서를 참조하세요.
Google 관리 인증서로 인그레스 만들기
Google 관리 SSL 인증서를 구성하고 인그레스에 연결하려면 다음을 수행해야 합니다.
- 인그레스와 동일한 네임스페이스에
ManagedCertificate객체를 만듭니다. - 인그레스에
networking.gke.io/managed-certificates주석을 추가하여ManagedCertificate객체를 인그레스에 연결합니다. 이 주석은ManagedCertificate객체의 쉼표로 구분된 목록입니다.
제한사항
Google 관리 인증서는 사용자가 직접 가져오고 관리하는 인증서보다 유연성이 낮습니다. Google 관리 인증서는 와일드 카드가 아닌 도메인을 최대 100개까지 지원합니다. 자체 관리형 인증서와 달리 Google 관리형 인증서는 와일드 카드 도메인을 지원하지 않습니다.
자체 관리형 인증서가 필요하거나 인그레스에 구성하려는 SSL 인증서를 이미 소유한 경우에는 클라이언트와 부하 분산기 간 HTTPS(TLS) 설정을 참조하세요.
인그레스가 지원하는 인증서의 개수와 유형은 Google 관리형 SSL 인증서의 한도에 따라 정의됩니다.
Google 관리형 인증서의 업데이트는 지원되지 않습니다. 자세한 내용은 Google 관리 인증서 수동 업데이트를 참조하세요.
인증서가 인증 기관에서 직접 취소된 경우 Google은 인증서를 자동으로 순환하지 않습니다. ManagedCertificate를 삭제하고 새 인증서를 만들어야 합니다.
기본 요건
도메인 이름을 소유하고 있어야 합니다. 도메인 이름은 63자(영문 기준) 이하여야 합니다. 모든 도메인 이름 등록기관을 사용하여 도메인 이름을 가져올 수 있습니다.
GKE Standard 클러스터를 사용하는 경우
HttpLoadBalancing부가기능을 사용 설정해야 합니다.인그레스 매니페스트에
kubernetes.io/ingress.class: "gce"주석이 포함되어야 합니다.ingressClassName필드는 지원되지 않습니다.같은 프로젝트와 네임스페이스에
Ingress및ManagedCertificate리소스를 적용해야 합니다.예약된(고정) 외부 IP 주소를 만듭니다. 고정 IP 주소를 예약하면 인그레스를 삭제해도 이 주소는 내 소유로 유지됩니다. IP 주소를 예약하지 않으면 주소가 변경되어 도메인의 DNS 레코드를 다시 구성해야 할 수도 있습니다. Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 예약 IP 주소를 만듭니다.
gcloud
예약된 IP 주소를 만들려면 다음 명령어를 실행합니다.
gcloud compute addresses create ADDRESS_NAME --globalADDRESS_NAME을 만들고 있는 예약 IP 주소의 이름으로 바꿉니다.만든 고정 IP 주소를 찾으려면 다음 명령어를 실행합니다.
gcloud compute addresses describe ADDRESS_NAME --global출력은 다음과 비슷합니다.
address: 203.0.113.32 ...콘솔
예약 IP 주소를 만들려면 다음 단계를 수행합니다.
Google Cloud 콘솔에서 외부 IP 주소 페이지로 이동합니다.
IP 주소의 이름을 지정합니다(예시:
example-ip-address).IPv4 또는 IPv6 주소 사용 여부를 지정합니다.
유형에 전역 옵션을 선택합니다.
예약을 클릭합니다. IP 주소가 외부 주소 열에 나열됩니다.
구성 커넥터
참고: 이 단계에는 구성 커넥터가 필요합니다. 설치 안내를 따라 클러스터에 구성 커넥터를 설치합니다.
이 매니페스트를 배포하려면compute-address.yaml로 머신에 다운로드하고 다음을 실행합니다.kubectl apply -f compute-address.yaml
Google 관리 인증서 설정
ManagedCertificate객체를 만듭니다. 이 리소스는 SSL 인증서의 도메인을 지정합니다. 와일드 카드 도메인은 지원되지 않습니다.다음 매니페스트에서는
ManagedCertificate객체를 설명합니다. 매니페스트를managed-cert.yaml로 저장합니다.apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: managed-cert spec: domains: - FQDN_1 - FQDN_2다음을 바꿉니다.
FQDN_1,FQDN_2: 소유하고 있는 정규화된 도메인 이름입니다. 예를 들면example.com및www.example.com입니다.
매니페스트를 클러스터에 적용합니다.
kubectl apply -f managed-cert.yamlNodePort유형의 서비스를 만들어 애플리케이션을 인터넷에 노출합니다.다음 매니페스트에서는
NodePort유형의 서비스를 설명합니다. 매니페스트를mc-service.yaml로 저장합니다.apiVersion: v1 kind: Service metadata: name: mc-service spec: selector: app: mc-service type: NodePort ports: - protocol: TCP port: 80 targetPort: 8080매니페스트를 클러스터에 적용합니다.
kubectl apply -f mc-service.yaml인그레스를 만듭니다.
다음 매니페스트는 만든
ManagedCertificate을 사용하는 인그레스를 설명합니다. 매니페스트를managed-cert-ingress.yaml로 저장합니다.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: managed-cert-ingress annotations: kubernetes.io/ingress.global-static-ip-name: ADDRESS_NAME networking.gke.io/managed-certificates: managed-cert kubernetes.io/ingress.class: "gce" spec: defaultBackend: service: name: mc-service port: number: SERVICE_PORT다음을 바꿉니다.
ADDRESS_NAME: 예약된 IP 주소의 이름입니다.SERVICE_PORT: 서비스 매니페스트의ports.port값입니다.
매니페스트를 클러스터에 적용합니다.
kubectl apply -f managed-cert-ingress.yaml부하 분산기의 IP 주소를 가져옵니다.
kubectl get ingress출력은 다음과 비슷합니다.
NAME HOSTS ADDRESS PORTS AGE managed-cert-ingress * 203.0.113.32 80 54s부하 분산기의 IP 주소가
ADDRESS열에 나열됩니다. 예약된 고정 IP 주소를 사용할 경우 이 주소는 부하 분산기의 주소입니다.주소가 나열되지 않으면 인그레스 설정이 완료되기를 기다립니다.
부하 분산기의 IP 주소를 가리키도록 도메인의 DNS 레코드를 구성합니다. Cloud DNS를 사용하는 경우 자세한 내용은 레코드 관리를 참조하세요.
Google 관리 인증서에서 프로비저닝을 완료할 때까지 기다립니다. 여기에는 최대 60분이 걸릴 수 있습니다. 다음 명령어를 사용하여 인증서 상태를 확인할 수 있습니다.
kubectl describe managedcertificate managed-cert출력은 다음과 비슷합니다.
Name: managed-cert Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: ManagedCertificate (...) Spec: Domains: FQDN_1 FQDN_2 Status: CertificateStatus: Active (...)Status.CertificateStatus필드 값은 인증서가 프로비저닝되었음을 나타냅니다.Status.CertificateStatus가Active가 아닌 경우 인증서가 아직 프로비저닝되지 않은 것입니다.다음 명령어를 사용하여 인그레스의 이벤트를 확인할 수 있습니다.
kubectl describe ingress INGRESS_NAMEINGRESS_NAME을 인그레스의 이름으로 바꿉니다.https://프리픽스로 도메인에 방문하여 SSL이 작동하는지 확인합니다. 브라우저에 연결이 안전하다고 표시되며 인증서 세부정보를 볼 수 있습니다.
자체 관리형 인증서에서 Google 관리형 인증서로 이전
자체 관리형 SSL 인증서에서 Google 관리형 SSL 인증서로 인그레스를 이전하는 경우, Google 관리형 SSL 인증서가 활성화되기 전에 자체 관리형 SSL 인증서를 삭제하지 마세요. Google 관리형 SSL 인증서는 성공적으로 프로비저닝된 후 자동으로 활성화됩니다. Google 관리형 SSL 인증서가 활성화되면 자가 관리형 SSL 인증서를 삭제할 수 있습니다.
다음 안내에 따라 자가 관리형에서 Google 관리형 SSL 인증서로 이전하세요.
- Google 관리 인증서 설정 섹션의 설명대로 인그레스에 새 Google 관리 인증서를 추가합니다.
Google 관리 인증서 리소스가 활성 상태가 되기를 기다립니다. 다음 명령어로 인증서 상태를 확인합니다.
kubectl describe managedcertificate managed-certActive상태가 되면 인그레스를 업데이트하여 자체 관리형 인증서에 대한 참조를 삭제합니다.
Google 관리 인증서 삭제
클러스터에서 Google 관리 인증서를 삭제하려면 ManagedCertificate 객체를 삭제하고 해당 리소스를 참조하는 인그레스 주석을 삭제해야 합니다.
ManagedCertificate객체를 삭제합니다.kubectl delete -f managed-cert.yaml출력은 다음과 비슷합니다.
managedcertificate.networking.gke.io "managed-cert" deleted인그레스에서 주석을 삭제합니다.
kubectl annotate ingress managed-cert-ingress networking.gke.io/managed-certificates-명령어 끝부분의 빼기 기호
-를 확인합니다.부하 분산기용으로 예약한 고정 IP 주소를 해제합니다.
Google Cloud CLI, Google Cloud 콘솔 또는 구성 커넥터를 사용하여 예약 IP 주소를 해제할 수 있습니다.
gcloud
다음 명령어를 사용하여 예약 IP 주소를 해제합니다.
gcloud compute addresses delete ADDRESS_NAME --globalADDRESS_NAME을 IP 주소의 이름으로 바꿉니다.콘솔
예약 IP 주소를 해제하려면 다음 단계를 수행합니다.
Google Cloud 콘솔에서 외부 IP 주소 페이지로 이동합니다.
해제하려는 IP 주소 옆에 있는 체크박스를 선택합니다.
IP 주소 해제를 클릭합니다.
구성 커넥터
참고: 이 단계에는 구성 커넥터가 필요합니다. 설치 안내를 따라 클러스터에 구성 커넥터를 설치합니다.
이 매니페스트를 배포하려면
compute-address.yaml로 머신에 다운로드하고 다음을 실행합니다.kubectl delete -f compute-address.yaml
다음 단계
- Google 관리 인증서 자세히 알아보기
- 인그레스를 사용한 외부 애플리케이션 부하 분산기 설정 방법 알아보기
- 인그레스로 외부 애플리케이션 부하 분산기에서 여러 SSL 인증서를 사용하는 방법 알아보기
- 보안 인그레스 구현