Create an Internal Load Balancer

VPC : my-internal-app 내부 구성요소

instance 1, instance 3 에 할당된 10.10.20.1, 10.10.30.1 은 잘못된 것으로 판단됨
10.10.20.2, 10.10.30.2 로 2번 부터 인스턴스에 할당됨

환경이해

  • Internal Load Balancer 는 regional 자원임
    • subnet A, Subnet B는 같은 리전, 다른 존으로 구성함

Create the Http firewall rule

  • network : my-internal-app 으로 지정
  • Target tags : lb-backend 로 지정

Create the health check firewall rules

  • network : default 로 지정
  • Source IP range : 130.211.0.0/22, 35.191.0.0/16 (고정)
  • TCP 체크해줄 것

Configure the instance templates

  • Network tags : lb-backend
    • lb-backend 를 기재함으로써 TCP : 80, Health Check 통과 방화벽 정책이 여기에 속한 인스턴스 들에게 적용 됨

Configure the next instance template

  • instance-template-1 을 복사하여 만듬, subnet-b 로 Subnet을 지정함

Create the managed instance groups

  • instance-group-1 : us-central1-a
    • instance-template : instance-template-1 (subnet-A)
  • instance-group-2 : us-central1-b
    • instance-template : instance-template-2 (subnet-B)
  • 여기까지 진행되면 vm 인스턴스가 1개씩 해서 총 2개가 생성됨

Verify the backends

  • subnet-A 에 10.10.20.50 IP를 할당한 vm instance 를 생성

Start the Configuration

  • Create load balancer -> TCP Load Balancer
  • Only between my VMs
    • 이 옵션이 Internal L4로 동작하게 함

Configure the regional backend service

  • Backends 에 Instance group 들을 지정함
  • Internal Load Balancer 에 대한 Health Check 기능 추가 (my-ilb-health-check)

Configure the front end

  • 여기서는 subnet-b 를 DMZ 역할로 부여함
  • Internal IP (my-ilb-ip) 로 10.10.30.5 를 지정

Review and Create the Internal Load Balancer

Access the Internal Load Balancer

# Internal Load Balancer 의 FrontEnd IP로 호출 테스트, 양쪽 인스턴스로 번갈아 호출 됨
curl 10.10.30.5 

끝!!

HTTP Load Balancer with Cloud Armor

아래와 같은 구성을 하려함

Create the HTTP firewall rule

Create health check firewall rules

Configure two instance templates

Create two managed instance groups

Configure an HTTP Load Balancer with IPv4 and IPv6

Stress test an HTTP Load Balancer

sudo apt-get -y install siege
export LB_IP=34.117.129.14

siege -c 250 http://$LB_IP

Cntl+C

Denylist an IP address to restrict access to an HTTP Load Balancer

끝!!

PIP 설치시 SSL 오류 대응

회사에서 pip 를 이용하여 패키지 설치시 SSL 관련 에러가 발생

(추측)

아마도 회사 보안장비에서 들어오는 패킷을 까고 SSL 인증서를 회사 것으로 바꿔치기 하는 듯 하다. 최종 클라이언트(내 컴퓨터) 에서 파이썬 패키지 서버의 신원확인시 SSL 인증서가 안맞으니 에러가 나는 듯 하다. 바꿔치기하는 이유는 회사 밖으로 나가는 패킷을 중간에서 까기 위함일 것 이다.

아무튼 우회방법

pip --trusted-host pypi.org --trusted-host files.pythonhosted.org install pandas

Pandas DataFrame 주요 예제

csv 파일 읽어오기

import pandas as pd

df = pd.read_csv(csv_path)

DataFrame 컬럼 제거

del df['EVENT_ID']

DataFrame 컬럼을 날짜로 인식 및 변환

# 2021-05-05 20:20 이란 값이 EVENT_TIME 컬럼의 값일때 2021-05-05 로 인식시키고 싶을때  

df['EVENT_TIME'] = df['EVENT_TIME'].str.slice(start=0, stop=10)
df['EVENT_TIME'] = df['EVENT_TIME'].apply(lambda _ : datetime.strptime(_,'%Y-%m-%d))

DataFrame Group by (EMP_NO, EVENT_TIME 컬럼으로 Gruop by)

df2_cnt = df.groupby(by=['EMP_NO', 'EVENT_TIME'], as_index=False).count()

DataFrame 컬럼 내림차순 정렬

df2_cnt.sort_values(by=['CNT','EVENT_TIME'], ascending=[False, False], inplace=True)

DataFrame 컬럼명 변경

# inplace 옵션은 원본 파일도 바꾸겠냐는 의미임, True 일때 원본 (df2) 이바뀜
df2_cnt.rename(columns={'PRINT_PAGE':'CNT'}, inplace=True)

DataFrame 간 조인

df2_sum = df.groupby(by['EMP_NO', 'EVENT_TIME'], as_index=False).sum()
df2_sum = df.rename(columns={'PRINT_PAGE':'TOTAL_PAGES'}, inplace=True)

# left join
df_result = pd.merge(left=df2_cnt, right=df2_sum, how='left', on=['EMP_NO', 'EVENT_TIME'])

Rank 컬럼 추가

# CNT 컬럼을 기준으로 RANK 컬럼을 추가함

# https://hogni.tistory.com/48
# method 은 같은 값일때 어떻게 처리할 지를 의미
### average(평균): 그룹의 평균 순위 부여 (예: 두 명이 공동 1등이라면 둘 다 1.5등으로 처리)
### min(최솟값): 그룹에서 가장 낮은 순위 부여 (예: 두 명이 공동 1등이라면 둘 다 1등으로 처리)
### max(최댓값): 그룹에서 가장 낮은 순위 부여 (예: 두 명이 공동 1등이라면 둘 다 2등으로 처리)
### first(첫 번째): 그룹에서 표시되는 순서대로 순위 부여 (예: 두 명이 공동 1등이라면 순서가 빠른 사람을 1등으로 처리)
### dense(밀도): min과 동일함. 다만 순위는 항상 1씩 증가

# ascending = False 내림차순

df_result['RANK'] = df_result['CNT'].rank(method='min', ascending=False)

다중 VPC 네트워크 실습

방화벽 규칙이 있는 커스텀 모드 VPC 네트워크 만들기

managmentnet 네트워크 만들기

1. managementnet 네트워크 생성 (웹)
gcloud compute networks create managementnet --project=qwiklabs-gcp-01-85419543f0b2 --subnet-mode=custom --mtu=1460 --bgp-routing-mode=regional

2. managementnet 서브넷 생성 (웹)
gcloud compute networks subnets create managementsubnet-us --project=qwiklabs-gcp-01-85419543f0b2 --range=10.130.0.0/20 --network=managementnet --region=us-central1

privatenet 네트워크 만들기

1. privatenet 네트워크 생성
gcloud compute networks create privatenet --subnet-mode=custom

2. privatesubnet-us 서브넷 생성
gcloud compute networks subnets create privatesubnet-us --network=privatenet --region=us-central1 --range=172.16.0.0/24

3. privatesubnet-eu 서브넷 생성
gcloud compute networks subnets create privatesubnet-eu --network=privatenet --region=europe-west4 --range=172.20.0.0/20
4. VPC 네트워크 목록 보기
gcloud compute networks list

5. 사용 가능한 VPC 서브넷 목록 출력
gcloud compute networks subnets list --sort-by=NETWORK

managementnet 의 방화벽 규칙 만들기 (웹 GUI 콘솔)

gcloud compute --project=qwiklabs-gcp-01-85419543f0b2 firewall-rules create managementnet-allow-icmp-ssh-rdp --direction=INGRESS --priority=1000 --network=managementnet --action=ALLOW --rules=tcp:22,tcp:3389,icmp --source-ranges=0.0.0.0/0

privatenet 의 방화벽 규칙 만들기 (CLI 콘솔)

gcloud compute firewall-rules create privatenet-allow-icmp-ssh-rdp --direction=INGRESS --priority=1000 --network=privatenet --action=ALLOW --rules=icmp,tcp:22,tcp:3389 --source-ranges=0.0.0.0/0

(실행 결과)

Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-85419543f0b2/global/firewalls/privatenet-allow-icmp-ssh-rdp].
Creating firewall...done.
NAME                           NETWORK     DIRECTION  PRIORITY  ALLOW                 DENY  DISABLED
privatenet-allow-icmp-ssh-rdp  privatenet  INGRESS    1000      icmp,tcp:22,tcp:3389        False
student_01_3bc7d371ff4a@cloudshell:~ (qwiklabs-gcp-01-85419543f0b2)$

방화벽 규칙 목록 출력

gcloud compute firewall-rules list --sort-by=NETWORK

VM 인스턴스 만들기

managementnet-us-vm 생성 (웹 GUI 콘솔)

gcloud beta compute --project=qwiklabs-gcp-01-85419543f0b2 instances create managementnet-us-vm --zone=us-central1-f --machine-type=f1-micro --subnet=managementsubnet-us --network-tier=PREMIUM --maintenance-policy=MIGRATE --service-account=641089478824-compute@developer.gserviceaccount.com --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --image=debian-10-buster-v20210420 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=managementnet-us-vm --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any


(실행결과)

NAME                 ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
managementnet-us-vm  us-central1-f  f1-micro                   10.130.0.2   34.123.175.27  RUNNING
student_01_3bc7d371ff4a@cloudshell:~ (qwiklabs-gcp-01-85419543f0b2)$

privatenet-us-vm 생성 (CLI 콘솔)

gcloud compute instances create privatenet-us-vm --zone=us-central1-f --machine-type=n1-standard-1 --subnet=privatesubnet-us

(실행결과)
Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-01-85419543f0b2/zones/us-central1-f/instances/privatenet-us-vm].
NAME              ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
privatenet-us-vm  us-central1-f  n1-standard-1               172.16.0.2   34.67.219.86  RUNNING
student_01_3bc7d371ff4a@cloudshell:~ (qwiklabs-gcp-01-85419543f0b2)$

vm 목록 확인

gcloud compute instances list

(실행결과)
NAME                 ZONE            MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
mynet-eu-vm          europe-west4-c  n1-standard-1               10.164.0.2   34.91.247.17   RUNNING
managementnet-us-vm  us-central1-f   f1-micro                    10.130.0.2   34.123.175.27  RUNNING
mynet-us-vm          us-central1-f   n1-standard-1               10.128.0.2   35.202.13.99   RUNNING
privatenet-us-vm     us-central1-f   n1-standard-1               172.16.0.2   34.67.219.86   RUNNING
student_01_3bc7d371ff4a@cloudshell:~ (qwiklabs-gcp-01-85419543f0b2)$

VM 인스턴스 간의 연결성 살펴보기

ping -c 3 IP

다수의 네트워크 인터페이스가 있는 VM 인스턴스 만들기

vm-appliance 인스턴스 생성

인스턴스 1개에 허용되는 인터페이스의 개수는 vCPU의 개수에 따라 달라짐

n1-standard-4 는 최대 4개의 네트워크 인터페이스를 허용함

https://cloud.google.com/vpc/docs/create-use-multiple-interfaces#max-interfaces

icmp 를 방화벽에서 열어야 ping 이 도달됨

VM 인스턴스 생성시 Interface 를 추가하면 여러 네트워크 서브넷의 내부 IP로 접근할 수 있다

GCP Essential 네트워크 및 HTTP 부하 분산기 설정하기

  • 기본 명령어
    • gcloud beta interactive
  • 모든 리소스에 대한 기본 리전 및 영역 설정
    • gcloud config set compute/zone us-central1-a
    • gcloud config set compute/region us-central1
    • 확인
      • gcloud config get-value compute/zone
      • gcloud config get-value compute/region
  • 다중 웹 서버 인스턴스 만들기
    • gcloud compute instances create www1 \ –image-family debian-9 –image-project debian-cloud \ –zone us-central1-a –tags network-lb-tag \–metadata startup-script=”#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo ‘<!doctype html><html><body><h1>www1</h1></body></html>’ | tee /var/www/html/index.html”
    • gcloud compute instances create www2 \ –image-family debian-9 \ –image-project debian-cloud \ –zone us-central1-a \ –tags network-lb-tag \ –metadata startup-script=”#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo ‘<!doctype html><html><body><h1>www2</h1></body></html>’ | tee /var/www/html/index.html”
    • gcloud compute instances create www3 \ –image-family debian-9 \ –image-project debian-cloud \ –zone us-central1-a \ –tags network-lb-tag \ –metadata startup-script=”#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo ‘<!doctype html><html><body><h1>www3</h1></body></html>’ | tee /var/www/html/index.html”
  • VM 인스턴스에 외부 트래픽을 허용
  • 부하 분산 서비스 구성
    • 고정 외부 IP 주소 생성
      • gcloud compute addresses create network-lb-ip-1 –region us-central1
    • 기존 http 상태 확인 리소스 추가
      • gcloud compute http-health-checks create basic-check
      • 인스턴스와 같은 리전에 대상 풀 추가
        • gcloud compute target-pools create www-pool –region us-central1 –http-health-check basic-check
      • 풀에 인스턴스 추가
        • gcloud compute target-pools add-instances www-pool –instances www1,www2,www3
      • 전달 규칙 추가
        • gcloud compute forwarding-rules create www-rule –region us-central1 –ports 80 –address network-lb-ip-1 –target-pool www-pool
  • 인스턴스로 트래픽 전송
    • www-rule 전달규칙의 외부 IP 확인
      • gcloud compute forwarding-rules describe www-rule –region us-central1
    • 부하 부여
      • while true; do curl -m1 35.238.188.171; done
  • HTTP 부하 분산기 만들기
    1. 부하 분산기 템플릿 생성
      1. gcloud compute instance-templates create lb-backend-template \ –region=us-central1 \ –network=default \ –subnet=default \ –tags=allow-health-check \ –image-family=debian-9 \ –image-project=debian-cloud \ –metadata=startup-script=’#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname=”$(curl -H “Metadata-Flavor:Google” \ http://169.254.169.254/computeMetadata/v1/instance/name)” echo “Page served from: $vm_hostname” | \ tee /var/www/html/index.html systemctl restart apache2′
    2. 테플릿 기반 관리형 인스턴스 그룹 생성
      1. gcloud compute instance-groups managed create lb-backend-group \ –template=lb-backend-template –size=2 –zone=us-central1-a
    3. 방화벽 규칙 생성 (GCP 상태확인 시스템 (130.211.0.0/22, 35.191.0.0./16) 의 인바운드 트래픽 허용)
      1. gcloud compute firewall-rules create fw-allow-health-check \ –network=default \ –action=allow \ –direction=ingress \ –source-ranges=130.211.0.0/22,35.191.0.0/16 \ –target-tags=allow-health-check \ –rules=tcp:80
    4. 전역 고정 외부 IP 생성
      1. gcloud compute addresses create lb-ipv4-1 \ –ip-version=IPV4 \ –global
      1. IP 확인방법
        1. gcloud compute addresses describe lb-ipv4-1 \ –format=”get(address)” \ –global
    5. 부하 분산기용 상태확인 만들기
      1. gcloud compute health-checks create http http-basic-check \ –port 80
    6. 백엔드 서비스 생성
      1. gcloud compute backend-services create web-backend-service \ –protocol=HTTP \ –port-name=http \ –health-checks=http-basic-check \ –global
    7. 백엔드 서비스에 인스턴스 그룹을 추가
      1. gcloud compute backend-services add-backend web-backend-service \ –instance-group=lb-backend-group \ –instance-group-zone=us-central1-a \ –global
    8. URL 맵을 만들어 들어오는 요청을 백엔드 서비스로 라우팅
      1. gcloud compute url-maps create web-map-http \ –default-service web-backend-service
    9. HTTP 프록시를 만들어 URL맵에 요청을 라우팅
      1. gcloud compute target-http-proxies create http-lb-proxy \ –url-map web-map-http
    10. 들어오는 요청을 프록시로 라우팅하는 전달 규칙 생성
      1. gcloud compute forwarding-rules create http-content-rule \ –address=lb-ipv4-1\ –global \ –target-http-proxy=http-lb-proxy \ –ports=80
  • 인스턴스로 전송되는 트래픽 테스트
  • 완료

GCP Essential Kubernetes Engine: Qwik Start

  • 기본 컴퓨팅 영역 설정
    • gcloud config set compute/zone us-central1-a
  • GKE 클러스터 만들기
    • gcloud container clusters create my-cluster
  • 클러스터의 사용자 인증 정보 얻기
    • gcloud container clusters get-credentials my-cluster
  • 클러스터에 애플리케이션 배포
    • kubectl create deployment hello-server –image=gcr.io/google-samples/hello-app:1.0
  • 애플리케이션 외부 트래픽 노출
    • kubectl expose deployment hello-server –type=LoadBalancer –port 8080
  • 서비스 검사
    • kubectl get service
  • 클러스터 삭제
    • gcloud container clusters delete my-cluster

완료!!

GCP Essentials Cloud Shell 및 gcloud 시작하기

  • 리전 및 영역
    • vm 및 영구디스크는 영역 (zone) 자원
    • 고정 IP 는 리전 자원
    • vm에 고정IP 를 지정하려면 같은 리전에 있어야함
  • 리전 확인하기
    • gcloud config get-value compute/zone
    • gcloud config get-value compute/region
    • 응답 결과가 (unset) 이면 기본 zone 과 기본 region 이 설정되지 않은 것임
  • 기본 리전 및 영역 식별하기
    • gcloud compute project-info describe –project qwiklabs-gcp-00-45d062d62824
      • region : us-central1, zone : us-central1-a 로 지정 되있는데?
  • 환경변수
    • 확인방법
      • echo $PROJECT_ID
      • echo $ZONE
    • 지정방법
      • export PROJECT_ID=qwiklabs-gcp-00-45d062d62824
      • export ZONE=us-central1-a
  • gcloud 도구로 가상 머신 만들기
    • gcloud compute instances create gcelab2 –machine-type n1-standard-2 –zone $ZONE
    • help 방법
      • gcloud compute instances create –help
      • 나가려면 q
    • 환경에서 구성목록 확인
      • gcloud config list
      • gcloud config list –all
    • 구성요소 나열
      • gcloud components list
  • 새 구성요소 설치하기
    • 베타 구성요소 설치
      • sudo apt-get install google-cloud-sdk
    • 자동 완성 모드 설정
      • gcloud beta interactive
  • SSH 를 이용하여 VM 인스턴스에 연결하기
    • gcloud compute ssh gcelab2 –zone $ZONE
  • 홈 디렉토리 사용하기
    • cloud shell 홈 디렉토리의 콘텐츠는 가상 머신을 종료했다가 다시 시작하더라도 모든 cloud shell 세션의 프로젝트에서 그대로 유지됨
    • cd $HOME
    • vi ./.bashrc
끝냈다~

GCP Essentials Compute Engine: Qwik Start – Windows

  • 생성
    • 이미지를 windows server 2012로 바꿔서 생성하면 됨
  • 윈도우 인스턴스가 준비되었는지 확인
    • gcloud compute instances get-serial-port-output instance-1 –zone=us-cenral1-a
  • 윈도우 서버 접속계정 생성
    • gcloud compute reset-windows-password instance-1 –zone us-central1-a –user admin
  • 이런것도 가능
    • gcloud compute reset-windows-password instance-1 –zone us-central1-a –user bpo-user
  • RDP 를 통해 윈도우 서버 접속하기
    • cloud console 의 vm 목록에서 rdp 파일을 내려받아 접속하면 됨