파드 네트워크 확인
파드에 IP 주소를 실제로 배정하는 것은 무엇인가?
- kube-apiserver 가 서비스 주소와 같은 풀에서 하나씩 꺼내 준다
- kube-controller-manager 의 엔드포인트 컨트롤러가 배정한다
- 노드 위의 네트워크 플러그인이 배정하고, API 서버는 결과를 받아 적을 뿐이다
- kube-scheduler 가 노드를 고를 때 함께 정해 파드 명세에 적는다
hostPort: 8080 을 적었는데 노드에서 그 포트가 열리지 않았다. 매니페스트는 통과했고 파드도 Running 이다. 가장 그럴듯한 원인은?
- CNI 체인에
portmap플러그인이 없어 hostPort 를 실행할 주체가 없다 - 노드의
spec.podCIDR이 비어 있어 주소가 배정되지 않았다 - 서비스 오브젝트를 만들지 않아 포트가 공개되지 않았다
- hostPort 는 30000 부터 32767 사이의 값만 열 수 있다
host-local IPAM 을 쓰는 클러스터에서 두 노드에 같은 파드 대역을 주면 어떻게 되나?
- 컨트롤 플레인이 중복을 발견해 두 번째 노드를 NotReady 로 만든다
- 두 노드가 같은 주소를 각각 내주고, 증상은 무작위한 연결 실패로 나타난다
- 먼저 등록한 노드가 대역을 차지하고 뒤의 노드는 파드를 받지 못한다
- 노드끼리 대역을 절반씩 나눠 쓰도록 자동으로 좁혀진다
쿠버네티스 1.24 이후 CNI 플러그인을 실제로 호출하는 주체는?
- kubelet 이
--network-plugin옵션으로 직접 호출한다 - 컨테이너 런타임(containerd, CRI-O 등)이 호출한다
- kube-proxy 가 서비스 규칙을 넣을 때 함께 호출한다
- kube-controller-manager 의 노드 컨트롤러가 호출한다
파드 대역 10.96.0.0/12, 서비스 대역 10.96.0.0/16 으로 클러스터를 세우려 한다. 어떤가?
- 괜찮다. 프리픽스가 다르므로 두 대역은 서로 다른 공간을 쓴다
- 괜찮다. 파드와 서비스는 다른 계층이라 겹쳐도 규칙이 구분한다
- 안 된다.
/12가/16을 통째로 품고 있어 두 대역이 겹친다 - 안 된다. 서비스 대역은 언제나 파드 대역보다 넓어야 한다
conflist 에 플러그인을 여러 개 적는 이유로 가장 맞는 것은?
- 플러그인 중 하나가 실패하면 다음 플러그인이 대신 처리하는 예비 구조다
- 노드마다 다른 플러그인을 고를 수 있게 후보 목록을 적어 두는 것이다
- 주소 배정·hostPort·대역 제한처럼 서로 다른 일을 각각 다른 플러그인이 맡고 차례로 불린다
- IPv4 용과 IPv6 용 플러그인을 나란히 적어 두 체계를 함께 쓰는 것이다