정적 경로
요약 Juniper 클라우드 네이티브 Contrail Networking(CN2) 릴리스 23.1은 클러스터에 대한 정적 경로를 지원합니다. 이 문서에서는 CN2 클러스터에 대한 정적 경로를 구성하는 방법에 대한 정보를 제공합니다.
정적 경로 이해하기
네트워크에 동적 라우팅 프로토콜의 복잡성이 필요하지 않은 경우 정적 경로를 사용할 수 있습니다. 라우팅 및 포워딩 테이블의 영구적인 비품인 경로는 종종 정적 경로로 구성됩니다. 스텁 네트워크의 내부 트래픽은 정적 경로의 이점을 누릴 수 있습니다.
경로는 대상 접두사와 다음 홉 포워딩 주소로 구성됩니다. 고정 경로는 라우팅 테이블 활성화되고 다음 홉 주소에 도달할 수 있을 때 포워딩 테이블 삽입됩니다. 정적 경로와 일치하는 트래픽은 지정된 다음 홉 주소로 전달됩니다.
CN2의 정적 경로
CN2는 다음 두 개의 사용자 지정 리소스(RS)를 통해 정적 경로를 구현합니다.RouteTable
: 다음 홉 트래픽을 식별하기 위해 대상 접두사와 함께 사용자 정의 다음 홉 대상(nextHop
)을 포함합니다. IP 주소는nextHop
다른 VMI 개체의 IP 주소여야 합니다. 접두사에서는 트래픽 일치를 위한 다음 홉 역할을 하는 대상 네트워크를 정의합니다. A를RouteTable
사용하면 정적 경로를 정의할 수 있습니다. 가상 네트워크(VN)와 연결할RouteTable
수 있습니다. 다음은 CR의 예입니다RouteTable
.apiVersion: core.contrail.juniper.net/v3 kind: RouteTable metadata: name: static-rt namespace: static-route spec: routes: route: - nextHop: 10.20.30.2 nextHopType: ip-address prefix: 10.20.30.0/24 communityAttributes: communityAttribute: - accept-own - no-advertise
nextHopType
값ip-address
이 있어야 합니다. 다른 값이 있으면 사용자 입력 오류가 발생합니다.communityAttributes
필드는 BGP를 통해 경로 학습을 제어할 수 있도록 해줍니다.InterfaceRouteTable
: 은InterfaceRouteTable
(는) 가상 머신 인터페이스(VMI)에 대한 정적 라우팅을 구성합니다.InterfaceRouteTable
은(는) 다음 홉 항목 없이 대상 접두사 포함. 와RouteTable
마찬가지로 접두사에서는 대상 네트워크 또는 다음 홉을 정의합니다.RouteTable
와 달리, VMI와 연결할InterfaceRouteTable
때 연결된 VMI가 이 접두사의 다음 홉으로 작동하기 때문에 IP 주소를 정의nextHop
할 필요가 없습니다.다음은 CR의 예입니다
InterfaceRouteTable
.apiVersion: core.contrail.juniper.net/v3 kind: InterfaceRouteTable metadata: name: static-rt namespace: static-route spec: interfaceRouteTableRoutes: route: - nextHopType: ip-address prefix: 10.20.30.0/24 communityAttributes: communityAttribute: - accept-own
nextHopType
값ip-address
이 있어야 합니다. 다른 값이 있으면 사용자 입력 오류가 발생합니다.
가상 네트워크를 위한 정적 경로 구성
VN에RouteTable
정적 경로를 적용하도록 CR을 구성합니다. VN은 사양에서 을
RouteTable
(를) 참조합니다. 결과적으로, 은(
RouteTable
는) 해당 VN과 연결되고 정적 경로가 구성됩니다. 다음은 연결된
RouteTable
apiVersion: core.contrail.juniper.net/v3 kind: VirtualNetwork metadata: namespace: static-route name: vn-route spec: v4SubnetReference: apiVersion: core.contrail.juniper.net/v1 kind: Subnet namespace: static-route name: vn-subnet routeTableReferences: - apiVersion: core.contrail.juniper.net/v3 kind: RouteTable namespace: static-route name: static-rt
VMI에 대한 정적 경로 구성
을InterfaceRouteTable
구성하여 VMI에 정적 경로를 적용합니다. VMI는 섹션 내의
InterfaceRouteTableReference
을(를) 참조합니다
InterfaceRouteTable
. 다음은 을(를) 참조하는 VMI 객체입니다
InterfaceRouteTable
apiVersion: v3 kind: VirtualMachineInterface metadata: name: static-route-pod namespace: static-route annotations: core.juniper.net/interface-route-table: '[{"name": "static-rt", "namespace": "static-route"}]' spec: <VMI_SPEC> status: interfaceRouteTableReferences: - apiVersion: core.contrail.juniper.net/v3 kind: InterfaceRouteTable namespace: static-route name: static-rt
Pod 인터페이스에서 정적 경로 구성
포드 매니페스트의 주석 섹션을 사용하여 포드의 기본 또는 보조 인터페이스에 대한 정적 경로를 구성할 수 있습니다. pod 조정자는 주석 섹션을 처리하여 연결된 을(를) 가진 VMI 개체를 만듭니다InterfaceRouteTable
. 화해자는 주석 섹션에서 문자열 키를 "core.juniper.net/interface-route-table"을 찾습니다. pod의 VMI는 이 문자열을 메타데이터 레이블로 사용하여 와(과) 연결합니다
InterfaceRouteTable
.
다음은 기본 인터페이스에 대해 정의된 포드 매니페스트 InterfaceRouteTable
의 예입니다.
apiVersion: v1 kind: Pod metadata: name: static-route-pod namespace: static-route annotations: core.juniper.net/interface-route-table: '[{"name": "vmi-rt", "namespace": "static-route"}]' spec: containers: - name: praqma image: <image-repository>:<tag> imagePullPolicy: Always securityContext: capabilities: add: - NET_ADMIN privileged: true
InterfaceRouteTable
의 예입니다.
apiVersion: v1 kind: Pod metadata: name: static-route-pod namespace: static-route annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "vn-route", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "[{\"name\": \"vmi-rt\", \"namespace\": "static-route\"}]" } } ] spec: containers: - name: praqma image: <image-repository>:<tag> imagePullPolicy: Always securityContext: capabilities: add: - NET_ADMIN privileged: true
name
기본 인터페이스의 경우 은(는) 이며
vmi-rt
name
, 2차 인터페이스
InterfaceRouteTable
의 경우 입니다
vn-route
. 동일한
namespace
에서 다른
names
2
InterfaceRouteTables
개를 정의하면 해당 포드의 기본 및 2차 인터페이스에 대한 이(가) 자동으로 생성됩니다
InterfaceRouteTable
.
NAD를 사용하여 가상 네트워크에 대한 정적 경로 구성
또한 네트워크 첨부 정의(NAD) 개체에서 정적 경로 속성을 지정할 수 있습니다. NAD가 조정되거나 적용된 후,RouteTable
은(는) 생성되고 결과 VN 개체는
RouteTable
을(를) 참조합니다. 다음은 정적 경로 정보가 정의된
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: vn-route namespace: static-route labels: vn: vn-route annotations: juniper.net/networks: '{ "ipamV4Subnet": "108.108.2.0/24" "routeTableReferences": '[{"name": "vn-rt", "namespace": "static-route"}]' }' spec: config: '{ "cniVersion": "0.3.1", "name": "vn-route", "type": "contrail-k8s-cni" }'
Pod 인터페이스의 여러 정적 경로
를 사용하면 InterfaceRouteTable,
여러 정적 경로를 단일 포드 인터페이스(VMI)에 연결할 수 있습니다. 즉, VMI 개체에는 IP 접두사에 따라 여러 개의 기본 다음 홉 목적지가 있습니다. 클러스터 서비스 버전(CSV) 구문 또는 JSON 구문을 annotations
사용하여 여러 InterfaceRouteTable
참조를 지정할 수 있습니다.
"네임스페이 InterfaceRouteTable
스/이름" 형식으로 을(를) 참조해야 합니다. 다음 예 static-route
시에서 은(는) 네임스페이스이며 to-right
to-zone-1
, 은(는) VMI의 InterfaceRouteTable
left-vn
객체 또는 다음 홉 대상입니다.
다음 예는 여러 InterfaceRouteTable
참조를 Deployment
갖는 것입니다.
apiVersion: apps/v1 kind: Deployment metadata: name: forwarder namespace: static-route labels: app: forwarder spec: replicas: 3 selector: matchLabels: app: forwarder template: metadata: labels: app: forwarder annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "left-vn", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "static-route/to-right,static-route/to-zone-1" } }, { "name": "right-vn", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "static-route/to-left" } }, { "name": "zone-1", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "static-route/to-left" } }, { "name": "zone-2", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "static-route/to-left" } } ] spec: containers: - name: praqma image: <repository>:<tag> securityContext: capabilities: add: - NET_ADMIN privileged: true
다음 예는 JSON 구문을 사용하여 여러 InterfaceRouteTable
참조가 있는 포드 매니페스트입니다.
apiVersion: v1 kind: Pod metadata: name: irt-right namespace: static-route annotations: k8s.v1.cni.cncf.io/networks: | [{ "name": "right-vn", "namespace": "static-route", "cni-args": { "core.juniper.net/interface-route-table": "[{\"namespace\": \"static-route\", "\name\": \"to-left\"}, {\"namespace\": \"static-route\", \"name\": \"to-zone-1\"}]" } }] spec: containers: - name: praqma image: <image-repository>:<tag> securityContext: capabilities: add: - NET_ADMIN privileged: true
JSON 구문에서 역 슬래시를 사용해야 합니다. 다른 JSON 문자열 안에 JSON 문자열을 인코딩하려면 역 슬래시가 필요합니다.
RouteTable 및 InterfaceRouteTable 문제 해결
다음 섹션에는 다양한 RouteTable
문제 및 문제를 해결할 때 유용한 명령이 포함되어 있습니다 InterfaceRouteTable
.
구성 플레인 검증
-
및
InterfaceRouteTable
객체의RouteTable
상태를 확인합니다.-
개체에 대한
InterfaceRouteTable
조정자의 상태를 확인합니다.kubectl get interfaceroutetable -n
-
개체에 대한
RouteTable
조정자의 상태를 확인합니다.kubectl get routetable -n
-
-
RouteTable
연결된 VN에서 참조를 확인합니다.InterfaceRouteTable
연결된 VMI에서 참조를 확인합니다.-
VMI에 대한 조정자의 상태를 확인합니다. 연결된 UUID(universally unique identifier)가 있는 VMI에서 Contrail FQ(,
namespace
kind
name
) 이름과 같은apiversion
메타 정보를 볼InterfaceRouteTable
수 있습니다.kubectl get vmi -n -oyaml | grep -i interfaceRouteTable
kubectl get vn -n -oyaml | grep -i routeTable
-
데이터플레인 검증
-
내성에서 VN의 VRF가 다음 단계를 사용하여 RT에 지정된 일치하는 정적 경로 접두사를 가진 행을 보여주는지 확인합니다.
-
VRF가 VN과 연결되어 있는지 확인합니다.
-
VRF 유니캐스트
RouteTable
의 ucindex 열로 이동합니다. -
테이블에 올바른 정적 경로 접두사를 가진 행이 포함되어 있는지 확인합니다.
-
- 내성에서 VN의 다음 홉 속성이 유효한지 확인합니다. 내성에서 접두사의 다음 홉 열에는 다음이 포함되어야 합니다.
-
다음 홉 인터페이스 이름은 유효한 탭 인터페이스여야 합니다.
-
은
label
(는) 양의 정수여야 합니다. -
값은
resolved
이어야true
합니다. -
값은
route-type:
이어야InterfaceStaticRoute
합니다.
-