GCP 자습서 시도 '네트워크 부하 분산'

9098 단어 튜토리얼gcloudgcp

제목



표제의 튜토리얼을 시험해 보자.

【참조】
htps : // c ぉ d. 오, ぇ. 코 m/코 m 뿌테/도 cs/ぉ아 d바 센신 g/네토 ぉ rk/에아 mpぇ? hl = 그럼

전제


  • GCP 환경이 유지됨.
  • gcloud 명령이 설치되었습니다.

  • 시도



    1) GCE 인스턴스 생성


    
    $ gcloud compute instances create www1 \
    >     --image-family debian-8 \
    >     --image-project debian-cloud \
    >     --zone us-central1-b \
    >     --tags network-lb-tag \
    >     --metadata startup-script="#! /bin/bash
    >       sudo apt-get update
    >       sudo apt-get install apache2 -y
    >       sudo service apache2 restart
    >       echo 'www1' | tee /var/www/html/index.html
    >       EOF"
    ERROR: (gcloud.compute.instances.create) Could not fetch resource:
     - The resource 'projects/debian-cloud/global/images/family/debian-8' was not found
    

    갑자기 집착했다. 하지만 'debian-8'을 찾을 수 없다는 메시지에서 'debian-9'를 시도해보기로 한다.
    
    $ gcloud compute instances create www1 \
    
    
    --image-family debian-9 \
    --image-project debian-cloud \
    --zone us-central1-b \
    --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
      EOF"
    
    
    
    Created [https://www.googleapis.com/compute/v1/projects/fs-work-1978/zones/us-central1-b/instances/www1].
    NAME  ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
    www1  us-central1-b  n1-standard-1               10.128.0.2   xxx.xxx.xx.xxx  RUNNING
    
    성공했다. 같은 순서로, 이후 2 인스턴스 시작하면, 클라우드 콘솔에서 아래와 같이 되어 있다.
    
    $ gcloud compute instances list
    NAME  ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
    www1  us-central1-b  n1-standard-1               10.128.0.2   xxx.xxx.xx.xxx  RUNNING
    www2  us-central1-b  n1-standard-1               10.128.0.3   xx.xxx.x.xxx    RUNNING
    www3  us-central1-b  n1-standard-1               10.128.0.4   xx.xxx.xxx.xxx  RUNNING
    
    curl로 액세스.
    
    $ curl http://xx.xxx.x.xxx
    curl: (7) Failed to connect to xx.xxx.x.xxx port 80: 接続がタイムアウトしました
    
    연결되지 않는다. 핑은 통과하지만.
    
    $ ping xxx.xxx.xx.xxx
    PING xxx.xxx.xx.xxx (xxx.xxx.xx.xxx) 56(84) bytes of data.
    64 bytes from xxx.xxx.xx.xxx: icmp_seq=1 ttl=55 time=167 ms
    64 bytes from xxx.xxx.xx.xxx: icmp_seq=2 ttl=55 time=169 ms
    64 bytes from xxx.xxx.xx.xxx: icmp_seq=3 ttl=55 time=139 ms
    

    2) 방화벽 규칙 생성



    튜토리얼 설명한 대로 외부 트래픽에서 GCE 인스턴스의 특정 포트로 연결됩니다.
    
    $ gcloud compute firewall-rules create www-firewall-network-lb --target-tags network-lb-tag --allow tcp:80
    Creating firewall...⠛Created [https://www.googleapis.com/compute/v1/projects/【プロジェクトID】/global/firewalls/www-firewall-network-lb].
    Creating firewall...done.
    NAME                     NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
    www-firewall-network-lb  default  INGRESS    1000      tcp:80        False
    


    그리고 curl 다시.
    
    $ curl http://xxx.xxx.xx.xxx
    <!doctype html><html><body><h1>www1</h1></body></html>
    $ 
    $ curl http://xx.xxx.x.xxx
    <!doctype html><html><body><h1>www2</h1></body></html>
    $ 
    $ curl http://xx.xxx.xxx.xxx
    <!doctype html><html><body><h1>www3</h1></body></html>
    
    연결되었다. 하지만, 의문 여러가지.
    만든 방화벽 규칙의 적용 범위는? 특히 인스턴스의 IP 등 지정하는 것도 아니었지만, GCP 프로젝트 전체?
    문서 확인.

    읽어 보면 VPC 네트워크도 얽힌다는 것을 알 수 있다.

     
    VPC는 가상화 네트워크. 1 프로젝트에 복수의 VPC 네트워크를 설정 가능.
    VPC에 대해서는 이전, 다른 튜토리얼 시도 로 해 보았다.
    【특성】
    ・VPC는 방화벽도 포함해 “글로벌”되어 소스.
    · GCE 인스턴스 간의 트래픽은 방화벽 규칙에 의해 제어됩니다.
     
    과연. 덧붙여서 방화벽 작성에 사용한 gcloud 커멘드에 대해서는 하기 참조.

    3) 부하 분산에 사용할 정적 외부 IP 주소 만들기


    
    $ gcloud compute addresses create network-lb-ip-1 --region us-central1
    Created [https://www.googleapis.com/compute/v1/projects/【プロジェクトID】/regions/us-central1/addresses/network-lb-ip-1].
    



    정적 외부 IP 주소는 리전 자원인 것 같다.
    【참고】 h tps : // c ぉ d. 오, ぇ. 코 m / sdk / gc ぉ d / 레후 렌세 / 코 m 뿌테 / 아 d 드레 s / c 어? hl = 그럼
     
    문득, 「네트워크 계층」이라는 란의 「프리미엄」이라고 하는 것이 신경이 쓰였다. gcloud에서는, 그런 지정하고 있지 않기 때문에.
    h tps : // c ぉ d. 오, ぇ. 이 m / 네토 ぉ rk-치에 rs /? hl = 그럼
    「네트워크 계층」에는 「프리미엄」과 「스탠다드」가 있다.
    "프리미엄"은 "Google의 글로벌 네트워크를 사용하여 매우 높은 네트워크 성능을 사용자에게 제공합니다."에서 "기본"계층입니다.
    "스탠다드"는 "다른 클라우드 공급자와 동등한 성능을 제공하면서 네트워크 비용을 줄입니다."

    4) HTTP 헬스 체크 추가


    
    $ gcloud compute http-health-checks create basic-check
    Created [https://www.googleapis.com/compute/v1/projects/【プロジェクトID】/global/httpHealthChecks/basic-check].
    NAME         HOST  PORT  REQUEST_PATH
    basic-check        80    /
    



    헬스 체크 오브젝트는 글로벌 자원인 것 같다.

    5) 대상 풀 생성 및 GCE 인스턴스 추가


    
    $ gcloud compute target-pools create www-pool --region us-central1 --http-health-check basic-check
    Created [https://www.googleapis.com/compute/v1/projects/【プロジェクトID】/regions/us-central1/targetPools/www-pool].
    NAME      REGION       SESSION_AFFINITY  BACKUP  HEALTH_CHECKS
    www-pool  us-central1  NONE                      basic-check
    

    대상 풀은 지역 리소스입니다. 작성시에 헬스 체크의 지정이 필수라는 것.
     
    그리고, 처음에 작성한 GCE 인스턴스군을 타겟 풀에 추가.
    
    $ gcloud compute target-pools add-instances www-pool --instances www1,www2,www3 --instances-zone us-central1-b
    Updated [https://www.googleapis.com/compute/v1/projects/【プロジェクトID】/regions/us-central1/targetPools/www-pool].
    

    6) 전송 규칙 생성


    
    $ gcloud compute forwarding-rules create www-rule --region us-central1 --ports 80 --address network-lb-ip-1 --target-pool www-pool 
    Created [https://www.googleapis.com/compute/v1/projects/【プロジェクトID】/regions/us-central1/forwardingRules/www-rule].
    

    7) 전달 규칙의 외부 IP 검색


    
    $ gcloud compute forwarding-rules describe www-rule --region us-central1
    IPAddress: xx.xxx.xxx.xxx
    IPProtocol: TCP
    creationTimestamp: '2018-09-18T07:52:11.124-07:00'
    description: ''
    id: '6314926843158638580'
    kind: compute#forwardingRule
    loadBalancingScheme: EXTERNAL
    name: www-rule
    networkTier: PREMIUM
    portRange: 80-80
    region: https://www.googleapis.com/compute/v1/projects/【プロジェクトID】/regions/us-central1
    selfLink: https://www.googleapis.com/compute/v1/projects/【プロジェクトID】/regions/us-central1/forwardingRules/www-rule
    target: https://www.googleapis.com/compute/v1/projects/【プロジェクトID】/regions/us-central1/targetPools/www-pool
    

    8) curl로 확인


    
    $ curl http://xx.xxx.xxx.xxx
    <!doctype html><html><body><h1>www3</h1></body></html>
    $ 
    $ curl http://xx.xxx.xxx.xxx
    <!doctype html><html><body><h1>www3</h1></body></html>
    $ 
    $ curl http://xx.xxx.xxx.xxx
    <!doctype html><html><body><h1>www3</h1></body></html>
    $ 
    $ curl http://xx.xxx.xxx.xxx
    <!doctype html><html><body><h1>www1</h1></body></html>
    $ 
    $ curl http://xx.xxx.xxx.xxx
    <!doctype html><html><body><h1>www1</h1></body></html>
    $ 
    $ curl http://xx.xxx.xxx.xxx
    <!doctype html><html><body><h1>www1</h1></body></html>
    $ 
    $ curl http://xx.xxx.xxx.xxx
    <!doctype html><html><body><h1>www1</h1></body></html>
    $ 
    $ curl http://xx.xxx.xxx.xxx
    <!doctype html><html><body><h1>www2</h1></body></html>
    

    일정 비율로 www1~www3이 랜덤으로 액세스된다.

    좋은 웹페이지 즐겨찾기