작업자 노드에 정적 라우트 추가
IBM Cloud® Kubernetes Service 클러스터에 대한 정적 라우트 추가 기능을 사용으로 설정하여 작업자 노드에서 정적 라우트를 작성합니다.
정적 라우트 정보
사설 네트워크를 통해 다른 네트워크와 통신하도록 클러스터 네트워크를 구성할 때, 작업자 노드에 사용자 정의 정적 라우트를 추가해야 할 수 있습니다. 정적 라우트는 작업자 노드가 VPN 또는 게이트웨이 어플라이언스를 통해 클러스터의 응답 패킷을 온프레미스 데이터 센터에 있는 IP 주소로 다시 라우팅할 수 있게 해 줍니다.
예를 들면, VPN을 사용하여 사설 네트워크를 통해 클러스터를 온프레미스 데이터 센터에 연결할 수 있습니다. 또한, 사설 VPN 연결은 클러스터와 데이터 센터 간 요청의 IP 주소를 유지합니다.
온프레미스 서비스가 클러스터에 있는 앱에 요청을 전송하면, 앱 팟(Pod)이 있는 작업자 노드는 역방향 경로 필터링(RPF)에 따라 응답을 드롭합니다. RPF는 작업자 노드의 라우팅 테이블에 나열되지 않은 IP 주소에 대한 모든 응답을 드롭하는 Linux 커널 기능입니다. 이 응답은 작업자 노드가 요청에서 유지된 온프레미스 IP 주소에 라우팅할 수 없기 때문에 드롭됩니다.
이 경우, 요청의 발신 IP 주소가 온프레미스 서브넷 중 하나에 속할 때 응답이 VPN 게이트웨이 IP 주소로 전송되도록 정적 경로를 생성할 수 있습니다. 이 정적 라우트를 작업자 노드의 라우팅 테이블에 추가하면 다음 항목이 보장됩니다.
- 온프레미스 IP 주소를 지정하는 라우팅 규칙이 존재하므로 응답 패킷이 RPF로 인해 드롭되지 않습니다.
- 응답 패킷이 먼저 VPN 게이트웨이 IP 주소를 통해 라우팅된 후 온프레미스 IP 주소로 다시 라우팅됩니다.
정적 라우트 클러스터 추가 기능은 정적 라우트를 적용하고 관리하기 위해서만 사용할 수 있습니다. 사용자는 고유한 VPN, 게이트웨이 어플라이언스 또는 IBM Cloud® Direct Link 연결을 구성하고 관리할 책임이 있습니다.
정적 라우트 추가 기능 사용
IBM Cloud Kubernetes Service에서 정적 라우트를 시작하기 위해 정적 라우트 추가 기능을 사용으로 설정합니다.
시작하기 전에
- 관리자 다음에 있는 클러스터에 대한 IAM 플랫폼 액세스 역할: IBM Cloud Kubernetes Service 가 설치되어 있는지 확인하십시오.
- 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
콘솔에서 정적 라우트 추가 기능 사용
IBM Cloud 콘솔을 사용하려면 해당 단계를 따르십시오.
- 클러스터 대시보드에서 정적 경로 애드온을 설치하려는 클러스터의 이름을 클릭합니다.
- 정적 라우트 카드에서 설치를 클릭하십시오.
- 설치를 다시 클릭하십시오.
- 정적 라우트 카드에서 이 추가 기능이 나열되었는지 확인하십시오.
CLI와 함께 정적 라우트 추가 기능 사용
CLI를 사용하려면 해당 단계를 따르십시오.
-
container-service플러그인을 최신 버전으로 업데이트하십시오.ibmcloud update && ibmcloud plugin update container-service -
static-route추가 기능을 사용으로 설정하십시오.ibmcloud ks cluster addon enable static-route --cluster CLUSTER_NAME_OR_ID -
정적 라우트 추가 기능의 상태가
Addon Ready인지 확인하십시오.ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID출력 예
Name Version Health State Health Status static-route 1.0.0 normal Addon Ready
정적 라우트 작성
정적 라우트 추가 기능을 사용으로 설정하고 나면 사용자 정의 라우트에 대한 리소스를 작성하고 적용할 수 있습니다.
-
정적 라우트 리소스에 대한 YAML 파일을 작성하십시오.
apiVersion: static-route.ibm.com/v1 kind: StaticRoute metadata: name: <route_name> spec: subnet: "<subnet_CIDR>" gateway: "<gateway_IP>" selectors: - key: "<label_key>" values: - "<label_value>" operator: In예
apiVersion: static-route.ibm.com/v1 kind: StaticRoute metadata: name: mystaticroute spec: subnet: "192.168.0.0/24" gateway: "10.0.0.1" selectors: - key: "kubernetes.io/arch" values: - "amd64" operator: Insubnet- 온프레미스 네트워크의 서브넷과 같이 작업자 노드에 대한 요청이 전송되는 외부 서브넷의 CIDR을 지정하십시오. 외부 서브넷은 다음 예약 범위에 있을 수 없습니다. 디바이스 상호 연결 범위,
198.18.0.0/15가 허용됩니다.10.0.0.0/8172.16.0.0/16172.18.0.0/16172.19.0.0/16172.20.0.0/16
gateway- 게이트웨이 IP 주소가 작업자 노드와 동일한 서브넷에 있는 경우 이 게이트웨이 IP 주소를 지정하십시오. 게이트웨이 IP 주소가 IBM Cloud 사설 네트워크의 다른 서브넷에 있는 경우 이 필드를 포함시키지 마십시오. 이 경우 작업자 노드는 응답을 사설 네트워크의 백엔드 라우터에 전송하고, 이 라우터가 해당 응답을 다른 서브넷의 게이트웨이에 전송합니다. 정적 라우트가 작성되면,
10.0.0.0/8범위에 속한 해당 백엔드 라우터의 IP 주소가 자동으로 기본 게이트웨이로 지정됩니다. selectors- 작업자 노드 레이블을 기반으로 특정 작업자 노드에서만 정적 라우트를 작성하려면 해당 레이블의
key및values를 포함시키십시오.
-
YAML 파일을 클러스터에 적용하여 정적 라우트를 작성하십시오.
kubectl apply -f <route_name>.yaml -
정적 라우트가 작성되었는지 확인하십시오. 출력에서 정적 라우트를 작성하는 각 작업자 노드의
node_status를 확인하십시오.kubectl get staticroute <route_name> -o yaml출력 예
apiVersion: static-route.ibm.com/v1 kind: StaticRoute metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"static-route.ibm.com/v1","kind":"StaticRoute","metadata":{"annotations":{},"name":"mystaticroute"},"spec":{"selectors":[{"key":"kubernetes.io/arch","operator":"In","values":["amd64"]}],"subnet":"10.94.227.46/24"}} creationTimestamp: "2020-05-20T16:43:12Z" finalizers: - finalizer.static-route.ibm.com generation: 1 name: mystaticroute resourceVersion: "3753886" selfLink: /apis/static-route.ibm.com/v1/staticroutes/mystaticroute uid: f284359f-9d13-4e27-9d3a-8fb38cbc7a5c spec: selectors: - key: kubernetes.io/arch operator: In values: - amd64 subnet: 10.94.227.46/24 status: nodeStatus: - error: "" hostname: 10.94.227.19 state: gateway: 10.94.227.1 selectors: - key: kubernetes.io/arch operator: In values: - amd64 subnet: 10.94.227.46/24 - error: "" hostname: 10.94.227.22 state: gateway: 10.94.227.1 selectors: - key: kubernetes.io/arch operator: In values: - amd64 subnet: 10.94.227.46/24