Multus
Update : 2021-09-27
Multus 소개
Multus는 쿠버네티스의 CRD 기반 네트워크 오브젝트를 사용하여 쿠버네티스에서 멀티 네트워킹 기능을 지원하는 멀티 CNI 플러그인입니다.
Multus는 CNI 명세를 구현하는 모든 레퍼런스 플러그인 및 3rd Party 플러그인을 지원합니. 또한, Multus는 쿠버네티스의 클라우드 네이티브 애플리케이션과 NFV 기반 애플리케이션을 통해 쿠버네티스의 SRIOV, DPDK, OVS-DPDK 및 VPP 워크로드를 지원합니다.
Multus는 Pod에 멀 네트워크 인터페이스를 첨부할 수 있는 Kubernetes용 오픈 소스 CNI 플러그인입니다. Multus는 메타 플러그인을 기반으로 Pod에 첨부된 다중 네트워크 인터페이스를 작동하는 추가 CNI 플러그인을 지원합니다. 다중 인터페이스를 포함한 Pod가 일반적으로 필요한 사용 사례에는 Kubernetes에 대한 5G 및 스트리밍 네크워크 등이 있습니다. EKS가 지원하는 Multus를 사용하여 이러한 환경에 걸쳐 어드밴스드 네트워킹을 활성화함으로써 사용자에게 고품질 콘텐츠를 전달하는 컨테이너화 네트워크 기능을 실행할 수 있습니다.
Multus 구성을 위한 사전 준비
이 랩에서는 아래에서 처럼 Multus 구성을 위한 EKS Cluster를 구성합니다.

Task1. Cloud9 구성
AWS 서비스에서 Cloud9을 선택하고, "Environments"를 설정합니다.
Cloud9 의 이름과 Description을 설정합니다.

인스턴스 타입과 운영체제, 그리고 절전모드 환경을 선택합니다. 절전모드 환경은 기본 30분입니다. 아래와 같이 변경합니다.
Instance type : m5.large
cost-saving : Never

Task2. SSH Key 구성 및 패키지 설치
EKS 환경구성에서 적용한 방식과 동일하게 적용합니다. 먼저 Cloud9 IDE 터미널에서 ssh key를 생성합니다.
key는 "eksworkshop"으로 구성합니다.
pem 을 설정하고, 권한을 부여합니다.
아래와 같이 aws cli v2.x 로 업그레이드 하고, kubelet 을 설치합니다.
Task3. Multus 를 위한 Git Clone 및 S3 구성
Multus 구성을 위한 Git Clone을 수행하고, S3 Bucket에 업로드합니다.
Cloudfomration 기반 배포
Task4. EKS Infra 배포
EKS Multus 구성을 위한 VPC를 구성합니다. S3에서 앞서 배포되어 있는 eks_infra.yaml의 Object URL을 복사합니다

CloudFormation - 스택 - 스택생성 을 선택합니다. 앞서 복사해 둔 eks-infra.yaml 의 Object URL을 Cloudformation S3 URL에 입력하고, 스택을 배포합니다.

Cloudformation Stack의 세부정보를 아래 예를 참조해서 입력합니다.


Stack Name : eks-multus-cluster
Availability Zone : ap-northeast-2a, ap-northeast-2b
PublicSubnetAz1Cidr : 10.0.0.0/24
PublicSubnetAz2Cidr: 10.0.1.0/24
PrivateSubnetAz1Cidr: 10.0.2.0/24
PrivateSubnetAz2Cidr: 10.0.3.0/24
MultusSubnet1Az1Cidr: 10.0.4.0/24
MultusSubnet1Az2Cidr: 10.0.5.0/24
MultusSubnet2Az1Cidr: 10.0.6.0/24
MultusSubnet2Az2Cidr: 10.0.7.0/24
Bastion Keyname : eksworkshop
Task5. EKS multus nodegroup 배포
EKS VPC Infra가 배포가 완료되었으면, EKS WorkerNode를 구성하기 위한 준비를 합니다
EKS nodegroup을 배포하기 위해 , Lambda function을 S3에 업로드합니다. Lambda function은 앞서 multus git에서 다운로드 하였습니다.
S3에 업로드한 EKS Nodegroup용 Cloudformation Stack yaml 파일의 Object URL을 복사해 둡니다.

Cloudformation 에서 새로운 Stack을 배포합니다.
CloudFormation - 스택 - 스택생성 을 선택합니다. 앞서 복사해 둔 eks-nodegroup-multus.yaml 의 Object URL을 Cloudformation S3 URL에 입력하고, 스택을 배포합니다. (Task3 배포과정과 동일합니다. )
Cloudformation Stack의 세부정보를 아래 예를 참조해서 입력합니다.



Stack Name : ng1
Cluster Name : eks-multus-cluster
ClusterControlPlaneSecurityGroup - eks-multus-cluster-EksControlSecurityGroup-xxxx
NodeGroupName : ng1
Min/Desired/MaxSize : 1 /2/3
KeyName : eksworkshop
VpcId : vpc-eks-multus-cluster
Subnets : privateAz1-eks-multus-cluster (main primary K8s networking network 입니다.)
MultusSubnets : multus1Az1 , Multus2Az1
MultusSecurityGroups : multus-Sg-eks-multus-cluster
LambdaS3Bucket : 앞서 생성한 Bucket Name (예. whchoimultus)
LambdaS3Key : lambda_function.zip
나머지는 기본값으로 사용합니다.
EKS 관리용 Bastion Host 구성
Task6. Bastion Host 구성
Bastion Host 에서 EKS 제어를 위해, 기본 설정을 합니다. EC2 대시보드를 선택하고, "MyBastionHost"를 선택하고, Public IPv4를 복사하고 SSH로 접속합니다

아래와 같이 접속한 Bastion Host에 Kubectl 을 설치합니다.
Bastion Host에 사용자의 AccessKey/SecreteKey를 구성하고, Kubeconfig를 업데이트 합니다.
kubectl 명령을 통해 정상적으로 출력이 생성되는지 확인합니다.
Bastion Host에서 Kubernetes ConfigMap을 업데이트 합니다.
rolearn 부분을 확인하기 위해서 , nodegroup 스택의 출력에서 NodeInstanceRole 의 값을 확인해서 rolearn을 수정합니다.

변경된 aws-auth-cm.yaml 파일을 업데이트 합니다.
Multus PlugIn / App 구성.
Task7. Multus 구성을 위한 CRD, NAD
Multus Plugin 구성을 위한 NAD DaemonSet를 아래와 같이 Bastion Host에서 실행합니다.
Multus Plugin 구성을 위한 NAD CRD를 아래와 같이 Bastion Host에서 실행하고, 2개의 CRD를 구성합니다.
ipvlan-config-1
main plugin - ipvlan
eth - eth1
mode - L3
IPAM - host-local
ipvlan-config-2
main plugin - ipvlan
eth - eth1
mode - L3
IPAM - host-local
task 8. App 구성
아래와 같이 4개의 App을 구성해 봅니다. sampleapp-1,2는 eth1개가 binding 되고 ,sampleapp-dual1,2는 eth2개가 바인딩 됩니다.
Multus 시험
아래와 같이 Container에 접속해서 각 IP 정보들과 같은 서브넷 같의 통신 유무를 확인해 봅니다.
Last updated
Was this helpful?