AWS

AWS완전관리형서비스를 이용한 도커 및 쿠버네티스 개발환경구축과정 - 2주차

와니's(Wani) 2020. 8. 15. 08:53

도입부

오늘도 2주차에 오게 되었습니다.

비가 추적추적 너무 많이 와서 양말이 다 젖었을 정도입니다.

그래도 새로운걸 배운다는 즐거운 마인드로 참여하려고 합니다!

저번주에는 재밌는걸 배웠었는데 ,오늘은 실무에서 중요한 부분을 배운다고 하네요.

창문에 보시면 비가 추적추적

2주차

AWS 고가용성 환경 구축 - ASG, ELB, Multi-AZ, Global Region 구성 실습

  • 저번주 상기

    • EC2

      • COMPUTE 환경 cpu 메모리 제공
    • VPC

      • 보안을 위해 private한 클라우드 환경 제공
      • 구글의 클라우드 플랫폼에도 있고 에저에도 있다.
      • 프로토콜을 규약을 맞추는 것처럼 다 있다.
    • EBS

    • AMI

    • 위을 잘 이해하면 어떤 클라우드 환경으로 가도 쉽게 된다.

    • 오픈스택을 쓸수도 있다.

    • 스토리지 백업 , 복사 , 스냅샷 다른 리전으로 옮긴다.

    • 패스워드를 잃어버렸을때 (key pair) 인스턴스가 물고 있는 저장하는 스토리지를 접근 할 수가 없다. 인스턴스키가없어서

      • EC2는 껍데기에 불과 , 뺏다가 끼는 방식 AWS측에서도 하라고 제공
  • 오늘 할 부분
    • 루트 사용자로서 다른 직원들이나 동료들에게 내 계정 안에서 아이디와 패스워드를 만들고 권한같은게 있어서 줄 수 있도록 한다.
    • CLI라고 해서 리눅스베이스에서 사용 EC2 , VPC , AMI EBS 콘솔에서 사용하는것이 아니라 CLI 방식으로 한다.
      • CLI를 활용하는 이유는 자동화 때문에 엔서블
      • 자동화의 말에 대부분 스크립트 이다. 순차적으로 명령어를 통해서 할것. yml ,json으로 스크립트 사용
    • 급한대로 사용할 수 있는 윈도우 환경의 AWS환경

IAM(Identity and Access Management)

 

  • 서비스에 대한 엑세스를 안전하게 제어하는 웹 서비스

  • 사용자, 엑세스 키와 같은 보안 자격증명, 사용자와 어플리케이션이 어떤 AWS 리소스에 엑세스 할 수 있는지 제어하는 권한을 한곳에서 관리

  • 오늘 만들것

    • USER

    • GROUP

    • 서비스 어떤 범위까지 사용할 수 있는지(ROLE)

    • 크리덴셜 - Key

    • CLI 접근을 통해서 계정을 만듬

  • 녹색 V자가 좋은거고

IAM 정책에서 부족한 부분이 나온다.

  • 느낌표를 녹색으로 만든다 그럼 보안상태가 좋아진다.

IAM 로그인시 루트로 들어갈것인지 계정을 부여할 것인지.
여러가지 증명을 받을수가 있다. 나는 멀티팩터 인증을 부여했다.

  • MFA

    • 다요소 인증 (Multi-factor Authentication MFA)
    • 지식 (가장 자주 사용하는것 password)
    • 소유 (갖고 있는거 홍채 , 신체 , 지문)
    • 속성 (보안카드 , OTP)
    • 세가지 요소를 이용해서 2가지 이상을 이용해서 로그인 하면 다요소 인증이다.

  • 개별 IAM 사용자 생성 이유

    • 보편적으로 루트 계정을 사용하지 않는다.
    • 아이디 하나 더만들고 루트 계정처럼 만들고 사용한다.
  • 1단계

    • 접근 방법이 2개
      • CLI SDK API 도구에 대해 엑세스 키 ID 비밀 엑세스키 활성화
      • ManagementConsole
    • 자동 생성된 패스워드를 한번 사용하고 자기가 원하는 패스워드를 바꾸는 방식
  • 2단계

    • 그룹에 사용자 추가
    • 기존 사용자에서 권한 복사
    • 기존 정책 직접 연결
      • AdministratorAccess
      • 하나의 유저를 원하는 API에 엑세스를 할수 있는 권한을 준다.
  • csv 내용

    • user name
    • password
    • Access key ID
    • Secret access key
    • Console login link
  • IAM 비밀 번호 정책 적용

AWS CLI 환경 구축

  • credential 적용

    • aws configure
  • VPC와 서브넷 만들기

    • aws ec2 create-vpc --cidr-block 10.0.0.0/16 --output table
    • aws ec2 describe-vpcs
    • MY_VPC = vpc-0dda8e0965ac6cf5e
    • aws ec2 create-subnet --vpc-id vpc-0dda8e0965ac6cf5e --cidr-block 10.0.0.0/20 --availability-zone ap-northeast-2a --output table
    • aws ec2 create-subnet --vpc-id vpc-0dda8e0965ac6cf5e --cidr-block 10.0.16.0/20 --availability-zone ap-northeast-2b --output table
    • aws ec2 create-subnet --vpc-id vpc-0dda8e0965ac6cf5e --cidr-block 10.0.32.0/20 --availability-zone ap-northeast-2c --output table
    • aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-0dda8e0965ac6cf5e" --query 'Subnets[*].{AZ:AvailablilityZone,CIDR:CidrBlock}' --output table
  • 서브넷을 퍼블릿 서브넷으로 만들기

    • aws ec2 create-internet-gateway
    • MY_IGW = igw-0dde7573e17a32bcb
    • aws ec2 attach-internet-gateway --vpc-id vpc-0dda8e0965ac6cf5e --internet-gateway-id igw-0dde7573e17a32bcb
    • aws ec2 describe-internet-gateways
    • aws ec2 create-route-table --vpc-id vpc-0dda8e0965ac6cf5e
    • aws ec2 describe-route-tables
    • MY_RTB = rtb-02f38665dad67d267
    • aws ec2 create-route --route-table-id rtb-02f38665dad67d267 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-0dde7573e17a32bcb
    • aws ec2 describe-route-tables --route-table-id rtb-02f38665dad67d267
    • aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-0dda8e0965ac6cf5e" --query 'Subnets[*].{ID:SubnetId,CIDR:CidrBlock}'
    • aws ec2 associate-route-table --subnet-id subnet-01f79f36672a79ba4 --route-table-id rtb-02f38665dad67d267
    • aws ec2 associate-route-table --subnet-id subnet-0cffd56e316220c35 --route-table-id rtb-02f38665dad67d267
    • aws ec2 associate-route-table --subnet-id subnet-039d676652d8d1a33 --route-table-id rtb-02f38665dad67d267
    • aws ec2 modify-subnet-attribute --subnet-id subnet-01f79f36672a79ba4 --map-public-ip-on-launch
    • aws ec2 modify-subnet-attribute --subnet-id subnet-0cffd56e316220c35 --map-public-ip-on-launch
    • aws ec2 modify-subnet-attribute --subnet-id subnet-039d676652d8d1a33 --map-public-ip-on-launch
    • aws ec2 modify-vpc-attribute --vpc-id vpc-0dda8e0965ac6cf5e --enable-dns-hostnames
  • 키페어, 보안그룹 만들기

    • aws ec2 create-key-pair --key-name MyKeyPair --query 'KeyMaterial' --output text > MyKeyPair.pem
    • chmod 400 MyKeyPair.pem
    • aws ec2 create-security-group --group-name HTTP_SSHAccess --description "Security group for HTTP_SSH access" --vpc-id vpc-0dda8e0965ac6cf5e
    • MY_SG = sg-0cc77ae059bad1d82
    • aws ec2 describe-security-groups
    • MY_IP=$(curl http://checkip.amazonaws.com) //59.9.140.136
    • aws ec2 authorize-security-group-ingress --group-id sg-0cc77ae059bad1d82 --protocol tcp --port 22 --cidr 59.9.140.136/32
    • aws ec2 authorize-security-group-ingress --group-id sg-0cc77ae059bad1d82 --protocol tcp --port 80 --cidr 0.0.0.0/0
  • 볼륨 및 인스턴스 만들기

    • aws ec2 run-instances --image-id ami-0e92198843e11ccee --count 1 --instance-type t2.micro --key-name MyKeyPair --security-group-ids sg-0cc77ae059bad1d82 --subnet-id subnet-01f79f36672a79ba4 --block-device-mappings file://mapping.json

    • MY_IID=i

    • aws ec2 describe-instances --instance-id $MY_IID

    • ssh -i "MyKeyPair.pem" ec2-user@

  • 정리
    • aws ec2 terminate-instances --instance-id $MY_IID
    • aws ec2 delete-security-group --group-id $MY_SG
    • aws ec2 delete-subnet --subnet-id $MY_SID1
    • aws ec2 delete-subnet --subnet-id $MY_SID2
    • aws ec2 delete-subnet --subnet-id $MY_SID3
    • aws ec2 delete-route-table --route-table-id $MY_RTB
    • aws ec2 detach-internet-gateway --internet-gateway-id $MY_IGW --vpc-id $MY_VPC
    • aws ec2 delete-internet-gateway --internet-gateway-id $MY_IGW
    • aws ec2 delete-vpc --vpc-id $MY_VPC
[
  {
    "DeviceName": "/dev/xvda",
    "Ebs": {
      "VolumeSize": 10
    } 

  },
  {
    "DeviceName": "/dev/sdh",
    "Ebs": {
      "VolumeSize": 10
    }


  }
]

RDS(Relational Database Service)

  • 원래 고가용성을 사용할수 있는 오픈소스가 있다

  • 우리 인스턴스로 만드면 3~4개 인스턴스로 서로 백업 하거나 할 수 있다.

  • 프로덕션 : 고가용성 및 빠르고 일관된 성능을 위해 기본값을 사용하십시오.

  • VPC 외부의 Amazon EC2 인스턴스 및 디바이스는 데이터베이스에 연결할 수 있습니다. 데이터베이스에 연결할 수 있는 VPC 내부의 EC2 인스턴스 및 디바이스를 지정하는 하나 이상의 VPC 보안 그룹을 선택하십시오.

  • 퍼블릭 액세스 기능

    • 예 : 어디서든 접속 가능
    • 아니오 : 허용된 VPC내 EC2인스턴스로만 접속이 가능
  • 자동 백업 활성화

    • 자동 백업 장치들이 있다.
    • 백업 보존 기간
    • 백업기간
    • 모니터링
    • 로그내보내기
  • 초기 생성에 백업을 한번 해둠, 세팅 하는 시간이 조금 걸린다.

  • 2C에 데이터 베이스가 있으니까 웹서버는 인스턴스를 만든다

  • 2a로 인스턴스를 만든다.

  • 예전에는 리얼타임으로 적용되지 않는다 . 도메인이랑 아이피랑,

  • 예전보다 나아졌지만 그래도 느리다.

  • 네임서버 변경을 해야한다. ->

  • 도메인과 ip를 매핑하는게 유형 A : 탄력적 IP 넣기

  • CNAME 도메인과 도메인을 매핑 : 도메인 넣기

    • 로드밸런싱을 할때 사용한다.

생활코딩

  • hostnamectl
    • xen이라는 버츄얼머신을 만든다.

rdb 연동 연습

  • 보안 그룹을 잘 이해하는것이 중요

    • web이라는 보안그룹이라는 소스로 허용해서 그곳에서 들어오는 트래픽만 허용하겠다는 뜻임
  • ELB

    • L4
      • 2,3개의 같은 서버를 두고 부하 분산을 시켜줌 서비스를 멈추지 않게함.
      • 헬스체크를 계속하다가 다른쪽으로 몰아줌
      • failover 부하분산 로드밸런싱
      • 피지컬, 데이터링크, 트랜스포트레이어, 네트워크레이어가 로드밸런싱 해준다.
    • L7
      • 애플리케이션단에서 로드밸런싱 해주는 기능을 제공해준다.
  • 오토스케일링 : 수평적

    • 현실적으로 기계적으로 바꿔야 하기때문에 불가능함 클라우드의 장점
    • 스케일 아웃 :똑같은 인스턴스를 늘리는것 맥시멈 몇개까지 셋팅 그 사양을 못넘음 임계치에 따라서 3대의 그룹을 맺어서 CPU사용량의 평균을 낸다. 어느 선을 넘으면 하나를 더 만들게 되고, 그러면 또 하나 만든다.
    • 스케일 인 : 시간이 지나서 CPU 쉬는게 늘어나면 인스턴스를 삭제
  • 리소스 업그레이드 하는것 : 수직적

    • 스케일 업
    • 스케일 다운
  • aws elb

  • aws elb -> 쿱에서는 elb를 k8s ingress

    • nginx 프록시
      • application loadbalancer url 따라 api단에 요청을 한다.
      • pc로 따지면 최상위 레이어 패킷을 따져서 분석을해서 보낸다.
  • alb -> 패킷을 분석 -> 크롬 사용자가 가는 서버(인스턴스)로 보내버린다 , IE는 IE

    • content switch 라고도 부름
    • f5.com
    • 하지만 엔진엑스는 못한다.
    • 그래서 쿱은 못한다.
  • 프론트엔드 : 익스터널

  • 백엔드 : 인터널

  • 로드밸런서가 만들어질때 백엔드쪽에 헬스체크 한다. HTTP 경우 실제로 경로에 체크를 계속 한다. 200OK가 떨어져야 한다. 그래야 살아있다고 느낀다,.

  • TCP같은 경우 PING같은거라고 치면 인스턴스 받아서 준다. 핑에대한 센토스 에 대한 TCP가 살아있어서 준다. PING은 응답을 줬기때문에 살아있지만 웹서비스가 죽어있을 경우 잘된다고 판단 할 수 있다.
    주기적으로 HTTP로 접속을 해보는 것이다.
    기본적으로 HTTP로 한다.

  • 응답시간 초과 5초안에 안오면 실패다.

  • 30초 간격으로 보낸다.

  • 2번동안 없으면 죽은거라고 생각한다.

  • 죽은 다음에도 30초 간격으로 신호를 준다.

  • 신호가 10번이 성공해야 한다.

  • 디폴트값은 보통 안건들인다.