이 가이드는 Google Kubernetes Engine(GKE)을 사용하여 정적 외부 IP 주소에서 웹 애플리케이션을 인터넷에 노출하고 애플리케이션을 가리키도록 도메인 이름을 구성하는 방법을 보여줍니다. 이 자습서에서는 다음과 같은 등록된 도메인 이름을 소유하고 있다고 가정합니다. example.com Google을 통해 도메인 이름을 등록할 수 있습니다. 귀하의 도메인 또는 다른 도메인 등록 기관 없는 경우 선택 ## 목표 이 자습서에서는 다음 단계를 보여줍니다. ## 비용 이 가이드에서는 청구 가능한 다음 Google Cloud 구성요소를 사용합니다. 예상 사용량을 기반으로 비용 견적을 생성하려면 가격 계산기 사용 이 자습서를 마치면 생성한 리소스를 삭제하여 계속 청구되지 않도록 할 수 있습니다. 자세한 내용은 정리를 참조하세요. ## 시작하기 전에 Kubernetes Engine API를 사용 설정하려면 다음 단계를 따르세요. - Google Cloud Console에서 Kubernetes Engine 페이지를 방문합니다. - 프로젝트 생성 또는 선택 - API 및 관련 서비스가 활성화될 때까지 기다립니다. 이 작업은 몇 분 정도 걸릴 수 있습니다. - 클라우드 프로젝트에 결제가 사용 설정되어 있는지 확인하세요. 프로젝트에서 결제가 사용 설정되었는지 확인하는 방법 알아보기 이 자습서에서 사용되는 다음 명령줄 도구를 설치합니다. - gcloudis는 Kubernetes Engine 클러스터를 만들고 삭제하는 데 사용됩니다. gcloudis에 포함된 gcloudCLI - Kubernetes Engine에서 사용하는 클러스터 오케스트레이션 시스템인 Kubernetes를 관리하는 데 사용되는 kubectlis. 당신은 설치할 수 있습니다 kubectlusing gcloud: gcloud 구성요소 설치 kubectl GitHub에서 샘플 코드를 복제합니다. 자식 클론 httpsgithub.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/hello-app/manifests 에 대한 기본값 설정 프로젝트 ID를 입력하는 시간을 절약하려면 및 Compute Engine 영역 옵션의 gcloud 명령줄 도구 gcloudcommand-line 도구에서 기본값을 설정할 수 있습니다. gcloud 구성 세트 프로젝트 project-idgcloud 구성 세트 컴퓨팅/영역 컴퓨팅 영역 클러스터 만들기 이름이 지정된 컨테이너 클러스터를 만듭니다. 웹 애플리케이션을 배포하기 위한 domain-test: gcloud 컨테이너 클러스터는 도메인 테스트를 만듭니다. ## 웹 애플리케이션 배포 다음 매니페스트는 샘플 웹 애플리케이션 컨테이너 이미지를 실행하는 배포를 설명합니다. # Copyright 2021 Google LLC # # Apache 라이선스 버전 2.0("라이선스 # 라이선스를 준수하는 경우를 제외하고는 이 파일을 사용할 수 없습니다. # 라이선스 사본은 # # httpwww.apache.org에서 얻을 수 있습니다. /licenses/LICENSE-2.0 # # 해당 법률에서 요구하거나 서면으로 동의하지 않는 한, 라이센스에 따라 # 배포되는 소프트웨어는 # 명시적이든 묵시적이든 어떤 종류의 보증이나 조건 없이 "있는 그대로"배포됩니다. # 라이선스에 따른 특정 언어 관리 권한 및 # 제한 사항은 라이선스를 참조하세요. 라벨: 앱: hello tier: 웹 사양: 컨테이너: - 이름: hello-app 이미지: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 포트: - containerPort: 8080 리소스: 요청 : CPU: 200m 다음 명령어를 실행하여 배포를 만듭니다. kubectl 적용 -f helloweb-deployment.yaml ## 애플리케이션 노출 다음 방법 중 하나를 사용하여 GKE에 애플리케이션을 노출할 수 있습니다. 리전 IP 주소와 함께 작동하는 TCP 네트워크 로드 밸런서를 생성하는 서비스를 사용합니다. HTTP(S) 부하 분산기를 만들고 전역 IP 주소를 지원하는 인그레스 사용 각 방법의 장단점에 대해 자세히 알아보려면 인그레스로 HTTP(S) 부하 분산 설정을 참조하세요. 서비스 이용 애플리케이션에 고정 공용 IP 주소가 있는지 확인하려면 고정 IP 주소를 예약해야 합니다. 서비스를 사용하여 애플리케이션을 노출하도록 선택한 경우 지역 IP 주소를 생성해야 합니다. 글로벌 IP 주소는 다음 섹션에 설명된 대로 Ingress 리소스 유형에서만 작동합니다. 서비스를 사용하려면 이름이 지정된 고정 IP 주소를 만듭니다. helloweb-ip에서 지역 us-central1: gcloud gcloud 컴퓨팅 주소는 helloweb-ip --region us-central1을 만듭니다. 생성한 고정 IP 주소를 찾으려면 다음 명령을 실행합니다. gcloud 컴퓨팅 주소는 helloweb-ip --region us-central1Output을 설명합니다. 주소: 203.0.113.32 .. 구성 커넥터 **참고 이 단계에는 구성 커넥터. 팔로우 설치 지침 클러스터에 Config Connector를 설치하려면 apiVersion: compute.cnrm.cloud.google.com/v1beta1 종류: ComputeAddress 메타데이터: 이름: helloweb-ip 사양: 위치: us-central1 kubectl apply -f compute-address-regional.yaml고정 IP 주소를 찾으려면 다음 명령을 실행합니다. kubectl get computeaddress helloweb-ip -o jsonpathspec.address}'다음 매니페스트는 공개 IP로 포드를 노출하기 위해 네트워크 로드 밸런서를 생성하는 LoadBalancer 유형의 서비스를 설명합니다. 바꾸다 고정 IP 주소가 포함된 `YOUR.IP.ADDRESS.HERE`: # Copyright 2021 Google LLC # # Apache 라이선스 버전 2.0("라이선스 # 라이선스를 준수하는 경우를 제외하고는 이 파일을 사용할 수 없습니다. # 라이선스 사본은 # # httpwww.apache.org에서 얻을 수 있습니다. /licenses/LICENSE-2.0 # # 해당 법률에서 요구하거나 서면으로 동의하지 않는 한, 라이센스에 따라 # 배포되는 소프트웨어는 # 명시적이든 묵시적이든 어떠한 종류의 보증이나 조건 없이 "있는 그대로"배포됩니다. # 라이선스에 따른 권한 및 # 제한 사항을 관리하는 특정 언어는 라이선스를 참조하세요. 8080 유형: LoadBalancer loadBalancerIP: "YOUR.IP.ADDRESS.HERE"그런 다음 서비스를 만듭니다. kubectl 적용 -f helloweb-service-static-ip.yaml 로드 밸런서와 연결된 예약된 IP 주소를 보려면: kubectl get service출력: 이름 CLUSTER-IP EXTERNAL-IP PORT(S) AGE helloweb 10.31.254.176 203.0.113.32 80:30690/TCP 54s 인그레스 사용 HTTP(S) 부하 분산기를 만드는 인그레스를 사용하여 애플리케이션을 노출하도록 선택한 경우 전역 고정 IP 주소를 예약해야 합니다. 지역 IP 주소는 Ingress에서 작동하지 않습니다. 인그레스를 사용하여 애플리케이션을 인터넷에 노출하는 방법에 대해 자세히 알아보려면 인그레스로 HTTP(S) 부하 분산 설정 가이드를 참조하세요. 이름이 지정된 전역 고정 IP 주소를 생성하려면 helloweb-ip: gcloud gcloud 컴퓨팅 주소는 helloweb-ip --global을 만듭니다. 생성한 고정 IP 주소를 찾으려면: gcloud 컴퓨팅 주소는 helloweb-ip --globalOutput을 설명합니다. 주소: 203.0.113.32 .. 구성 커넥터 **참고 이 단계에는 구성 커넥터. 팔로우 설치 지침 클러스터에 Config Connector를 설치하려면 apiVersion: compute.cnrm.cloud.google.com/v1beta1 종류: ComputeAddress 메타데이터: 이름: helloweb-ip 사양: 위치: 글로벌 kubectl 적용 -f 계산-주소-global.yaml 다음 매니페스트는 두 개의 리소스가 있는 고정 IP의 웹 애플리케이션인 인그레스를 설명합니다. - ㅏ Servicewith 유형:NodePort - 안 서비스 이름 및 정적 IP 주석으로 구성된 Ingress # Copyright 2021 Google LLC # # Apache 라이선스 버전 2.0("라이선스 # 라이선스를 준수하는 경우를 제외하고는 이 파일을 사용할 수 없습니다. # 라이선스 사본은 # # httpwww.apache.org에서 얻을 수 있습니다. /licenses/LICENSE-2.0 # # 해당 법률에서 요구하거나 서면으로 동의하지 않는 한, 라이센스에 따라 # 배포되는 소프트웨어는 # 명시적이든 묵시적이든 어떤 종류의 보증이나 조건 없이 "있는 그대로"배포됩니다. # 라이선스에 따른 권한 및 # 제한 사항을 관리하는 특정 언어는 라이선스를 참조하세요. -ip 라벨: 앱: hello 사양: defaultBackend: 서비스: 이름: helloweb-backend 포트: 번호: 8080apiVersion: v1 종류: 서비스 메타데이터: 이름: helloweb-backend 라벨: 앱: hello 사양: 유형: NodePort 선택기: 앱: hello 계층: 웹 포트: - 포트: 8080 targetPort: 8080 그만큼 kubernetes.io/ingress.global-static-ip-name 주석은 이름을 지정합니다. HTTP(S) 로드와 연결될 전역 IP 주소 리소스의 밸런서 클러스터에 리소스를 적용합니다. kubectl 적용 -f helloweb-ingress-static-ip.yaml출력: 인그레스 "helloweb"생성 서비스 "helloweb-backend"생성 로드 밸런서와 연결된 예약 IP 주소를 보려면: kubectl get ingressOutput: 이름 호스트 주소 포트 나이 helloweb * 203.0.113.32 80 4m ## 예약된 고정 IP 주소 방문 로드 밸런서가 올바르게 구성되었는지 확인하려면 IP 주소를 방문하거나 사용하는 웹 브라우저 곱슬 곱슬하다: 컬 http203.0.113.32/출력: 안녕, 세상! 호스트 이름: helloweb-3766687455-8lvqv ## 도메인 이름 레코드 구성 다음과 같은 브라우저에서 도메인 이름을 쿼리하도록 하려면 example.com 또는 하위 도메인 다음과 같은 이름 blog.example.com에서 예약한 고정 IP 주소를 가리키고 도메인 이름의 DNS(도메인 이름 서버) 레코드를 업데이트해야 합니다. 당신은 생성해야합니다 **A**(주소) 도메인 또는 하위 도메인에 대한 DNS 레코드 유형 이름을 지정하고 해당 값을 예약된 IP 주소로 구성합니다. 도메인의 DNS 레코드는 네임서버에서 관리합니다. 네임서버는 도메인을 등록한 '등록기관', Cloud DNS와 같은 DNS 서비스 또는 다른 타사 제공업체일 수 있습니다. 네임서버가 Cloud DNS인 경우: Cloud DNS 빠른 시작 가이드에 따라 애플리케이션의 예약된 IP 주소로 도메인 이름에 대한 DNS A 레코드를 구성합니다. 이름 서버가 다른 공급자인 경우: DNS A 레코드 설정에 대한 DNS 서비스 설명서를 참조하여 도메인 이름을 구성하십시오. Cloud DNS를 대신 사용하기로 선택한 경우 Cloud DNS로 마이그레이션을 참조하세요. ## 도메인 이름 방문 도메인 이름의 DNS A 레코드가 예약한 IP 주소로 확인되는지 확인하려면 도메인 이름을 방문하십시오. 도메인 이름의 A 레코드에 대한 DNS 쿼리를 만들려면 다음을 실행하십시오. 주최자 명령: 호스트 example.com출력: example.com의 주소는 203.0.113.32입니다. 이제 웹 브라우저에서 도메인 이름을 가리키고 웹 사이트를 방문할 수 있습니다! ## 청소 이 가이드에서 사용된 리소스에 대해 Google Cloud 계정에 요금이 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요. 부하 분산 리소스를 삭제합니다. kubectl delete ingress,service -l app=hello 예약된 고정 IP를 해제합니다. 로드 밸런서가 삭제된 후 사용되지 않았지만 예약된 IP 주소는 더 이상 무료가 아니며 사용되지 않은 IP 주소 가격에 따라 요금이 청구됩니다. 고정 IP 리소스를 해제하려면 다음 명령을 실행합니다. 서비스를 사용한 경우: gcloud 컴퓨팅 주소 삭제 helloweb-ip --region us-central1 인그레스를 사용한 경우: gcloud 컴퓨팅 주소 delete helloweb-ip --global - 샘플 애플리케이션을 삭제합니다. kubectl 삭제 -f helloweb-deployment.yaml 다음 명령의 출력을 확인하여 로드 밸런서가 삭제될 때까지 기다리십시오. 출력에는 이름에 "helloweb"이 포함된 전달 규칙이 표시되지 않아야 합니다. gcloud compute 전달 규칙 목록 컨테이너 클러스터를 삭제합니다. gcloud 컨테이너 클러스터는 도메인 테스트를 삭제합니다. ## 무엇 향후 계획 Google Domains를 통해 나만의 도메인 이름 등록 다른 Kubernetes Engine 가이드 살펴보기 Google Cloud에 대한 참조 아키텍처, 다이어그램, 가이드, 권장사항을 살펴보세요. 클라우드 아키텍처 센터를 살펴보십시오.