3.2.12. 라우터 공유 공간 사용
라우터 분할 에서는 NAMESPACE_LABELS
및 ROUTE_LABELS
를 사용하여 라우터 네임스페이스와 경로를 필터링합니다. 이를 통해 경로의 하위 집합을 여러 라우터 배포에 배포할 수 있습니다. 오버레이되지 않은 하위 집합을 사용하면 경로 집합을 효과적으로 분할할 수 있습니다. 또는 겹치는 경로 하위 집합으로 구성된 shard를 정의할 수 있습니다.
기본적으로 라우터는 모든 프로젝트(네임스페이스) 에서 모든 경로를 선택합니다. 분할에는 경로 또는 네임스페이스에 레이블을 추가하고 라우터에 라벨 선택기를 추가합니다. 각 라우터 shard는 특정 레이블 선택기 집합에서 선택한 경로로 구성되거나 특정 레이블 선택기 세트에서 선택한 네임스페이스에 속합니다.
라우터 서비스 계정에는 다른 네임스페이스의 라벨에 액세스할 수 있도록 [클러스터 리더
] 권한이 설정되어 있어야 합니다.
라우터 공유 및 DNS
요청을 원하는 shard로 라우팅하려면 외부 DNS 서버가 필요하므로 관리자는 프로젝트의 각 라우터에 대해 별도의 DNS 항목을 만들어야 합니다. 라우터는 알 수 없는 경로를 다른 라우터로 전달하지 않습니다.
다음 예제를 고려하십시오.
-
라우터 A는 호스트 192.168.0.5에 있으며
*.foo.com
이 있는 경로가 있습니다. -
라우터 B는 호스트 192.168.1.9에 있으며
*.example.com
이 있는 경로가 있습니다.
별도의 DNS 항목은 *.foo.com을 라우터 A를 호스팅하는 노드로 확인하고 *.example.com을 라우터 B를 호스팅하는 노드로 확인해야 합니다.
-
*.foo.com A IN 192.168.0.5
-
*.example.com A IN 192.168.1.9
라우터 공유 예
이 섹션에서는 네임스페이스 및 경로 레이블을 사용하여 라우터 분할에 대해 설명합니다.
그림 3.1. 네임 스페이스 레이블 기반 라우터 공유
네임스페이스 라벨 선택기를 사용하여 라우터를 구성합니다.
$ oc set env dc/router NAMESPACE_LABELS="router=r1"
라우터에는 네임스페이스에 선택기가 있으므로 라우터는 일치하는 네임스페이스에 대해서만 경로를 처리합니다. 이 선택기가 네임스페이스와 일치하도록 하려면 그에 따라 네임스페이스에 라벨을 지정합니다.
$ oc label namespace default "router=r1"
이제 default 네임스페이스에 경로를 생성하는 경우 기본 라우터에서 경로를 사용할 수 있습니다.
$ oc create -f route1.yaml
새 프로젝트(namespace)를 생성하고 경로를 만듭니다.
route2
:$ oc new-project p1 $ oc create -f route2.yaml
라우터에서 경로를 사용할 수 없습니다.
router=r
1을 사용하여 네임스페이스 p1
에 레이블을 지정합니다.$ oc label namespace p1 "router=r1"
이 레이블을 추가하면 라우터에서 경로를 사용할 수 있습니다.
- 예제
라우터 배포 pin
ops-router
는 레이블 선택기NAMESPACE_LABELS="name in (finance, ops)"으로
구성되고 라우터 배포dev-router
는 레이블 선택기NAMESPACE_LABELS="name=dev"
로 구성됩니다.모든 경로가
name=finance, name=
ops,
라는 레이블이 지정된 네임스페이스에 있는 경우 이 구성은 두 라우터 배포 간에 경로를 효과적으로 배포합니다.name=
dev위의 시나리오에서 분할은 중복되는 하위 집합이 없는 파티션의 특별한 사례가 됩니다. 경로는 라우터 shard 간에 나뉩니다.
경로 선택 기준은 경로 배포 방법을 결정합니다. 라우터 배포에서 경로의 중복된 하위 집합을 가질 수 있습니다.
- 예제
위의 예에 있는
pinops
외에도 라벨 선택기-router
및 dev-routerNAMESPACE_LABELS="name (dev, ops)"
으로 구성된devops-router
도 있습니다.name=dev 또는
레이블이 지정된 네임스페이스의 경로는 이제 두 개의 서로 다른 라우터 배포에서 서비스를 제공합니다. 이 경우에는 네임스페이스 레이블을 기반으로 라우터 공유를 기반으로 하는 절차에 설명된 대로 경로의 중복된 하위 집합을 정의한 사례가 됩니다.name=
ops또한 더 복잡한 라우팅 규칙을 만들 수 있으므로 우선 순위가 더 높은 트래픽이 전용 conf
ops-router
로 전환할 수 있으며 우선 순위가 낮은 트래픽을devops-router
로 보낼 수 있습니다.
경로 레이블을 기반으로 하는 라우터 공유
NAMESPACE_LABELS
를 사용하면 프로젝트를 서비스하고 해당 프로젝트에서 모든 경로를 선택할 수 있지만 경로 자체와 연결된 다른 기준에 따라 경로를 분할할 수 있습니다. ROUTE_LABELS
선택기를 사용하면 경로 자체를 슬라이스 앤 드롭할 수 있습니다.
- 예제
라우터 배포
prod-router
는 레이블 선택기ROUTE_LABELS="mydeployment=prod"
로 구성되고 라우터 배포devtest-router
는 레이블 선택기ROUTE_LABELS="mydeployment in (dev, test)"
로 구성됩니다.이 구성 파티션은 네임스페이스와 관계없이 경로의 레이블에 따라 두 라우터 배포 간에 라우팅됩니다.
이 예제에서는 서비스할 모든 경로에
"mydeployment=<tag>"
라는 레이블이 지정되어 있다고 가정합니다.
3.2.12.1. 라우터 공유 파일 생성
이 섹션에서는 라우터 분할의 고급 예를 설명합니다. 다양한 라벨이 있는 26개의 경로(이름: )
가 있다고 가정합니다.
경로에 가능한 레이블
sla=high geo=east hw=modest dept=finance sla=medium geo=west hw=strong dept=dev sla=low dept=ops
이러한 레이블은 서비스 수준 계약, 지리적 위치, 하드웨어 요구 사항, 부서 등의 개념을 나타냅니다. 경로에는 각 열에서 최대 하나의 레이블이 있을 수 있습니다. 일부 경로에는 다른 레이블이 있거나 레이블이 전혀 없을 수 있습니다.
이름 | SLA | geo | HW | Dept | 기타 레이블 |
---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
| ||
|
|
|
| ||
|
|
|
| ||
|
|
|
| ||
|
|
|
다음은 oc adm router, oc
shard를 만드는 방법을 보여주는 모바일 스크립트 mkshard 입니다.
set env
및 oc scale
을 함께 사용하여 라우터
#!/bin/bash # Usage: mkshard ID SELECTION-EXPRESSION id=$1 sel="$2" router=router-shard-$id 1 oc adm router $router --replicas=0 2 dc=dc/router-shard-$id 3 oc set env $dc ROUTE_LABELS="$sel" 4 oc scale $dc --replicas=3 5
mkshard 를 여러 번 실행하면 여러 라우터가 생성됩니다.
라우터 | 선택 표현식 | 라우트 |
---|---|---|
|
|
|
|
|
|
|
|
|