Amazon EKS에 주니퍼 클라우드 네이티브 라우터 설치 및 확인
주니퍼 클라우드 네이티브 라우터는 JCNR-컨트롤러(cRPD)를 사용하여 컨트롤 플레인 기능을 제공하고 JCNR-CNI를 사용하여 컨테이너 네트워크 인터페이스를 제공합니다. 주니퍼 클라우드 네이티브 라우터는 DPDK 지원 vRouter를 사용하여 고성능 데이터 플레인 기능을 제공하고 Syslog-NG를 사용하여 알림 기능을 제공합니다. 이 섹션에서는 클라우드 네이티브 라우터의 이러한 구성 요소를 설치하는 방법에 대해 설명합니다.
주니퍼 지원 사이트 패키지를 사용하여 주니퍼 클라우드 네이티브 라우터 설치
이 섹션을 읽고 Helm 차트를 사용하여 클라우드 네이티브 라우터 구성 요소를 설치하는 데 필요한 단계를 알아봅니다.
- EKS 배포를 위한 시스템 요구 사항을 검토하여 설정에 필요한 모든 구성이 있는지 확인합니다.
- 원하는 클라우드 네이티브 라우터 소프트웨어 패키지를 원하는 디렉터리에 다운로드합니다.
패키지를 다운로드하여 클라우드 네이티브 라우터만 설치하거나, 패키지를 다운로드하여 JNCR을 주니퍼 cSRX와 함께 설치할 수 있습니다. 사용 가능한 패키지에 대한 설명은 클라우드 네이티브 라우터 소프트웨어 다운로드 패키지를 참조하십시오. 주니퍼 cSRX를 지금 설치하고 싶지 않다면 나중에 작동하는 클라우드 네이티브 라우터 설치에 주니퍼 cSRX를 설치하도록 언제든지 선택할 수 있습니다.
- Juniper_Cloud_Native_Router_<release-number>.tgz 파일을 확장합니다.
tar xzvf Juniper_Cloud_Native_Router_<release-number>.tgz
- directory를 기본 설치 디렉토리로 변경합니다.
클라우드 네이티브 라우터만 설치하는 경우 다음을 수행합니다.
cd Juniper_Cloud_Native_Router_<release>
클라우드 네이티브 라우터와 cSRX를 동시에 설치하는 경우:
cd Juniper_Cloud_Native_Router_CSRX_<release>
메모:설치의 나머지 모든 단계에서는 현재 작업 디렉토리가 현재 Juniper_Cloud_Native_Router_<release> 또는 Juniper_Cloud_Native_Router_CSRX_<release> 상태라고 가정합니다.
- 현재 디렉터리의 내용을 봅니다.
ls helmcharts images README.md secrets
- helmchart 디렉터리로 변경하고 Helm 차트를 확장합니다.
cd helmchart
클라우드 네이티브 라우터 전용:
ls jcnr-<release>.tgz
tar -xzvf jcnr-<release>.tgz
ls jcnr jcnr-<release>.tgz
결합된 클라우드 네이티브 라우터 및 cSRX의 경우:
ls jcnr_csrx-<release>.tgz
tar -xzvf jcnr_csrx-<release>.tgz
ls jcnr_csrx jcnr_csrx-<release>.tgz
- 라이선스 설치의 단계에 따라 클라우드 네이티브 라우터 라이선스를 설치합니다.
- 호스트 서버의 루트 비밀번호를 다음 행의 secrets/jcnr-secrets.yaml 파일에 입력합니다.
root-password: <add your password in base64 format>
암호는 base64 인코딩 형식으로 입력해야 합니다. 다음과 같이 암호를 인코딩합니다.echo -n "password" | base64 -w0
- 클러스터에 secrets/jcnr-secrets.yaml 을 적용합니다.
kubectl apply -f secrets/jcnr-secrets.yaml namespace/jcnr created secret/jcnr-secrets created
- 클라우드 네이티브 라우터 클러스터에 VRRP(Virtual Router Redundancy Protocol)를 사용하는 경우 JCNR ConfigMap을 생성합니다. 샘플
jcnr-aws-config.yaml
매니페스트는 설치 번들의 디렉토리에cRPD_examples
제공됩니다. Kubernetes 시스템에 적용합니다jcnr-aws-config.yaml
.kubectl apply -f jcnr-aws-config.yaml configmap/jcnr-aws-config created
- 원하는 경우 vRouter DPDK 컨테이너에 코어를 할당하는 방법을 구성합니다. 클라우드 네이티브 라우터 포워딩 플레인에 CPU 할당의 내용을 참조하십시오.
- helmchart/jcnr/values.yaml 또는 helmchart/jcnr_csrx/values.yaml 파일을 사용하여 배치에 대한 Helm 차트를 사용자 정의하십시오.
Helm 차트 구성에 대한 설명과 EKS 배포를 위한 샘플 Helm 차트에 대한 설명은 EKS 배포를 위한 JCNR Helm 차트 사용자 지정 섹션을 참조하세요.
- 필요에 따라 클라우드 네이티브 라우터 구성을 사용자 지정합니다.
cRPD 사용자 지정을 생성하고 적용하려면 클라우드 네이티브 라우터 구성 사용자 지정 을 참조하십시오.
- 지금 주니퍼 cSRX를 설치하는 경우 cSRX 라이선스 적용 및 cSRX 구성의 절차를 따르십시오.
- 다음 명령을 사용하여 Multus CNI를 설치합니다.
kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/multus/v3.7.2-eksbuild.1/aws-k8s-multus.yaml
- Amazon Elastic Block Storage(EBS) Container Storage Interface(CSI) 드라이버를 설치합니다.
- 구성에 따라 Cloud-Native Router를 설치할 노드에 레이블을
nodeaffinity
지정합니다(에values.yaml
정의된 경우). 예를 들어:kubectl label nodes ip-10.0.100.17.us-east-2.compute.internal key1=jcnr --overwrite
- Helm 차트를 사용하여 주니퍼 클라우드 네이티브 라우터를 구축합니다.
helmchart/jcnr 또는 helmchart/jcnr_csrx 디렉토리로 이동하여 다음 명령을 실행합니다.
helm install jcnr .
helm install jcnr-csrx .
NAME: jcnr LAST DEPLOYED: Fri Dec 22 06:04:33 2023 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
- 주니퍼 클라우드 네이티브 라우터 구축을 확인합니다.
helm ls
샘플 출력:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION jcnr default 1 2023-12-22 06:04:33.144611017 -0400 EDT deployed jcnr-<version> <version>
AWS Marketplace 구독(BYOL)을 사용하여 주니퍼 클라우드 네이티브 라우터 설치
이 절차에 따라 Helm 차트를 사용하여 AWS Marketplace에서 JCNR(BYOL)을 설치합니다.
이 절차에서는 기존 Amazon EKS 클러스터에 클라우드 네이티브 라우터를 설치합니다. 이 절차를 실행하기 전에 Amazon EKS 클러스터를 설정했는지 확인합니다. EKS 배포를 위한 시스템 요구 사항에 설명된 시스템 요구 사항을 충족하는 한 어떤 방법이든 EKS 클러스터를 생성할 수 있습니다.
편의를 위해 클러스터를 빠르게 시작하고 실행하는 데 사용할 수 있는 CloudFormation 템플릿을 제공했습니다. 이 템플릿은 EKS 클러스터용 CloudFormation 템플릿에 제공됩니다.
- EKS 배포를 위한 시스템 요구 사항을 검토하여 설정에 필요한 모든 구성이 있는지 확인합니다.
- AWS Marketplace에 로그인하고 클라우드 네이티브 라우터 제품을 검색합니다.
- JCNR(BYOL) 상품을 선택하고 구독합니다.
- 선택한 제품의 랜딩 페이지에서 아래로 스크롤하여 사용 지침을 확인합니다.
지침은 ECR Helm 레지스트리에 로그인하고 클라우드 네이티브 라우터 Helm 차트를 다운로드하는 방법을 보여줍니다.
- AWS CLI 명령을 실행하는 설정에서 제공된 사용 지침을 복사하고 실행합니다.
aws configure aws ecr get-login-password <...> helm pull oci: <...>
그러면 jcnr-<version>.tgz 파일이 설정에 다운로드됩니다. - jcnr-<version>.tgz 파일을 펼치십시오.
tar xzvf jcnr-<version>.tgz
- directory를
jcnr
로 변경합니다.cd jcnr
메모:설치의 나머지 모든 단계에서는 현재 작업 디렉토리가 이제 jcnr이라고 가정합니다.
- 현재 디렉터리의 내용을 봅니다.
ls Chart.yaml charts cRPD_examples scripts secrets values.yaml
- 라이선스 설치의 단계에 따라 클라우드 네이티브 라우터 라이선스를 설치합니다.
- 호스트 서버의 루트 비밀번호를 다음 행의 secrets/jcnr-secrets.yaml 파일에 입력합니다.
root-password: <add your password in base64 format>
암호는 base64 인코딩 형식으로 입력해야 합니다. 다음과 같이 암호를 인코딩합니다.echo -n "password" | base64 -w0
- 클러스터에 secrets/jcnr-secrets.yaml 을 적용합니다.
kubectl apply -f secrets/jcnr-secrets.yaml namespace/jcnr created secret/jcnr-secrets created
- 클라우드 네이티브 라우터 클러스터에 VRRP(Virtual Router Redundancy Protocol)를 사용하는 경우 JCNR ConfigMap을 생성합니다. Kubernetes 시스템에 적용합니다
jcnr-aws-config.yaml
.kubectl apply -f jcnr-aws-config.yaml configmap/jcnr-aws-config created
- 원하는 경우 vRouter DPDK 컨테이너에 코어를 할당하는 방법을 구성합니다. 클라우드 네이티브 라우터 포워딩 플레인에 CPU 할당의 내용을 참조하십시오.
- values.yaml 파일을 사용하여 배포에 대한 helm 차트를 사용자 지정합니다.
Helm 차트 구성에 대한 설명과 EKS 배포를 위한 샘플 Helm 차트에 대한 설명은 Customize JCNR Helm Chart for EKS Deployment 를 참조하십시오.
- 필요에 따라 클라우드 네이티브 라우터 구성을 사용자 지정합니다.
cRPD 사용자 지정을 생성하고 적용하려면 클라우드 네이티브 라우터 구성 사용자 지정 을 참조하십시오.
- Amazon EBS CSI 드라이버 역할 정책이 EKS 클러스터 노드 역할에 연결되었는지 확인합니다.
aws iam list-attached-role-policies --role-name <EKS_Cluster_Node_Role_Name>
출력에서 을
arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy
찾습니다. 이 정책이 나열되지 않은 경우 다음과 같이 추가합니다.aws iam attach-role-policy --role-name <EKS_Cluster_Node_Role_Name> --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy
- Amazon VPC CNI 역할 정책이 EKS 클러스터 노드 역할에 연결되었는지 확인합니다.
aws iam list-attached-role-policies --role-name <EKS_Cluster_Node_Role-Name>
출력에서 을
arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
찾습니다. 이 정책이 나열되지 않은 경우 다음과 같이 추가합니다.aws iam attach-role-policy --role-name <EKS_Cluster_Node_Role_Name> --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
- Amazon EBS CSI 드라이버 및 Amazon VPC CNI 추가 기능이 설치되어 있는지 확인합니다.
aws eks describe-addon-versions --addon-name aws-ebs-csi-driver
aws eks describe-addon-versions --addon-name vpc-cni
추가 기능이 설치되지 않은 경우 다음과 같이 각각 설치할 수 있습니다.
aws eks create-addon --cluster-name my-cluster --addon-name aws-ebs-csi-driver --addon-version <version> --service-account-role-arn <EKS_Cluster_Node_IAM_role_ARN>
aws eks create-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version <version> --service-account-role-arn <EKS_Cluster_Node_IAM_role_ARN>
EKS에 대한 최소 호스트 시스템 요구 사항에 나열된 버전을 설치해야 합니다. - 구성에 따라 Cloud-Native Router를 설치할 노드에 레이블을
nodeaffinity
지정합니다(에values.yaml
정의된 경우). 예를 들어:kubectl label nodes ip-10.0.100.17.us-east-2.compute.internal key1=jcnr --overwrite
- helm 차트를 사용하여 주니퍼 클라우드 네이티브 라우터를 구축합니다.
다음 명령을 실행합니다.
helm install jcnr .
NAME: jcnr LAST DEPLOYED: <date_time> NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
- 주니퍼 클라우드 네이티브 라우터 구축을 확인합니다.
helm ls
샘플 출력:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION jcnr default 1 <date_time> deployed jcnr-<version> <version>
Amazon EKS에서 클라우드 네이티브 라우터 설치 확인
이 예제 절차에 표시된 출력은 클러스터의 노드 수에 영향을 받습니다. 설정에 표시되는 출력은 이와 관련하여 다를 수 있습니다.
- 명령을 실행하여
kubectl get pods -A
클라우드 네이티브 라우터 Pod의 상태를 확인합니다. 명령의 출력에는kubectl
모든 네임스페이스의 Kubernetes 클러스터에 있는 모든 Pod가 표시됩니다. 성공적인 배포는 모든 Pod가 실행 중 상태임을 의미합니다. 이 예시에서는 주니퍼 클라우드 네이티브 라우터 포드를 굵게 표시했습니다. 예를 들어:kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE contrail-deploy contrail-k8s-deployer-5b6c9656d5-nw9t9 1/1 Running 0 13d contrail jcnr-0-dp-contrail-vrouter-nodes-b2jxp 2/2 Running 0 13d contrail jcnr-0-dp-contrail-vrouter-nodes-vrdpdk-g7wrk 1/1 Running 0 13d jcnr jcnr-0-crpd-0 1/1 Running 0 13d jcnr syslog-ng-tct27 1/1 Running 0 13d kube-system aws-node-k8hxl 1/1 Running 1 (15d ago) 15d kube-system ebs-csi-node-c8rbh 3/3 Running 3 (15d ago) 15d kube-system kube-multus-ds-8nzhs 1/1 Running 1 (13d ago) 13d kube-system kube-proxy-h669c 1/1 Running 1 (15d ago) 15d
- 명령을 실행하여 클라우드 네이티브 라우터 daemonsets를
kubectl get ds -A
확인합니다.kubectl get ds -A
명령을 사용하여 daemonset 목록을 가져옵니다. 클라우드 네이티브 라우터 데몬 세트는 굵은 텍스트로 강조 표시됩니다.kubectl get ds -A
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE contrail jcnr-0-dp-contrail-vrouter-nodes 1 1 1 1 1 <none> 13d contrail jcnr-0-dp-contrail-vrouter-nodes-vrdpdk 1 1 1 1 1 <none> 13d jcnr syslog-ng 1 1 1 1 1 <none> 13d kube-system aws-node 8 8 8 8 8 <none> 15d kube-system ebs-csi-node 8 8 8 8 8 kubernetes.io/os=linux 15d kube-system ebs-csi-node-windows 0 0 0 0 0 kubernetes.io/os=windows 15d kube-system kube-multus-ds 8 8 8 8 8 <none> 13d kube-system kube-proxy 8 8 8 8 8 <none> 15d
- 명령을 실행하여 클라우드 네이티브 라우터 스테이트풀셋을
kubectl get statefulsets -A
확인합니다. 명령 출력은 스테이트풀셋을 제공한다.kubectl get statefulsets -A
NAMESPACE NAME READY AGE jcnr jcnr-0-crpd 1/1 27m
- cRPD에 라이선스가 부여되고 적절한 구성이 있는지 확인합니다.
- cRPD CLI 액세스 지침은 cRPD CLI 액세스 섹션을 참조하십시오.
- cRPD CLI에 액세스한 후 cli 모드에서 명령을 실행하여
show system license
시스템 라이선스를 확인합니다. 예를 들어:root@jcnr-01:/# cli root@jcnr-01> show system license License usage: Licenses Licenses Licenses Expiry Feature name used installed needed containerized-rpd-standard 1 1 0 2024-09-20 16:59:00 PDT Licenses installed: License identifier: 85e5229f-0c64-0000-c10e4-a98c09ab34a1 License SKU: S-CRPD-10-A1-PF-5 License version: 1 Order Type: commercial Software Serial Number: 1000098711000-iHpgf Customer ID: Juniper Networks Inc. License count: 15000 Features: containerized-rpd-standard - Containerized routing protocol daemon with standard features date-based, 2022-08-21 17:00:00 PDT - 2027-09-20 16:59:00 PDT
show configuration | display set
cli 모드에서 명령을 실행하여 cRPD 기본 및 사용자 지정 구성을 확인합니다. 출력은 사용자 지정 구성 및 클라우드 네이티브 라우터 구축 모드를 기반으로 합니다.root@jcnr-01# cli root@jcnr-01> show configuration | display set
exit
명령을 입력하여 Pod 셸을 종료합니다.
- vRouter 인터페이스 구성을 확인합니다.
- vRouter CLI에 액세스하는 방법에 대한 지침은 vRouter CLI 액세스 섹션을 참조하십시오.
- vRouter CLI에 액세스한 후 명령을 실행하여
vif --list
vRouter 인터페이스를 확인합니다. 출력은 클라우드 네이티브 라우터 구축 모드 및 구성에 따라 달라집니다. 하나의 패브릭 인터페이스가 구성된 L3 모드 구축의 예는 다음과 같습니다.$ vif --list Vrouter Interface Table Flags: P=Policy, X=Cross Connect, S=Service Chain, Mr=Receive Mirror Mt=Transmit Mirror, Tc=Transmit Checksum Offload, L3=Layer 3, L2=Layer 2 D=DHCP, Vp=Vhost Physical, Pr=Promiscuous, Vnt=Native Vlan Tagged Mnp=No MAC Proxy, Dpdk=DPDK PMD Interface, Rfl=Receive Filtering Offload, Mon=Interface is Monitored Uuf=Unknown Unicast Flood, Vof=VLAN insert/strip offload, Df=Drop New Flows, L=MAC Learning Enabled Proxy=MAC Requests Proxied Always, Er=Etree Root, Mn=Mirror without Vlan Tag, HbsL=HBS Left Intf HbsR=HBS Right Intf, Ig=Igmp Trap Enabled, Ml=MAC-IP Learning Enabled, Me=Multicast Enabled vif0/0 Socket: unix MTU: 1514 Type:Agent HWaddr:00:00:5e:00:01:00 Vrf:65535 Flags:L2 QOS:-1 Ref:3 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 RX packets:0 bytes:0 errors:0 TX packets:0 bytes:0 errors:0 Drops:0 vif0/1 PCI: 0000:00:07.0 (Speed 1000, Duplex 1) NH: 6 MTU: 9000 Type:Physical HWaddr:0e:d0:2a:58:46:4f IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:0 Mcast Vrf:0 Flags:L3L2 QOS:0 Ref:8 RX device packets:20476 bytes:859992 errors:0 RX port packets:20476 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 Fabric Interface: 0000:00:07.0 Status: UP Driver: net_ena RX packets:20476 bytes:859992 errors:0 TX packets:2 bytes:180 errors:0 Drops:0 TX port packets:2 errors:0 TX device packets:8 bytes:740 errors:0 vif0/2 PCI: 0000:00:08.0 (Speed 1000, Duplex 1) NH: 7 MTU: 9000 Type:Physical HWaddr:0e:6a:9e:04:da:6f IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:0 Mcast Vrf:0 Flags:L3L2 QOS:0 Ref:8 RX device packets:20476 bytes:859992 errors:0 RX port packets:20476 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 Fabric Interface: 0000:00:08.0 Status: UP Driver: net_ena RX packets:20476 bytes:859992 errors:0 TX packets:2 bytes:180 errors:0 Drops:0 TX port packets:2 errors:0 TX device packets:8 bytes:740 errors:0 vif0/3 PMD: eth2 NH: 10 MTU: 9000 Type:Host HWaddr:0e:d0:2a:58:46:4f IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:0 Mcast Vrf:65535 Flags:L3L2DProxyEr QOS:-1 Ref:11 TxXVif:1 RX device packets:2 bytes:180 errors:0 RX queue packets:2 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 RX packets:2 bytes:180 errors:0 TX packets:20476 bytes:859992 errors:0 Drops:0 TX queue packets:20476 errors:0 TX device packets:20476 bytes:859992 errors:0 vif0/4 PMD: eth3 NH: 15 MTU: 9000 Type:Host HWaddr:0e:6a:9e:04:da:6f IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:0 Mcast Vrf:65535 Flags:L3L2DProxyEr QOS:-1 Ref:11 TxXVif:2 RX device packets:2 bytes:180 errors:0 RX queue packets:2 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 RX packets:2 bytes:180 errors:0 TX packets:20476 bytes:859992 errors:0 Drops:0 TX queue packets:20476 errors:0 TX device packets:20476 bytes:859992 errors:0
- 을 입력하여
exit
Pod 셸을 종료합니다.