LabHub
배우기 러닝패스 코스

쿠버네티스 네트워크 — 진짜 클러스터에서 · 파드 주소는 누가 주는가 · 실습

파드 대역을 자르고 플러그인 체인을 설계한다

LabHub 에서 이어서 보기

목표

파드 주소가 어디서 나오는지를 노드 오브젝트와 플러그인 설정 양쪽에서 확인하고, 대역을 겹치지 않게 자르는 계산을 손으로 해 본다.

왜 중요한가

클러스터를 새로 세울 때 가장 먼저 정해야 하고 가장 되돌리기 어려운 것이 주소 대역이다. 파드·서비스·노드 세 종류를 각각 다른 주체가 배정하는데 서로 상의하지 않으므로, 겹치지 않게 잡는 일은 설계자의 몫이다. 또 hostPort 나 대역 제한처럼 매니페스트에는 적히지만 플러그인이 없으면 조용히 무시되는 기능들이 있어서, 무엇을 누가 맡는지 한 번 갈라 두지 않으면 '설정은 맞는데 안 된다' 를 오래 헤매게 된다.

단계

1. 클러스터 파드 대역 10.244.0.0/16/24 로 갈라 lab-node-0·lab-node-1·lab-node-2 에 앞에서부터 차례로 못박으세요(spec.podCIDRspec.podCIDRs 둘 다). 그다음 /root/k8nd-cni/01-podcidr.txt노드이름 대역 세 줄을 노드 이름 순서로 적으세요.
2. /root/k8nd-cni/02-capacity.txt 에 다섯 줄을 적으세요 — subnets=(10.244.0.0/16/24 로 자를 때 나오는 조각 수), addresses_per_subnet=(한 조각의 주소 총 개수), usable_per_subnet=(네트워크 주소와 게이트웨이를 뺀 수), node_pod_limit=(노드 오브젝트가 말하는 status.allocatable.pods 값), binding_limit=(둘 중 먼저 걸리는 쪽을 subnet 또는 node 로).
3. /root/k8nd-cni/10-k8nd.conflist 를 만드세요 — cniVersion1.0.0, namek8nd-pod-network, plugins정확히 셋이고 순서대로 bridge·portmap·bandwidth 입니다. bridgeipamhost-local 이고 subnetlab-node-0 의 파드 대역, portmap 에는 capabilities.portMappings 가 참, bandwidth 에는 capabilities.bandwidth 가 참이어야 합니다.
4. /root/k8nd-cni/shaped.yaml 에 파드 매니페스트를 쓰고 적용하세요 — 네임스페이스 k8nd-cni, 이름 shaped, 어노테이션 kubernetes.io/ingress-bandwidth: 1Mkubernetes.io/egress-bandwidth: 1M, 컨테이너 web(nginx:1.27-alpine)에 containerPort 8080·hostPort 8080 입니다. 그리고 /root/k8nd-cni/04-chain.txthostport_plugin=·bandwidth_plugin=·ingress_annotation=·egress_annotation= 네 줄을 적으세요(플러그인은 3단계 conflist 에서 그 일을 맡은 플러그인의 type, 어노테이션은 실제로 단 값).
5. /root/k8nd-cni/edge-node.yaml 에 노드 k8nd-cni-edge 를 쓰고 적용하세요 — spec.unschedulable 을 참으로 두고, spec.taints 에 직접 정한 키 k8nd.example.com/cni-missing(effect NoSchedule) 하나를 답니다. 적용한 뒤 /root/k8nd-cni/05-notready.txtnode=·custom_taint=(내가 단 키)·controller_taint=(컨트롤러가 더 붙인 내장 테인트 키)·unschedulable= 네 줄을 적으세요.
6. /root/k8nd-cni/06-node1.conflist/root/k8nd-cni/06-node2.conflist 를 만드세요. 각각 lab-node-1·lab-node-2 에 못박은 대역을 ipam.subnet 으로 쓰고, ipam.gateway 는 그 대역의 첫 번째 사용 가능 주소이며, ipam.routes 에는 0.0.0.0/0 과 클러스터 파드 대역 10.244.0.0/16 둘 다 들어가야 합니다. ipam.typehost-local 입니다.
7. 네 가지 대역 배치를 판정하세요 — p1 은 파드 10.244.0.0/16·서비스 10.96.0.0/16·노드 192.168.10.0/24, p2 는 파드 10.96.0.0/12·서비스 10.96.0.0/16·노드 192.168.10.0/24, p3 은 파드 10.244.0.0/16·서비스 10.245.0.0/16·노드 10.244.3.0/24, p4 는 파드 172.16.0.0/16·서비스 10.96.0.0/16·노드 192.168.10.0/24 입니다. /root/k8nd-cni/07-overlap.txtp1= 부터 p4= 까지 네 줄(값은 ok 또는 overlap)과 rule=pod,service,node 한 줄, 모두 다섯 줄을 적으세요.
8. /root/k8nd-cni/08-report.mdcluster_pod_cidr=·per_node_prefix=·nodes_addressable=(그 프리픽스로 담을 수 있는 노드 수)·notready_node=(5단계에서 만든 노드 이름)·chained_plugins=(3단계 conflist 에서 bridge 뒤에 이어 붙인 플러그인들을 쉼표로) 다섯 줄을 적고, 그 아래 - 로 시작하는 줄을 네 줄 이상 적으세요.

참고

단계 8개

  1. 노드마다 파드 대역을 잘라 준다
  2. 그 대역으로 파드를 몇 개나 담을 수 있나
  3. 플러그인 설정을 이어 붙인다
  4. hostPort 와 대역 제한은 누가 하나
  5. 플러그인이 없으면 노드가 통째로 막힌다
  6. 노드마다 다른 IPAM 설정을 만든다
  7. 겹치면 어디로 갈지 정해지지 않는다
  8. 파드 네트워크 설계 메모를 남긴다