1. 소개
비공개 연결에 비공개 서비스 액세스를 사용하는 Looker (Google Cloud 핵심 서비스) 인스턴스만 비공개 IP 및 공개 IP 구성을 지원합니다.
비공개 IP (비공개 서비스 액세스) 연결과 공개 IP 연결이 모두 있는 Looker (Google Cloud 핵심 서비스) 인스턴스에는 공개 URL이 있으며 모든 수신 트래픽은 공개 IP 연결을 통해 전송됩니다. 발신 트래픽은 그림 1과 같이 비공개 IP 트래픽만 허용하도록 구성할 수 있는 VPC를 통해 라우팅됩니다.
Figure1
github.com과의 통신이 공개 IP 주소로 확인되므로 비공개 또는 공개+비공개로 배포된 Looker 인스턴스에서 연결할 수 없습니다.
이 Codelab에서는 Looker PSA에서 호출된 내부 TCP 프록시 부하 분산기와 인터넷 네트워크 엔드포인트 그룹 (NEG)을 사용하여 GitHub에 대한 Southbound HTTPS 연결을 실행합니다.
학습할 내용
- 네트워크 요구사항
- 테스트 연결을 사용하여 Looker에서 GitHub에 연결
필요한 항목
- 소유자 권한이 있는 Google Cloud 프로젝트
- GitHub 계정 및 저장소
- GitHub 개인 액세스 토큰 (기존)
- 공개 + 비공개 또는 비공개 전용으로 사용 설정된 기존 Looker PSA 인스턴스
2. 빌드할 항목
Looker에서 확인된 github.com 조직으로의 인터넷 이그레스에 Cloud NAT를 활용하는 github.com의 확인된 IP 주소로 구성된 내부 TCP 프록시 부하 분산기와 인터넷 NEG를 배포합니다.
3. 네트워크 요구사항
다음은 네트워크 요구사항의 세부정보입니다.
구성요소 | 설명 |
VPC ($vpc_network) | 커스텀 모드 VPC |
전달 규칙 서브넷 | 리전 내부 TCP 프록시 부하 분산기의 IP 주소를 할당하는 데 사용됩니다. |
프록시 전용 서브넷 | 각 부하 분산기의 프록시 에는 내부 IP 주소가 할당됩니다. 프록시에서 백엔드 VM 또는 엔드포인트로 전송되는 패킷에는 프록시 전용 서브넷의 소스 IP 주소가 있습니다. |
인터넷 NEG | 부하 분산기의 외부 백엔드를 정의하는 데 사용되는 리소스입니다. 엔드포인트는 Cloud VPN 또는 Cloud Interconnect 이외에 다른 방법으로도 연결할 수 있습니다. |
백엔드 서비스 | 백엔드 서비스는 부하 분산기와 백엔드 리소스 간의 다리 역할을 합니다. 이 튜토리얼에서는 백엔드 서비스가 인터넷 NEG와 연결됩니다. |
Cloud Router | Cloud NAT는 컨트롤 플레인 기능에는 Cloud Router 를 사용하지만 BGP 세션 관리에는 사용하지 않습니다. |
Cloud NAT | 리전별 인터넷 NEG는 인터넷 이그레스에 Cloud NAT 를 활용합니다. |
4. Codelab 토폴로지
5. 설정 및 요구사항
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID
로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다. - 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.
가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.
6. 시작하기 전에
API 사용 설정
Cloud Shell에서 프로젝트 ID가 설정되어 있는지 확인합니다.
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
vpc_network=[VPC Name]
echo $project
echo $region
echo $vpc-network
필요한 모든 서비스를 사용 설정합니다.
gcloud services enable compute.googleapis.com
7. VPC 네트워크 구성요소
VPC 네트워크
이 튜토리얼의 기본 요건은 기존 PSA Looker 인스턴스이므로 연결된 VPC가 이미 생성되어 있습니다.
Cloud Shell에서 전달 규칙 서브넷을 만듭니다.
gcloud compute networks subnets create psa-fr-subnet --network $vpc_network --range 172.16.20.0/28 --region $region --enable-private-ip-google-access
Cloud Shell에서 지역 프록시 전용 서브넷을 만듭니다.
gcloud compute networks subnets create $region-proxyonly-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=$vpc_network \
--range=10.10.10.0/24
Public NAT 게이트웨이 만들기
NAT 게이트웨이는 구성 옵션 –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB를 사용하여 인터넷 이그레스에 리전 내부 TCP 프록시 부하 분산기에서 사용되므로 동일한 NATGW는 GCE/GKE 인터넷 이그레스를 지원하지 않습니다. GCE/GKE 인터넷 이그레스에 –endpoint-types=ENDPOINT_TYPE_VM을 사용하여 NAT GW를 추가로 배포합니다.
Cloud Shell에서 Cloud Router를 만듭니다.
gcloud compute routers create $vpc_network-cloud-router --network $vpc_network --region $region
Cloud Shell에서 TCP 프록시 부하 분산기의 인터넷 이그레스를 사용 설정하는 Cloud NAT 게이트웨이를 만듭니다.
gcloud compute routers nats create $vpc_network-natgw \
--router=$vpc_network-cloud-router \
--endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
--nat-custom-subnet-ip-ranges=$region-proxyonly-subnet \
--auto-allocate-nat-external-ips \
--region=$region
부하 분산기의 IP 주소 예약
Cloud Shell에서 나중에 github.com의 DNS A 레코드로 사용될 부하 분산기의 내부 IP 주소를 예약합니다.
gcloud compute addresses create internet-neg-lb-ip \
--region=$region \
--subnet=psa-fr-subnet
Cloud Shell에서 예약된 IP 주소를 확인합니다.
gcloud compute addresses describe internet-neg-lb-ip \
--region=$region | grep -i address:
출력 예시:
user@cloudshell$ gcloud compute addresses describe internet-neg-lb-ip --region=$region | grep -i address:
address: 172.16.20.2
8. 인터넷 NEG
인터넷 NEG: INTERNET_FQDN_PORT 또는 INTERNET_IP_PORT에서 참조하는 외부 엔드포인트를 구성하는 방법에는 두 가지가 있습니다. INTERNET_IP_PORT(옵션 1) 형식을 선택하면 라우팅 가능한 공개 인터넷 IP 주소만 사용할 수 있습니다. INTERNET_FQDN_PORT(옵션 2) 형식을 선택하면 엔드포인트의 범위(지역 또는 전역)에 따라 FQDN이 라우팅 가능한 공개 인터넷 IP 주소 또는 비공개 IP 주소로 확인될 수 있습니다.
옵션 1: IP 주소를 사용하여 인터넷 NEG 설정
인터넷 NEG에는 Github.com의 확인된 IP 주소가 필요하므로 최상의 성능을 위해 로컬 터미널을 열고 dig를 실행하여 github.com의 IP 주소를 가져옵니다.
로컬 터미널의 예시에서 확인된 IP 주소 140.82.113.4가 생성됩니다.
bash-3.2$ dig github.com ; <<>> DiG 9.10.6 <<>> github.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64801 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;github.com. IN A ;; ANSWER SECTION: github.com. 60 IN A 140.82.113.4 ;; Query time: 409 msec ;; SERVER: ::1#53(::1) ;; WHEN: Thu Sep 26 15:50:45 CDT 2024 ;; MSG SIZE rcvd: 65
인터넷 NEG를 만들고 –network-endpoint-type을 internet_ip_port로 설정합니다.
Cloud Shell에서 github.com에 사용되는 인터넷 NEG를 만듭니다.
gcloud compute network-endpoint-groups create github-internet-neg \
--network-endpoint-type=INTERNET_IP_PORT \
--network=$vpc_network \
--region=$region
Cloud Shell에서 확인된 github.com IP 주소 및 포트 443으로 인터넷 NEG github-internet-neg를 업데이트합니다.
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="ip=[your-resolved-ip],port=443" \
--region=$region
예:
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="ip=140.82.113.4,port=443" \
--region=$region
옵션 2: FQDN을 사용하여 인터넷 NEG 설정하기
원하는 경우 인터넷 NEG를 만들고 –network-endpoint-type을 internet_FQDN_port로 설정할 수 있습니다.
Cloud Shell에서 github.com에 사용되는 인터넷 NEG를 만듭니다.
gcloud compute network-endpoint-groups create github-internet-neg \
--network-endpoint-type=INTERNET_FQDN_PORT \
--network=$vpc_network \
--region=$region
Cloud Shell에서 인터넷 NEG github-internet-neg를 FQDN github.com으로 업데이트합니다.
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="fqdn=github.com,port=443" \
--region=$region
9. GitHub 서비스 만들기
부하 분산기 구성요소 만들기
Cloud Shell에서 다음을 실행합니다.
gcloud compute backend-services create psa-backend-svc --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED
gcloud compute backend-services add-backend psa-backend-svc --network-endpoint-group=github-internet-neg --network-endpoint-group-region=$region --region=$region
Cloud Shell에서 요청을 백엔드 서비스로 라우팅하는 대상 TCP 프록시를 만듭니다.
gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
--backend-service=psa-backend-svc \
--region=$region
다음 문법에서 전달 규칙 (내부 TCP 프록시 부하 분산기)을 만듭니다.
Cloud Shell에서 다음을 실행합니다.
gcloud compute forwarding-rules create psa-github-fr \
--load-balancing-scheme=INTERNAL_MANAGED \
--network-tier=PREMIUM \
--network=$vpc_network \
--subnet=psa-fr-subnet \
--address=internet-neg-lb-ip \
--target-tcp-proxy=producer-lb-tcp-proxy \
--target-tcp-proxy-region=$region \
--region=$region \
--ports=443
10. GitHub DNS 영역
다음 섹션에서는 내부 TCP 프록시 부하 분산기 IP 주소로 구성된 A 레코드가 포함된 GitHub.com의 DNS 응답 정책을 만듭니다.
그런 다음 DNS 피어링은 github.com 영역을 Looker PSA와 공유하여 인터넷 NEG 및 Cloud NAT와 함께 내부 부하 분산기를 통해 GitHub에 연결할 수 있도록 합니다.
Cloud Shell에서 응답 정책 영역을 만듭니다.
gcloud dns --project=$project response-policies create github-com --description="" --networks="$vpc_network"
Cloud Shell에서 TCP 프록시 부하 분산기 IP 주소 [insert-your-ip-address]로 구성된 DNS A 레코드를 만듭니다.
gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="[insert-your-ip-address]"
예:
gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="172.16.20.2"
DNS 피어링 업데이트하기
이 섹션에서는 서비스 프로듀서 VPC 네트워크에서 시작된 지정된 네임스페이스의 레코드 요청을 소비자 VPC 네트워크로 전송하여 확인하는 비공개 서비스 연결의 피어링된 DNS 영역을 만드는 문법 "gcloud services peered-dns-domains create"를 사용합니다.
Cloud Shell에서 Looker가 github.com을 쿼리할 peered-dns-domain을 만듭니다.
gcloud services peered-dns-domains create github-com --project=$project --network=$vpc_network --dns-suffix=github.com.
11. GitHub 연결 테스트
다음 단계에서는 Looker Console을 사용하여 github.com에 대한 HTTPS 연결을 확인하는 프로젝트를 만듭니다.
12. 새 프로젝트 만들기
개발 모드 사용 설정
Looker Console에서 다음으로 이동합니다.
개발 모드 (왼쪽 하단 페이지)를 사용 설정합니다. 선택하면 '개발 모드 중입니다' 배너가 표시됩니다.
새 프로젝트 생성
Cloud 콘솔에서 다음 위치로 이동합니다.
개발 → 프로젝트
새 LookML 프로젝트 선택
프로젝트 이름을 입력하고 '빈 프로젝트'를 선택한 다음 '프로젝트 만들기'를 클릭합니다.
Git 구성 선택
Git 구성
저장소 URL을 HTTPS GitHub 세부정보로 업데이트하고 URL에 .git을 추가한 다음 '계속'을 선택합니다.
예:
GitHub 사용자 이름과 개인 액세스 토큰 (기존)으로 선택 항목을 업데이트한 다음 '설정 테스트 및 완료'를 선택합니다.
Git 작업 선택
'Git 연결 테스트'를 선택합니다.
Git 연결 테스트 유효성 검사
13. 삭제
단일 Cloud Shell 터미널에서 실험실 구성요소를 삭제합니다.
gcloud compute forwarding-rules delete psa-github-fr --region=$region -q
gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q
gcloud compute backend-services delete psa-backend-svc --region=$region -q
gcloud compute routers nats delete $vpc_network-natgw --router=$vpc_network-cloud-router --router-region=$region -q
gcloud compute routers delete $vpc_network-cloud-router --region=$region -q
gcloud compute network-endpoint-groups delete github-internet-neg --region=$region -q
gcloud compute addresses delete internet-neg-lb-ip --region=$region -q
gcloud compute networks subnets delete psa-fr-subnet $region-proxyonly-subnet --region=$region -q
gcloud services peered-dns-domains delete github-com --network=$vpc_network -q
gcloud dns --project=$project response-policies rules delete github --response-policy="github-com" -q
gcloud dns response-policies update github-com --networks= -q
gcloud dns response-policies delete github-com
14. 축하합니다
축하합니다. Looker Console을 사용하여 GitHub 연결을 구성하고 유효성을 검사했습니다.
코스모퍼프는 Codelab이 멋지다고 생각합니다.