
시작하기 전에
- 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
- 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
- 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.
Create Pods and services to test DNS resolution
/ 10
Deploy a sample workload and a ClusterIP service
/ 10
Convert the service to use NodePort
/ 20
Create static public IP addresses using GCP Networking
/ 20
Deploy a new set of Pods and a LoadBalancer service
/ 20
Deploy an Ingress resource
/ 20
이 실습에서는 두 개의 포드 배포를 만들고 인그레스 리소스를 비롯해 세 가지 유형의 서비스로 작업을 수행합니다. 또한 GKE의 Kubernetes 서비스가 Google Cloud 네트워크 부하 분산기와 연결되는 방식을 알아봅니다.
이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.
각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.
시크릿 창을 사용하여 Qwiklabs에 로그인합니다.
실습 사용 가능 시간(예: 1:15:00
)을 참고하여 해당 시간 내에 완료합니다.
일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다.
준비가 되면 실습 시작을 클릭합니다.
실습 사용자 인증 정보(사용자 이름 및 비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.
Google Console 열기를 클릭합니다.
다른 계정 사용을 클릭한 다음, 안내 메시지에 이 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다.
약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
초기 로그인 단계를 완료하면 프로젝트 대시보드가 표시됩니다.
이 실습에서는 대부분의 작업을 Cloud Shell에서 수행하게 됩니다.
프로비저닝이 완료되면 Cloud Shell 프롬프트가 표시됩니다.
이 작업에서는 실습용 GKE 클러스터에 연결하고 클러스터 내의 여러 포드에 배포 매니페스트를 만든 다음, 이를 포드 및 서비스 이름의 DNS 변환을 테스트하는 데 사용합니다.
dns-demo-1
및 dns-demo-2
라는 두 개의 샘플 애플리케이션 포드가 있는 서비스인 dns-demo
를 만듭니다.
Kubernetes 서비스를 통해 네트워크 연결을 테스트하는 데 사용할 포드는 소스 저장소에 제공된 dns-demo.yaml
매니페스트 파일을 사용하여 배포됩니다. 나중에 이러한 포드를 사용하여 Kubernetes 클러스터 내 시스템의 다양한 서비스를 통해 연결을 테스트하게 됩니다.
또한 Cloud Shell을 사용하여 외부 주소로부터의 연결도 테스트하게 됩니다. 이 작업에 Cloud Shell을 사용할 수 있는 이유는 Cloud Shell이 Kubernetes 클러스터 네트워크와 완전히 분리된 네트워크에 있기 때문입니다.
출력은 다음 예시와 같이 표시됩니다.
출력:
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
bash
에 대한 대화형 세션을 엽니다.이제 클러스터의 컨테이너 내에 있으므로 후속 명령어는 해당 컨텍스트에서 실행되며, 이후 작업에서 이 컨텍스트를 사용하여 다양한 대상을 핑함으로써 네트워크 연결을 테스트하게 됩니다. 그러나 이 컨테이너에는 핑할 도구가 없으므로 먼저 ping
명령어를 설치해야 합니다.
apt-get
을 업데이트하고 ping
도구를 설치합니다.이 핑은 성공적으로 실행되며, dns-demo-2
포드에 대해 이전에 찾은 IP 주소가 대상에 포함되었음이 보고됩니다.
dns-demo
서비스의 FQDN을 핑합니다.이 핑도 성공적으로 실행되지만, 두 개의 demo-dns 포드 중 하나의 FQDN에서 응답이 반환됩니다. 응답을 반환하는 포드는 demo-dns-1
일 수도 있고 demo-dns-2
일 수도 있습니다.
애플리케이션을 배포하는 경우 애플리케이션 코드가 클러스터의 컨테이너 내에서 실행되므로 해당 클러스터 내에서 관련 서비스의 FQDN을 사용하면 동일 코드를 이용해 다른 서비스에 액세스할 수 있습니다. 이 방식은 IP 주소는 물론 포드 이름을 사용하는 것보다도 더 간단한데, IP 주소나 포드 이름은 변경될 가능성이 높기 때문입니다.
이 작업에서는 클러스터 내의 포드 집합에 배포 매니페스트를 만든 다음 ClusterIP 서비스를 사용하여 이를 노출합니다.
이 작업에서는 다음과 같이 hello-v1.yaml
매니페스트 파일에 이미 생성된 매니페스트를 사용하여 포트 8080의 HTTP 서버에서 수신 대기하는 샘플 웹 애플리케이션 컨테이너 이미지를 배포합니다.
두 번째 Cloud Shell 세션이 Cloud Shell 창에 표시됩니다. 메뉴 바에서 세션을 클릭하여 전환할 수 있습니다.
hello-v1.yaml
파일에서 배포를 만들려면 다음 명령어를 실행합니다.출력은 다음 예시와 같이 표시됩니다.
출력:
이 작업에서는 이미 만들어진 hello-svc.yaml
샘플 매니페스트를 통해 ClusterIP를 사용하는 서비스를 배포합니다.
이 매니페스트는 ClusterIP 서비스를 정의하고 해당 선택기와 대응하는 포드에 이를 적용합니다. 이 경우 배포한 hello-v1 포드에 매니페스트가 적용됩니다. name: hello-v1
라벨이 포함된 모든 배포에 이 서비스가 자동으로 적용됩니다.
IP 주소는 출력 예시와 다를 수 있습니다.
출력:
이 서비스에 할당된 외부 IP가 없습니다. Kubernetes 클러스터 IP 주소는 기본적으로 외부에서 액세스할 수 없으므로 이 서비스를 만들어도 클러스터 외부에서 애플리케이션에 액세스할 수 없습니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
해당 서비스는 클러스터 외부에 노출되지 않기 때문에 연결에 실패합니다.
출력:
이제 dns-demo-1
포드에서 실행 중인 대화형 셸을 사용하여 클러스터 내부에서 서비스를 테스트합니다.
dns-demo-1
포드의 stdin 및 stdout을 리디렉션하고 있는 첫 번째 Cloud Shell 창으로 돌아갑니다.curl
을 설치하면 명령줄에서 웹 서비스를 호출할 수 있습니다.연결이 성공적으로 실행되고 아래 출력과 비슷한 응답이 표시됩니다. 호스트 이름은 출력 예시와 다를 수 있습니다.
출력:
Kubernetes Engine 클러스터 내에서 내부 DNS를 사용하여 clusterIP를 확인할 수 있기 때문에 연결이 실행됩니다.
이 작업에서는 기존 ClusterIP 서비스를 NodePort 서비스로 변환한 다음 클러스터 내부 및 외부에서 서비스에 대한 액세스를 다시 테스트합니다.
서비스 유형을 NodePort로 변경하는 hello-nodeport-svc.yaml
이라는 hello-svc.yaml 파일의 수정 버전은 이미 생성되어 있습니다.
hello-svc
의 서비스 유형을 NodePort로 변경하는 매니페스트를 배포하기 위해 다음 명령어를 실행합니다.이 매니페스트는 hello-svc
를 NodePort 서비스로 재정의하고 해당 서비스에 대한 클러스터의 각 노드에 서비스 포트 30100을 할당합니다.
IP 주소는 출력 예시와 다를 수 있습니다.
출력:
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
해당 서비스는 클러스터 외부에 노출되지 않기 때문에 연결에 실패합니다.
출력:
이제 다른 포드에서 서비스를 테스트합니다.
연결이 성공적으로 실행되고 아래 출력과 비슷한 응답이 표시됩니다. 호스트 이름은 출력 예시와 다를 수 있습니다.
출력:
GKE 클러스터 내에서 내부 DNS를 사용하여 clusterIP를 확인할 수 있기 때문에 연결이 실행됩니다.
Google Cloud 콘솔 탐색 메뉴에서 네트워킹 > VPC 네트워크 > IP 주소로 이동합니다.
외부 고정 주소 예약을 클릭합니다.
이름에 regional-loadbalancer
를 입력합니다.
옵션을 탐색하되 나머지 설정은 기본값으로 둡니다. 기본 유형은 리전입니다.
예약을 클릭합니다.
regional-loadbalancer
라는 외부 IP 주소를 기록해 둡니다. 이후 작업에서 이 주소를 사용하게 됩니다.
외부 고정 주소 예약을 클릭합니다.
이름에 global-ingress
를 입력합니다.
유형을 전역으로 변경합니다.
나머지 설정은 기본값으로 둡니다.
예약을 클릭합니다.
global-ingress
라는 외부 IP 주소를 기록해 둡니다. 이후 작업에서 이 주소를 사용하게 됩니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
이제 두 서비스를 쉽게 구별할 수 있도록 다른 버전의 애플리케이션을 실행하는 새로운 포드 집합을 배포합니다. 그런 다음 LoadBalancer 서비스로 새 포드를 노출하고 클러스터 외부에서 서비스에 액세스합니다.
포트 8080에 샘플 hello 애플리케이션의 버전 2를 실행하는 새 배포를 만드는 hello-v2.yaml
이라는 두 번째 배포 매니페스트가 생성되었습니다.
hello-v2
배포를 만드는 매니페스트를 배포하려면 다음 명령어를 실행합니다.출력은 다음 예시와 같이 표시됩니다.
출력:
이 작업에서는 이미 생성된 hello-lb-svc.yaml
샘플 매니페스트를 사용하여 LoadBalancer 서비스를 배포합니다.
sed 명령어를 사용하여 부하 분산기 yaml 파일의 10.10.10.10 자리표시자 주소를 이전에 부하 분산기에 예약한 고정 주소로 바꿉니다.
작업을 두 번째 Cloud Shell 창에서 실행 중인지 확인합니다. 이 창은 dns-test 포드의 stdin 및 stdout에 연결되어 있지 않습니다.
Cloud Shell에 다음 명령어를 입력하여 이전에 만든 리전 고정 IP 주소를 환경 변수에 저장합니다.
Cloud Shell에 다음 명령어를 입력하여 자리표시자 주소를 해당 리전 고정 IP 주소로 바꿉니다.
loadBalancerIP
는 이전에 regional-loadbalancer
의 예약된 고정 IP 주소에 기록된 주소와 일치해야 합니다.
이 매니페스트는 외부에서 서비스에 액세스하도록 Google Cloud 네트워크 부하 분산기를 배포하는 LoadBalancer 서비스를 정의합니다. 이 서비스는 name: hello-v2
선택기가 포함된 포드에만 적용됩니다.
IP 주소는 출력 예시와 다를 수 있습니다.
출력:
새 LoadBalancer 서비스에 외부 IP 주소로 regional-loadbalancer
의 예약된 주소가 표시됩니다. GKE 환경에서 LoadBalancer 서비스 유형의 외부 부하 분산기는 Google Cloud 부하 분산기를 사용하여 구현되며, 생성되는 데 몇 분 정도 걸립니다. 이 외부 IP 주소를 사용하면 클러스터 외부에서 서비스에 액세스할 수 있습니다.
대상 풀 백엔드 1개와 인스턴스 2개가 있는 TCP 부하 분산기가 표시됩니다.
세부정보에는 이 부하 분산기가 앞서 예약했을 때 regional-loadbalancer
라는 고정 IP 주소가 할당된 리전 TCP 부하 분산기라는 정보가 표시됩니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
해당 서비스 이름이 클러스터 외부에 노출되지 않기 때문에 연결에 실패합니다.
출력:
이 호스트 이름에 등록되어 있지 않은 외부 IP 주소이기 때문입니다.
[external_IP]
를 서비스의 외부 IP 주소로 대체합니다.예시:
이번에는 Google Cloud 외부에서 LoadBalancer의 외부 IP 주소에 연결할 수 있으므로 연결이 실패하지 않습니다.
출력:
dns-demo-1
포드의 stdin 및 stdout을 리디렉션하고 있는 첫 번째 Cloud Shell 창으로 돌아갑니다.연결이 성공적으로 실행되고 아래 출력과 비슷한 응답이 표시됩니다. 호스트 이름은 출력 예시와 다릅니다.
출력:
내부 DNS 이름은 포드 내에서 작동하며, 외부 IP 주소를 사용하여 클러스터 외부에서 액세스했던 것과 동일한 v2 버전의 애플리케이션에 액세스하고 있음을 확인할 수 있습니다.
[external_IP]
를 서비스의 외부 IP 주소로 대체합니다.예시:
출력:
외부 IP는 클러스터에서 실행되는 포드 내부에서도 작동하며, 동일한 v2 버전의 애플리케이션으로부터 결과를 반환합니다.
그러면 Cloud Shell 명령 프롬프트로 돌아갑니다.
hello 애플리케이션의 클러스터에는 두 개의 서비스가 있습니다. 한 서비스는 NodePort 서비스를 통해 버전 1.0을 호스팅하고, 다른 서비스는 LoadBalancer 서비스를 통해 버전 2.0을 호스팅합니다. 이제 사용자가 입력한 URL을 기반으로 트래픽을 두 서비스 모두로 전달하는 인그레스 리소스를 배포합니다.
인그레스는 외부 HTTP(S) 트래픽을 내부 서비스로 라우팅하기 위한 규칙과 구성의 모음을 캡슐화하는 Kubernetes 리소스입니다.
GKE에서 인그레스는 Cloud Load Balancing을 사용하여 구현됩니다. 클러스터에 인그레스 리소스를 만들면 GKE는 HTTP(S) 부하 분산기를 만들고 트래픽을 애플리케이션으로 라우팅하도록 구성합니다.
인그레스 리소스를 구성할 hello-ingress.yaml
이라는 샘플 매니페스트가 생성되어 있습니다.
이 구성 파일은 이전 단계에서 만든 global-ingress
고정 IP 주소에 연결할 인그레스 리소스를 정의합니다. 이 인그레스 리소스는 입력된 경로를 기반으로 트래픽을 웹 서비스로 전달하는 전역 HTTP(S) 부하 분산기를 만듭니다.
kubernetes.io/ingress.global-static-ip-name
주석을 사용하면 Google Cloud 전역 HTTP(S) 부하 분산기를 만들 때 인그레스 리소스가 사용할 수 있도록 인그레스 리소스에 명명된 예약 IP 주소를 지정할 수 있습니다.
이 매니페스트를 배포하면 Kubernetes가 클러스터에 인그레스 리소스를 만듭니다. 클러스터에서 실행되는 인그레스 컨트롤러는 모든 외부 HTTP 트래픽(포트 80)을 노출된 웹 NodePort 서비스 및 LoadBalancer 서비스로 라우팅하는 HTTP(S) 부하 분산기 생성을 담당합니다.
Google Cloud 콘솔에서 네트워킹 > 네트워크 서비스 > 부하 분산으로 이동합니다. 이제 HTTP(S) 부하 분산기도 표시됩니다.
이름을 클릭하여 세부정보 페이지를 엽니다. 세부정보에는 이 부하 분산기가 global-ingress
라는 이전에 예약된 고정 IP 주소를 사용하는 전역 HTTP(S) 부하 분산기라는 정보가 표시됩니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
부분 출력:
인그레스 리소스의 초기화가 완료되었는지 확인하려면 몇 분마다 명령어를 반복합니다. Google Cloud 전역 HTTP(S) 부하 분산기가 생성되고 초기화되면 명령어가 global-ingress
라는 이전에 예약된 전역 고정 IP 주소와 일치하는 외부 IP 주소를 보고합니다.
[external_IP]
를 인그레스 리소스의 외부 IP 주소로 대체하여 다음 명령어를 입력합니다. 다음과 같이 URL 경로에 /v1을 포함해야 합니다.예시:
출력:
v1 URL이 트래픽을 v1 애플리케이션 포드로 전달하는 hello-svc
NodePort 서비스를 가리키도록 hello-ingress.yaml
에 구성됩니다.
[external_IP]
를 인그레스 리소스의 외부 IP 주소로 대체하여 다음 명령어를 입력합니다. 다음과 같이 URL 경로에 /v2를 포함해야 합니다.v2 URL이 트래픽을 v2 애플리케이션 포드로 보내는 hello-lb-svc
LoadBalancer 서비스를 가리키도록 hello-ingress.yaml
에 구성됩니다.
예시:
출력:
이제 다음 두 개의 부하 분산기가 표시됩니다.
hello-lb-svc
서비스용 초기 리전 부하 분산기는 UID 스타일 이름을 가지며, TCP 포트 80 트래픽을 클러스터 노드로 부하 분산하도록 구성됩니다.
두 번째는 인그레스 객체용으로 생성되었으며, 인그레스 구성과 일치하는 호스트 및 경로 규칙을 포함하는 완전한 HTTP(S) 부하 분산기입니다. 이름에 hello-ingress
가 있습니다.
hello-ingress
가 있는 부하 분산기를 클릭합니다.그러면 인그레스 리소스용으로 생성된 Google Cloud 전역 HTTP(S) 부하 분산기의 프로토콜, 포트, 경로, 백엔드 서비스에 대한 요약 정보가 표시됩니다.
실습을 완료하면 실습 종료를 클릭합니다. Google Cloud Skills Boost에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.
실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.
별점의 의미는 다음과 같습니다.
의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.
의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.
Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.
현재 이 콘텐츠를 이용할 수 없습니다
이용할 수 있게 되면 이메일로 알려드리겠습니다.
감사합니다
이용할 수 있게 되면 이메일로 알려드리겠습니다.
한 번에 실습 1개만 가능
모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.