이 페이지에서는 인그레스 객체를 사용하여 Google 관리 SSL 인증서로 외부 부하 분산기를 만드는 방법을 설명합니다. 이 인증서는 Google에서 도메인 이름을 프로비저닝, 갱신, 관리하는 도메인 유효성 검사(DV) 인증서입니다. 이 인증서에는 개인 또는 조직의 ID가 표시되지 않습니다.
이 페이지는 네트워크 보안을 계획 및 구현하고 보안 정책을 유지보수하는 네트워킹 전문가 및 보안 전문가를 대상으로 합니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE 기업 사용자 역할 및 태스크를 참조하세요.
Google Cloud로 Google 관리 인증서를 만드는 방법은 Google 관리 인증서를 참조하세요.
GKE Google 관리 SSL 인증서는 공개 및 비공개 클러스터를 지원합니다.
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자(영문 기준) 이하여야 합니다. Google Domains 또는 다른 등록기관을 이용할 수 있습니다.
- GKE Standard 클러스터를 사용하는 경우
HttpLoadBalancing
부가기능을 사용 설정해야 합니다. ingressClassName
는"gce"
여야 합니다.- 같은 프로젝트와 네임스페이스에
Ingress
및ManagedCertificate
리소스를 적용해야 합니다. 예약된(고정) 외부 IP 주소를 만듭니다. 고정 IP 주소를 예약하면 인그레스를 삭제해도 이 주소는 내 소유로 유지됩니다. IP 주소를 예약하지 않으면 주소가 변경되어 도메인의 DNS 레코드를 다시 구성해야 할 수도 있습니다. Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 예약 IP 주소를 만듭니다.
gcloud
예약된 IP 주소를 만들려면 다음 명령어를 실행합니다.
gcloud compute addresses create ADDRESS_NAME --global
ADDRESS_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.yaml
NodePort
유형의 서비스를 만들어 애플리케이션을 인터넷에 노출합니다.다음 매니페스트에서는
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" # Updated annotation 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_NAME
INGRESS_NAME
을 인그레스의 이름으로 바꿉니다.https://
프리픽스로 도메인에 방문하여 SSL이 작동하는지 확인합니다. 브라우저에 연결이 안전하다고 표시되며 인증서 세부정보를 볼 수 있습니다.
자체 관리형 인증서에서 Google 관리형 인증서로 이전
자체 관리형 SSL 인증서에서 Google 관리형 SSL 인증서로 인그레스를 이전하는 경우, Google 관리형 SSL 인증서가 활성화되기 전에 자체 관리형 SSL 인증서를 삭제하지 마세요. Google 관리형 SSL 인증서는 성공적으로 프로비저닝된 후 자동으로 활성화됩니다. Google 관리형 SSL 인증서가 활성화되면 자가 관리형 SSL 인증서를 삭제할 수 있습니다.
다음 안내에 따라 자가 관리형에서 Google 관리형 SSL 인증서로 이전하세요.
- Google 관리 인증서 설정 섹션의 설명대로 인그레스에 새 Google 관리 인증서를 추가합니다.
Google 관리 인증서 리소스가 활성 상태가 되기를 기다립니다. 다음 명령어로 인증서 상태를 확인합니다.
kubectl describe managedcertificate managed-cert
Active
상태가 되면 인그레스를 업데이트하여 자체 관리형 인증서에 대한 참조를 삭제합니다.
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 --global
ADDRESS_NAME
을 IP 주소의 이름으로 바꿉니다.콘솔
예약 IP 주소를 해제하려면 다음 단계를 수행합니다.
Google Cloud 콘솔의 외부 IP 주소 페이지로 이동합니다.
해제하려는 IP 주소 옆에 있는 체크박스를 선택합니다.
IP 주소 해제를 클릭합니다.
구성 커넥터
참고: 이 단계에는 구성 커넥터가 필요합니다. 설치 안내를 따라 클러스터에 구성 커넥터를 설치하세요.
이 매니페스트를 배포하려면
compute-address.yaml
로 머신에 다운로드하고 다음을 실행합니다.kubectl delete -f compute-address.yaml
문제 해결
이 섹션에서는 Google 관리 인증서로 문제를 해결하는 방법에 대한 정보를 제공합니다.
ManagedCertificate
및 인그레스 리소스의 이벤트 확인
허용된 인증서 수를 초과하면 TooManyCertificates
이유가 있는 이벤트가 ManagedCertificate
에 추가됩니다. 다음 명령어를 사용하여 ManagedCertificate
객체의 이벤트를 확인할 수 있습니다.
kubectl describe managedcertificate CERTIFICATE_NAME
CERTIFICATE_NAME
을 ManagedCertificate
의 이름으로 바꿉니다.
존재하지 않는 ManagedCertificate
를 인그레스에 연결하면 MissingCertificate
이유가 포함된 이벤트가 인그레스에 추가됩니다. 다음 명령어를 사용하여 인그레스의 이벤트를 확인할 수 있습니다.
kubectl describe ingress INGRESS_NAME
INGRESS_NAME
을 인그레스의 이름으로 바꿉니다.
도메인이 여러 부하 분산기의 IP 주소로 확인될 경우 관리형 인증서가 프로비저닝되지 않음
도메인이 여러 부하 분산기(여러 인그레스 객체)의 IP 주소로 확인되면 ManagedCertificate
객체 한 개를 만들고 모든 인그레스 객체에 연결해야 합니다. 대신 여러 ManagedCertificate
객체를 만들고 개별 인그레스에 각각 연결하면 인증 기관이 도메인의 소유권을 확인하지 못하고 일부 인증서가 프로비저닝되지 않을 수 있습니다. 확인을 성공하려면 도메인이 확인되는 모든 IP 주소 아래에 인증서가 표시되어야 합니다.
특히 도메인이 다른 인그레스 객체로 구성된 IPv4 및 IPv6 주소로 확인되면 ManagedCertificate
객체 한 개를 만들고 두 인그레스 모두에 연결해야 합니다.
Google 관리 인증서와 인그레스 간의 통신 중단
관리형 인증서는 ingress.gcp.kubernetes.io/pre-shared-cert
주석을 사용하여 인그레스와 통신합니다. 예를 들어 다음 경우에는 이 통신을 중단할 수 있습니다.
ingress.gcp.kubernetes.io/pre-shared-cert
주석을 삭제하는 자동화 프로세스를 실행합니다.- 인그레스 스냅샷을 저장한 후 스냅샷에서 인그레스를 삭제하고 복원합니다. 그동안
ingress.gcp.kubernetes.io/pre-shared-cert
주석에 나열된SslCertificate
리소스가 삭제되었을 수 있습니다. 인그레스에 연결된 인증서가 없으면 인그레스가 작동하지 않습니다.
Google 관리 인증서와 인그레스 간의 통신이 중단된 경우 ingress.gcp.kubernetes.io/pre-shared-cert
주석의 콘텐츠를 삭제하고 시스템이 조정될 때까지 기다립니다. 반복을 방지하려면 주석이 의도치 않게 수정되거나 삭제되지 않도록 해야 합니다.
Google 관리 인증서를 만들 때 검증 오류
ManagedCertificate
정의는 ManagedCertificate
객체가 생성되기 전에 검증됩니다. 검증이 실패하면 ManagedCertificate
객체가 생성되지 않고 오류 메시지가 출력됩니다. 아래에서는 여러 오류 메시지와 원인을 설명합니다.
spec.domains in body should have at most 100 items
ManagedCertificate
매니페스트가 spec.domains
필드에 도메인을 100개 넘게 나열합니다. Google 관리 인증서는 도메인을 최대 100개까지만 지원합니다.
spec.domains in body should match '^(([a-zA-Z0-9]+|[a-zA-Z0-9][-a-zA-Z0-9]*[a-zA-Z0-9])\.)+[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]\.?$'
spec.domains
필드에 지정한 도메인 이름 또는 와일드 카드 도메인 이름이 잘못되었습니다. ManagedCertificate
객체는 와일드 카드 도메인(예: *.example.com
)을 지원하지 않습니다.
spec.domains in body should be at most 63 chars long
지정한 도메인 이름이 너무 깁니다. Google 관리 인증서에서 지원하는 도메인 이름은 최대 63자입니다.
Google 관리형 인증서 수동 업데이트
새 도메인의 인증서가 프로비저닝될 때까지 이전 도메인의 인증서가 계속 작동하도록 인증서를 수동으로 업데이트하려면 다음 단계를 따르세요.
- 새 도메인에 대한
ManagedCertificate
을 만듭니다. - 쉼표로 구분된 목록을 사용하여
ManagedCertificate
이름을 인그레스의networking.gke.io/managed-certificates
주석에 추가합니다. 이전 인증서 이름을 삭제하지 마세요. ManagedCertificate
이 활성 상태가 될 때까지 기다립니다.- 인그레스에서 이전 인증서를 분리하고 삭제합니다.
ManagedCertificate
를 만들면 Google Cloud에서 Google 관리 SSL 인증서를 만듭니다. 이 인증서를 업데이트할 수 없습니다. ManagedCertificate
를 업데이트하면 Google Cloud에서 Google 관리 SSL 인증서를 삭제하고 다시 만듭니다.
GKE 클러스터의 HTTPS 암호화된 인그레스를 제공하려면 보안 인그레스 예시를 참조하세요.
다음 단계
- Google 관리 인증서 자세히 알아보기
- 인그레스를 사용한 외부 애플리케이션 부하 분산기 설정 방법 알아보기
- 인그레스로 외부 애플리케이션 부하 분산기에서 여러 SSL 인증서를 사용하는 방법 알아보기
- 보안 인그레스 구현