AWS 내의 서버에서 S3에 접속할때 IP를 보면 공인 IP를 사용한다. 이 말은 같은 AWS 내에 있는 서비스를 사용하지만 불필요하게 인터넷 NAT를 통해서 S3를 접속한다는 의미이다. 이를 해결하기 위해 AWS는 S3 Endpoint를 제공한다.
NAT 사용 확인 하기
쿠버네티스가 설치되어 있는 VPC의 경우 다음과 같이 확인해 볼 수 있다.
일단 -T 옵션을 제공하는 traceroute
가 기본으로 포함되어 있는 도커 이미지를 찾지 못하여 우분투 이미지를 사용하고 traceroute
를 설치해서 테스트 한다.
다음 명령어로 우분투 이미지의 파드를 실행한다.
kubectl run temp-shell -i --tty --rm --image ubuntu
열린 쉘 안에서 traceroute
를 설치한다.
apt update
apt install traceroute
traceroute
명령으로 s3에 접근해 본다. <bucket-name>
에는 사용하고 있는 S3 버킷 이름을 준다. (참고)
traceroute -n -T -p 443 <bucket-name>.s3.ap-northeast-2.amazonaws.com
각 옵션의 의미는 다음과 같다. (참고)
- -n: Stop the resolving of the IP addresses.
- -T: Use the TCP SYN for the requests.
- -p port: Define the port for the query.
다음과 비슷한 결과가 나올것이다.
traceroute to <bucket-name>.s3.ap-northeast-2.amazonaws.com (52.219.146.19), 30 hops max, 60 byte packets
1 10.1.151.178 0.036 ms 0.014 ms 0.012 ms
2 10.1.24.68 0.949 ms 0.962 ms 0.859 ms
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 52.219.146.19 2.371 ms 2.398 ms 2.473 ms
여기서 1번은 쿠버네티스의 노드 IP 이며, 2번이 NAT 주소인것을 확인할 수 있다.
S3 엔드포인트 설치
AWS 웹 콘솔을 열고 VPC 페이지를 연다.
왼쪽 Endpoints 메뉴를 선택하고 여린 페이지에서 Create Endpoint 를 선택한다.
- 적당한 이름을 준다.
- AWS services를 선택
- Services에서 Type을 Gateway로 선택하고 나오는 결과 중 s3를 선택한다.
- 설치할 VPC를 고른다.
- 설치할 Route tables을 선택한다.
- 원하는 권한을 설정하거나 Full access를 선택한다.
NAT 사용하지 않는 것을 확인
다시 traceroute
명령으로 s3에 접근해 보면 다음과 비슷한 결과가 나올것이다.
traceroute to <bucket-name>.s3.ap-northeast-2.amazonaws.com (52.219.146.58), 30 hops max, 60 byte packets
1 10.1.151.178 0.031 ms 0.014 ms 0.012 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 52.219.146.58 0.511 ms 0.523 ms 0.534 ms
2번이 NAT 주소가 사라진것을 알 수 있다.