한개의 서버는 외부에서 접근 못하도록 격리시키고, 웹과 통신하는 서버가 앞단에서 request를 받아 격리된 서버로 요청을 보내도록 AWS 를 사용해 네트워크를 구성해보자. 일단 가장 먼저 VPC부터 만들자. AWS 계정을 생성했으며 자동으로 Default VPC가 생기고, 이 vpc로 경로가 잡히지만, 사용하지 않고, 직접 만들어보자.
public server와 private server가 동일한 VPC내에 실행되도록 설정을 해야한다. public subnet은 webserver 호스팅을 하도록, private subnet은 deep learning 자원을 호스팅하는 restful server를 호스팅하도록 설정할 거다.
public subnet private subnet 생성해줍니다.
먼저 public subnet 부터 연결한 거 하나 만들고..
private 도..
똑같이 private subnet 할당해주면 된다.. 짤에서는 public subnet 2개 private subnet 6개 할당해줬는데, 꼭 이렇게 안 해도 됨
보안그룹 http, https 허용
고정 IP 도 할당해주자.
health check success code는 200-499 까지 해주자..일단은..
public instance 를 보류 중에 넣고 next
load balancer 타입 application 선택
보안그룹 새로 생성하고 inbound 룰에 https도 추가, anywhere
!
리스너에 https도 추가, acm 인증서 발행, 도메인이 있다고 가정
지금 로드밸런서는 단순리 aws ssl 인증서를 도입하기 위해 만든 로드밸런서도 실제로 public instance를 2개 띄워서
로드밸런싱 할 수도 있겠지만 그러지 않겠다.
Private Instance는 Public IP가 없고, Subnet에 연결된 Routing table에 IGW로 향하는 규칙도 없다. local(VPC 대역) 끼리만 통신가능한 상태. 이러한 Private Instance로 접속하려면 통신이 되는 Local 대역의 서버에서 접속하면 된다. 또는 load balancer를 이용하거나..
public ec2를 Bastion Instance(Public 네트워크에서 Private 네트워크에 대한 액세스를 제공하기 위한 목적을 가진 서버)로 만들어주자.
먼저 ssh로 public instance에 접속해준다. private ec2 instance key file을 복사해서 public 안에 똑같이 만들어준다.
ubuntu@ip-10-1-1-199:~$ vi ec2-private.pem
ubuntu@ip-10-1-1-199:~$ chmod 400 ec2-private.pem
ubuntu@ip-10-1-1-199:~$ sudo ssh -i ec2-private.pem ubuntu@10.1.3.135
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.15.0-1028-aws x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri Jan 20 02:59:15 UTC 2023
System load: 0.0 Processes: 98
Usage of /: 5.4% of 28.89GB Users logged in: 0
Memory usage: 11% IPv4 address for eth0: 10.1.3.135
Swap usage: 0%
0 updates can be applied immediately.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
ubuntu@ip-10-1-3-135:~$
10-1-3-135 private ip로 접속했다!
문제는 여기서(private instance) 네트워크에 접속하지 못한다는 거다.
확인해보면 packet 이 도달하지 못하는 걸 알 수 있다. 이러면 각종 패키지를 이 인스턴스에 설치해주지 못하므로, nat gateway를 깔아주자
gateway 생성 후 route table에 가서 private subnet을 맴핑해준다.
이제 잘 됨
이제 테스트 삼아서 여기에 nginx도 설 치해주자.
도메인주소 있다고 가정
curl 'http://10.1.3.135' -i -X GET
private ip로 성공!
Private -> Routing Table -> NATGateway -> InternetGateway -> Internet
internet->internetGateWay->Router->Route Table->Load Balancer->public subnet 안의 public ec2 instance->private ec2 instance
이런 식으로 구성할 거다..
좀 더 적으려다가 velog에는 이까지만..
https://stackoverflow.com/questions/57358449/how-to-send-http-https-request-in-private-ec2-instance
https://a1010100z.tistory.com/174
https://kimjingo.tistory.com/172
https://roseline.oopy.io/dev/access-aws-private-db-through-vpn