주니퍼 클라우드 네이티브 라우터 설치
요약 JCNR(주니퍼 클라우드 네이티브 라우터)은 JCNR-Controller(cRPD 기반 컨트롤 플레인)와 JCNR-CNI를 사용하여 컨트롤 플레인 기능과 컨테이너 네트워크 인터페이스를 제공합니다. 주니퍼 클라우드 네이티브 라우터는 DPDK 지원 vRouter를 사용하여 고성능 데이터 플레인 기능을 제공하고 Syslog-NG로 알림 기능을 제공합니다. 이 섹션에서는 클라우드 네이티브 라우터의 이러한 구성 요소를 설치하는 방법에 대해 설명합니다.
JCNR-Controller(cRPD)는 클라우드 네이티브 라우터를 위한 컨트롤 플레인 기능을 제공하는 초기화 컨테이너입니다. 컨트롤 플레인은 주니퍼 클라우드 네이티브 라우터에서 사용되는 워크로드 및 패브릭 인터페이스의 프로비저닝을 담당합니다. 또한 gRPC 연결을 통해 vRouter-agent 및 vRouter 자체와의 통신을 관리합니다.
JCNR-CNI는 주니퍼 클라우드 네이티브 라우터가 설치 시 서버의 물리적 인터페이스와 통신하는 데 사용하는 컨테이너 네트워크 인터페이스입니다.
주니퍼 클라우드 네이티브 라우터 가상 라우터(vRouter)는 고급 포워딩 플레인 기능을 제공하는 컨테이너 애플리케이션 세트입니다. 물리적 라우터 및 스위치에서 가상화된 서버에서 호스팅되는 가상 오버레이 네트워크로 네트워크를 확장합니다. DPDK(Data Plane Development Kit)를 사용하면 vRouter가 커널 모듈로 실행되는 경우보다 초당 더 많은 패킷을 처리할 수 있습니다.
Syslog-NG는 주니퍼 클라우드 네이티브 라우터가 사용자에게 클라우드 네이티브 라우터 구축에서 발생하는 이벤트에 대한 알림을 제공할 수 있도록 해주는 컨테이너 애플리케이션입니다.
헬름 차트를 사용하여 주니퍼 클라우드 네이티브 라우터 설치
이 섹션을 읽고 클라우드 네이티브 라우터 이미지 구성 요소를 docker에 로드하고 Helm 차트를 사용하여 클라우드 네이티브 라우터 구성 요소를 설치하는 데 필요한 단계를 알아보십시오.
시스템 리소스 요구 사항에 언급된 바와 같이, Kubernetes를 위한 Helm 패키지 매니저는 주니퍼 클라우드 네이티브 라우터 구성 요소를 설치하기 전에 설치해야 합니다.
주니퍼는 패키지를 다운로드하여 소프트웨어를 설치해야 하는 특정 경로를 제공하지 않습니다. 이 때문에 이 문서의 전체에서 보여진 명령을 복사하여 서버 CLI에 붙여넣을 수 있습니다.
주니퍼 클라우드 네이티브 라우터 설치에 대한 개략적인 개요는 다음과 같습니다.
위에 나열된 각 개개 절차는 아래에 자세히 설명되어 있습니다.
- Juniper_Cloud_Native_Router_22.2.tgz의 타볼을 선택한 디렉토리로 다운로드하십시오.
서버에서 쓰기 가능한 디렉토리로 타볼을 얻는 방법은 여러분에게 달려 있습니다. 압축된 tar 파일이 제대로 확장될 수 있도록 바이너리 모드에서 파일 전송을 수행해야 합니다.
- 파일을
Juniper_Cloud_Native_Router_22.2.tgz
확장합니다.tar xzvf Juniper_Cloud_Native_Router_22.2.tgz
Juniper_Cloud_Native_Router_22.2/ Juniper_Cloud_Native_Router_22.2/secrets/ Juniper_Cloud_Native_Router_22.2/secrets/jcnr-secrets.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/Chart.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/values.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-vrouter/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-vrouter/.helmignore Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-vrouter/Chart.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-vrouter/templates/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-vrouter/templates/_helpers.tpl Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-vrouter/templates/jcnrvrouter_cleanup.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-vrouter/templates/vrouter.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-vrouter/values.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-vrouter/README.md Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/syslog-ng/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/syslog-ng/.helmignore Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/syslog-ng/Chart.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/syslog-ng/files/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/syslog-ng/files/syslog-ng.conf Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/syslog-ng/templates/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/syslog-ng/templates/_helpers.tpl Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/syslog-ng/templates/syslog.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/syslog-ng/templates/syslog-config.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/syslog-ng/values.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/.helmignore Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/Chart.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/files/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/files/jcnr-cni-config.tmpl Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/templates/ Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/templates/_helpers.tpl Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/templates/jcnr-config.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/templates/jcnr_cleanup.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/templates/jcnr.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/templates/jcnr-nad.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/values.yaml Juniper_Cloud_Native_Router_22.2/helm_charts/jcnr/charts/jcnr-cni/README.md Juniper_Cloud_Native_Router_22.2/contrail-tools/ Juniper_Cloud_Native_Router_22.2/contrail-tools/contrail-tools.yaml Juniper_Cloud_Native_Router_22.2/images/ Juniper_Cloud_Native_Router_22.2/images/jcnr-cni-images.tar.gz Juniper_Cloud_Native_Router_22.2/images/jcnr-vrouter-images.tar.gz Juniper_Cloud_Native_Router_22.2/images/syslog-ng-images.tar.gz Juniper_Cloud_Native_Router_22.2/README.md
- 디렉토리를 Juniper_Cloud_Native_Router_22.2로 변경
cd Juniper_Cloud_Native_Router_22.2
참고:설치의 나머지 모든 단계는 현재 작업 디렉토리가 Juniper_Cloud_Native_Router_22.2라고 가정합니다.
- 이미지 파일,
jcnr-cni-images.tar.gz
jcnr-vrouter-images.tar.gz, syslog-ng-images.tar.gz를 docker에 로드합니다. 이미지 파일은 이전 단계에서 타볼을 확장한 위치와 관련된 Juniper_Cloud_Native_Router_22.2/이미지 디렉토리에 있습니다.docker load -i images/jcnr-cni-images.tar.gz
94c4181ae7dd: Loading layer [==================================================>] 524.2MB/524.2MB Loaded image: svl-artifactory.juniper.net/junos-docker-local/warthog/crpd:22.2R1-S1.5 86441b6792e3: Loading layer [==================================================>] 160.3kB/160.3kB 2f858df19dda: Loading layer [==================================================>] 26.74MB/26.74MB dc5b9d2f0f0a: Loading layer [==================================================>] 7.68kB/7.68kB Loaded image: svl-artifactory.juniper.net/junos-docker-local/warthog/jcnr-cni:20220810-f753972 67e3ffed6327: Loading layer [==================================================>] 11.26kB/11.26kB Loaded image: svl-artifactory.juniper.net/junos-docker-local/warthog/crpdconfig-generator:v3 Loaded image: svl-artifactory.juniper.net/atom_virtual_docker/busybox:latest
docker load -i images/jcnr-vrouter-images.tar.gz
50244b5caf0a: Loading layer [==================================================>] 3.584kB/3.584kB 4793f35d3ae7: Loading layer [==================================================>] 5.632kB/5.632kB f1697a784d3d: Loading layer [==================================================>] 3.584kB/3.584kB 9d6c27fd1364: Loading layer [==================================================>] 28.79MB/28.79MB 877da3dd69a5: Loading layer [==================================================>] 11.26kB/11.26kB f3519070976e: Loading layer [==================================================>] 1.396MB/1.396MB 145f8619ed40: Loading layer [==================================================>] 183.5MB/183.5MB d4fe4ae73ff1: Loading layer [==================================================>] 6.812MB/6.812MB 9a9e214f9045: Loading layer [==================================================>] 2.467MB/2.467MB 2c026bac5448: Loading layer [==================================================>] 41.59MB/41.59MB 8f873ca42faf: Loading layer [==================================================>] 40.13MB/40.13MB b6e9fea633a7: Loading layer [==================================================>] 72.19kB/72.19kB 19234c4cbb31: Loading layer [==================================================>] 498.2kB/498.2kB f9c52ee9be26: Loading layer [==================================================>] 18.66MB/18.66MB Loaded image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/contrail-vrouter-agent:JCNR-22.2-20 8d7366c22fd8: Loading layer [==================================================>] 3.697MB/3.697MB a93413564615: Loading layer [==================================================>] 18.29MB/18.29MB 415be476c298: Loading layer [==================================================>] 1.352MB/1.352MB e83d4114481d: Loading layer [==================================================>] 2.365MB/2.365MB 623e9ce88f39: Loading layer [==================================================>] 2.81MB/2.81MB f4e7db2826f6: Loading layer [==================================================>] 54.39MB/54.39MB Loaded image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/contrail-vrouter-kernel-init-dpdk:JCNR-22.2-20 4aa40b94fdb4: Loading layer [==================================================>] 5.632kB/5.632kB 2079da3dd3ea: Loading layer [==================================================>] 250.6MB/250.6MB 5f6b6a83bbc2: Loading layer [==================================================>] 22.02kB/22.02kB 3c479d39cdd2: Loading layer [==================================================>] 13.82kB/13.82kB a8e86ba6a002: Loading layer [==================================================>] 9.216kB/9.216kB ce903f8e71cc: Loading layer [==================================================>] 25.03MB/25.03MB 8b94a98d6508: Loading layer [==================================================>] 372.5MB/372.5MB Loaded image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/contrail-tools:JCNR-22.2-20 Loaded image: svl-artifactory.juniper.net/atom_virtual_docker/busybox:latest Loaded image: svl-artifactory.juniper.net/junos-docker-local/warthog/busybox:latest Loaded image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/contrail-telemetry-exporter:JCNR-22.2-20 cfd97936a580: Loading layer [==================================================>] 1.455MB/1.455MB Loaded image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/busybox:latest 1e7fbcfd6526: Loading layer [==================================================>] 6.144kB/6.144kB 1b2e64d61760: Loading layer [==================================================>] 182.2MB/182.2MB c58c4d0e394a: Loading layer [==================================================>] 68.61kB/68.61kB ae3bac1d08f4: Loading layer [==================================================>] 4.608kB/4.608kB 173cf86d714f: Loading layer [==================================================>] 720.9kB/720.9kB 7c5fc69220bb: Loading layer [==================================================>] 4.608kB/4.608kB fc23189a25c0: Loading layer [==================================================>] 4.608kB/4.608kB 9e4ba1a88748: Loading layer [==================================================>] 44.09MB/44.09MB 999a87d50c2c: Loading layer [==================================================>] 54.22MB/54.22MB b7247dc2bdc4: Loading layer [==================================================>] 478.7kB/478.7kB Loaded image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/contrail-vrouter-dpdk:JCNR-22.2-20 e94ef981fc21: Loading layer [==================================================>] 63.51MB/63.51MB Loaded image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/contrail-k8s-crdloader:JCNR-22.2-20 Loaded image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/contrail-k8s-applier:JCNR-22.2-20 a5af639475d7: Loading layer [==================================================>] 59.58MB/59.58MB Loaded image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/contrail-k8s-deployer:JCNR-22.2-20 da2cd5786adc: Loading layer [==================================================>] 62.68MB/62.68MB Loaded image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/contrail-init:JCNR-22.2-20
docker load -i images/syslog-ng-images.tar.gz
Loaded image: svl-artifactory.juniper.net/contrail-docker/syslog-ng:v6
- 호스트 서버와 주니퍼 클라우드 네이티브 라우터 라이선스 파일의 루트 암호를 암호/jcnr-secrets.yaml 파일에 입력합니다.
기본64 인코드 형식으로 암호와 라이선스를 입력해야 합니다.암호를 인코딩하려면 한 줄에 일반 텍스트 암호만 있는 파일을 만듭니다. 그런 다음 다음 명령을 실행합니다.
base64 rootPasswordFile
출력은 다음과 유사한 임의의 텍스트의 단일 줄입니다.UGFzc3cwcmQhCg==
라이선스 파일을 인코딩하려면 호스트 서버에 파일을 복사하여 다음과 같은 명령을 실행base64 licenseFile
출력은 다음과 유사한 임의로 보이는 텍스트의 긴 단일 줄입니다.VGhpcyBpcyBhIHJlYWxseSBtdWNoIGxvbmdlciB0ZXh0IGZpbGUgdGhhdCBpbmNsdWRlcyBsaWNlbnNlIGluZm9ybWF0aW9uCkFTREZERktERktIQUxHS0hiYW9qa2hkZmFzZGZOS0FTREdOR0FKYWRzZmxodmFibmRzZmdramh2Ym5ramFzZnVxYmF1amgyMDEwdGIydDQweGtqYjR3eTB1dmRxd3J2MGl3aGV0Ymd1YnMwcWRqZmhkc2tqdmJkc2ZramhkdmFkZnNiO2d2a2pzZGI7aWRzamc7ZmFzZGhma2pkc2J2YWlzdWRmZ3dFWUlUR1ZCMzlWRVlCVjM0OVVHQlZHQlFVOUFXR1ZJQkVSV0c5VUJWV0U5Rwo=
참고:계정 팀에서 라이선스 파일을 얻고 위에서 지시한 대로 secrets.yaml 파일에 설치해야 합니다. 적절한 base64 인코딩된 라이선스 파일과 루트 암호가 secrets.yaml 파일에 없으면 cRPD Pod는 Running 상태를 입력하지 않지만 CrashLoopBackOff 상태로 유지됩니다.
base64 출력을 복사하여 적절한 위치에 있는 secrets/jcnr-secrets.yaml 파일에 붙여넣어야 합니다. - K8s 시스템에 암호/jcnr-secrets.yaml을 적용합니다.
kubectl apply -f secrets/jcnr-secrets.yaml
- helm_charts/jcnr/values.yaml 파일을 편집합니다.
주니퍼 클라우드 네이티브 라우터 설치를 위해 Helm 차트를 커스터마이징해야 합니다.
-
패브릭 인터페이스 선택–호스트 시스템의 인터페이스 이름 사용
-
트렁크 인터페이스를 위한 VLAN ID 목록 만들기–네트워크에 맞는 VLAN ID 사용
-
패브릭 워크로드 인터페이스 선택 호스트 시스템에서 인터페이스 이름 사용
-
워크로드 인터페이스의 트래픽에 대한 VLAN id 설정
-
JCNR-vRouter 로깅의 심각도 수준 설정
참고:JTAC에 의해 변경하라는 지시가 없는 한 log_level INFO로 설정합니다.
-
cpu 코어 마스크(물리적 코어, 논리적 코어) 설정
-
패브릭 인터페이스를 선택합니다. 호스트 시스템에서 인터페이스 이름 사용
-
워크로드 인터페이스 선택 –호스트 시스템의 인터페이스 이름 사용
-
브로드캐스트 및 멀티캐스트 트래픽에 대한 속도 제한을 초당 바이트 단위로 설정합니다.
-
syslog-ng를 위한 쓰기 가능한 디렉토리 위치를 설정하여 알림을 저장합니다.
-
(선택사항) 본드 인터페이스를 본드 인터페이스로 지정하면 섹션에서 시스템에서
bondInterfaceConfigs:
이름을 지정slaveInterface
합니다fabricInterface:
. -
기본적으로
restoreInterface
false로 설정됩니다. vrouter pod가 충돌하거나 삭제되면 이 설정에서 인터페이스가 호스트로 복원되지 않습니다.
기본 helm_charts/jcnr/values.yaml 파일의 주석 예제는 샘플 구성 파일을 참조하십시오.
-
- Helm을 사용하여 주니퍼 클라우드 네이티브 라우터 구축
helm install jcnr .
NAME: jcnr LAST DEPLOYED: Mon Aug 15 14:29:41 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
- 주니퍼 클라우드 네이티브 라우터 구축 확인
helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION jcnr default 1 2022-08-17 18:51:18.472130634 -0700 PDT deployed jcnr-22.2.0 22.2.0
컨테이너 작동 확인
kubectl get pods -A
명령의kubectl
출력은 모든 네임스페이스에 있는 K8s 클러스터의 모든 포드를 보여줍니다. 성공적인 구축은 모든 포드가 실행 중인 상태를 표시한다는 것을 의미합니다. 이 예에서는 주니퍼 클라우드 네이티브 라우터 Pod를 굵게 표시했습니다. 예를 들어:kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE contrail-deploy contrail-k8s-deployer-7b5dd699b9-nd7xf 1/1 Running 0 41m contrail contrail-vrouter-masters-dfxgm 3/3 Running 0 41m default delete-crpd-dirs--1-6jmxz 0/1 Completed 0 43m default delete-vrouter-dirs--1-645dt 0/1 Completed 0 43m kube-system calico-kube-controllers-57b9767bdb-5wbj6 1/1 Running 2 (92d ago) 129d kube-system calico-node-j4m5b 1/1 Running 2 (92d ago) 129d kube-system coredns-8474476ff8-fpw78 1/1 Running 2 (92d ago) 129d kube-system dns-autoscaler-7f76f4dd6-q5vdp 1/1 Running 2 (92d ago) 129d kube-system kube-apiserver-5a5s5-node2 1/1 Running 3 (92d ago) 129d kube-system kube-controller-manager-5a5s5-node2 1/1 Running 4 (92d ago) 129d kube-system kube-crpd-worker-ds-8tnf7 1/1 Running 0 41m kube-system kube-multus-ds-amd64-4zm5k 1/1 Running 2 (92d ago) 129d kube-system kube-proxy-l6xm8 1/1 Running 2 (92d ago) 129d kube-system kube-scheduler-5a5s5-node2 1/1 Running 4 (92d ago) 129d kube-system nodelocaldns-6kwg5 1/1 Running 2 (92d ago) 129d kube-system syslog-ng-54749b7b77-v24hq 1/1 Running 0 41m
kubectl get ds -A
kubectl get ds -A 명령을 사용하여 데몬셋 컨테이너 목록을 만듭니다.kubectl get ds -A
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE contrail contrail-vrouter-masters 1 1 1 1 1 node-role.kubernetes.io/master= 43m kube-system calico-node 1 1 1 1 1 kubernetes.io/os=linux 129d kube-system kube-crpd-worker-ds 1 1 1 1 1 <none> 43m kube-system kube-multus-ds-amd64 1 1 1 1 1 kubernetes.io/arch=amd64 129d kube-system kube-proxy 1 1 1 1 1 kubernetes.io/os=linux 129d kube-system nodelocaldns 1 1 1 1 1 kubernetes.io/os=linux 129d