☁️ Tencent Cloud/☁️ Tencent cloud Products

[VPC] ENI (Elastic network interface)

just in here

ENI

 ENI(Elastic Network Interface)는 VPC 환경에서 가상 네트워크의 역할을 하는 논리적 네트워크 구성 요소로 온프레미스  환경에서 사용되는 NIC(Network Interface Card)에 대응되는 개념이다. 이 글에서는 Tencent cloud VPC 콘솔을 통해 ENI에 대한 개념을 설명한다.

 

ENI와 서브넷의 관계

ENI을 생성하려면 먼저 서브넷이 있어야 한다. ENI는 서브넷에 속하는 요소이며  서브넷은 VPC생성을 전제로 하니 다음과 같은 포함관계를 가진다.

 

Tencent cloud 콘솔에서 ENI를 생성 시 먼저 VPC와 Subnet을 선택해야 하는 것을 알 수 있다.

CVM 인스턴스와 ENI

 위에서 ENI는 넓게 보면 VPC에 속하는 것으로 설명했다. 즉, Tencent cloud에서 어떤 리소스가 VPC네트워킹의 자격을 얻으려면 해당 자원이 ENI에 연결되어 있어야한다. 따라서 CVM 인스턴스를 생성할때 기본적으로 1개의 ENI가 자동으로 연결된다. 이를 Primary ENI라고 한다. CVM 생성 시 인스턴스에 붙어있는 기본 Primary ENI는 unbound할 수 없다. 

 

 그렇다고 1개의 인스턴스에 1개의 ENI만 연결될 수 있는 것은 아니다. 우리가 컴퓨터에 여러개의 랜카드를 꽂는 것 처럼 1개의 인스턴스에는 여러개의 ENI와 바인딩 될 수 있다. 최대 연결 가능한 ENI의 갯수는 CVM Configuration 마다 차이가 있다. (참고 : https://www.tencentcloud.com/document/product/576/18527?from_cn_redirect=1)

 반대로 1개의 ENI에 여러 개의 인스턴스를 바인딩 하는 것은 가능할까? 불가능하다. 

 

 1개의 ENI는 한 번에 1개의 인스턴스에만 바인딩 될 수 있다. 인스턴스를 우리가 타는 택시라고 가정하고 ENI를 승객에 비유해보면 이해가 쉽다. 1대의 택시에는 여러 명의 손님이 동시에 탈 수 있지만, 1명의 손님이 여러 대의 택시에 동시에 탈 수는 없다. (상반신은 이쪽 택시에, 하반신은 저쪽 택시에, 하지 않는 이상..)

 

Security group 과 ENI

VPC 환경의 인스턴스를 생성할때 자동으로 기본 Security group과 사설 IP가 할당되는 걸 알 수 있는데, 이들 또한 인스턴스에 할당된 ENI에 연결되는 요소들이다. 같은 의미로,  1개의 ENI는 반드시 1개의 Security group을 가진다는 걸 알 수 있다.

 

 그렇다면 1개의 ENI는 여러 개의 Security group과 동시에 연결될 수 있을까? 가능하다. 

 

 1개의 CVM 인스턴스가 여러 개의 보안그룹 룰의 통제를 받을 수 있는 것과 같다.

Tencent cloud 콘솔에서도 특정 ENI에 여러개의 Security group 연결이 가능한 것을 확인할 수 있다. 이로 인해 VPC 네트워킹에서 보안정책을 좀 더 유연하게 관리할 수 있다.

 

ENI의 독립성

이렇게 보면 ENI가 굉장히 의존적인 것 같지만 그렇지 않다. ENI는 어느 인스턴스와도 연결되지 않아도 된다. 생성 전제조건인 VPC와 서브넷만 지정해주면 ENI 구성의 필수요소들 (Security group, MAC address, private IP)을 지닌채로 독립적으로 존재할 수 있다. 인스턴스에 연결되지 않은 ENI는 그 자체로는 어떠한 의미도 가지지 않을 뿐이다.

 

 

IP Address 와 ENI

CVM 인스턴스를 생성하면 인스턴스에 할당된 ENI에 랜덤하게 private IP가 부여된다. 이것이 곧 인스턴스의 private IP라고 볼 수 있다. 개별 ENI가 보유할 수 있는 private IP의 갯수는 CVM configuration에 따라 최소 6개에서 최대 30개이다. (https://www.tencentcloud.com/document/product/576/18527?from_cn_redirect=1)

 

Tencent cloud 에서 ENI 정보를 보면 부여된 private IP들을 확인할 수 있다. primary ENI의 primary IP(private)는 ENI 생성 시 ENI가 속한 서브넷의 CIDR 블록 내의 IP 값에서 랜덤한 값으로 설정되고, Secondry IP는 auto-assign이 가능하다. 추가로 생성되는 ENI (Secondary ENI)는 primary IP부터 auto-assign이 가능하다.

 

참고 : primary ENI의 primary IP는 추후 수정이 가능하지만, Secondary ENI의 primary IP는 수정이 불가능하다.

 

 

추가 Private IP

Primary ENI 의 primary IP (private) 를 제외한 나머지 private IP의 경우 assign 후에 해당 OS의 네트워크 설정을 통해 IP를 직접 추가해줘야 한다.

 

 

Tencent cloud ENI 콘솔에서 ENI를 생성하여 CVM와 연결하고

 

 

새로운 private IP (192.168.3.7)을 ENI에 할당한 뒤 동일 VPC 환경 내에서 해당 IP로 접속을 시도하면 접속이 안된다.

 

현재 ENI에 새로운 private IP(192.168.3.7)가 configure이 되어 있지 않아서 그렇다.

ip addr add <추가할 private IP> dev eth0

//이때 private IP는 서브넷 마스크까지 모두 입력해야 한다.

새 private IP를 추가하면

 

Private IP가 configure 된 모습을 확인할 수 있다. 이제 접속을 다시 시도하면 정상적으로 접속이 될 것이다. 이번엔 새로 Secondary ENI를 추가하여 private IP를 설정해보자.

 

ENI를 생성한 뒤 인스턴스와 바인딩 한 뒤 서버에서 확인하면

 

새로 추가한 ENI가 인식되는 걸 볼 수 있다. (eth1)

 

같은방법으로 Secondary ENI의 primary IP (192.168.3.12) 를 추가하면 된다. (이때 다른 ENI에 할당을 해도 OS계층에서 네트워크 설정을 변경한 셈이기 때문에 통신에는 문제가 없지만 되도록 콘솔설정과 같은 ENI에 매핑하는 것이 좋다.)

 

 

마치며

ENI는 VPC 네트워킹의 핵심 요소이고 VPC 네트워크 환경을 제어하는 리소스 이지만 라이트한 클라우드 유저나 혹은 자주 클라우드를 사용하는 사람들도 ENI에 대해 간과하고 넘어가는 경우가 많다. 사실 ENI에 대한 깊은 이해 없이도 서브넷과 VPC에 대한 간단한 개념만 있다면 콘솔을 통해 클라우드 리소스를 생성하고 VPC 네트워크 환경을 구성하는데에 큰 무리가 없기 때문이다. 또한 ENI는 단독으로 비용이 부과되는 서비스도 아니니 더욱 그렇다. 그러나 ENI는 VPC 네트워킹에서 빼놓을 수 없는 요소이기에 ENI를 이해하면 VPC를 좀 더 폭 넓게 활용할 수 있을 것 이다.