static_host_map와 advertise_addrs 설정은 둘 다 peer 앞에 주소를 두지만 서로 다른 질문에 답합니다. 하나는 overlay 주소와 연결할 underlay 엔드포인트를 나열한 로컬 파일입니다. 다른 하나는 호스트가 자신의 등대에 어떤 추가 엔드포인트가 자신에 도달할 수 있는지 알려주는 것입니다. 진짜 차이는 소유권입니다: 맵은 필요한 모든 사람이 유지하고, 광고는 호스트 자신이 합니다.

정보를 누가 소유하는지로 결정하세요

SettingWhere it livesBest for
static_host_mapEvery peer that needs the entryBootstrap endpoints, deliberately fixed paths
advertise_addrsThe host's own configEndpoints the host cannot otherwise discover

각 peer의 정적 파일에 있는 변하는 모든 peer는 함대의 제곱으로 늘어나는 유지보수 작업입니다. 호스트 자신이 답을 알 때 다른 설정으로 손을 뻗는 실질적인 이유가 여기 있습니다.

소유권 질문은 주소가 바뀔 때 무슨 일이 일어나는지도 예측합니다. 정적 맵에서는 오래된 항목을 가진 모든 peer를 누군가 기억해야 합니다. 광고에서는 호스트가 새 엔드포인트를 게시하고 등대가 그것을 전달하므로, 변경은 이동한 머신 안에 머뭅니다.

부트스트랩에는 여전히 정적 항목이 필요합니다

클라이언트는 다른 peer에 대해 누군가에게 묻기 전에 최소한 하나의 등대에 도달해야 합니다. 그 첫 번째 도약은 발견에서 올 수 없으므로 클라이언트 구성의 정적 항목에 의존합니다. 그 한 항목을 올바르게 하면 나머지 overlay를 배울 수 있습니다.

맵 항목은 Nebula 주소를 하나 이상의 도달 가능한 IP 또는 DNS 엔드포인트 및 포트와 짝짓습니다. 등대를 거기에 두는 것은 정상입니다; 모든 peer를 거기에 두는 것은 나쁘게 늙는 패턴입니다, 왜냐하면 새 peer마다 당신이 통제하지 못할 수 있는 머신의 파일을 편집해야 하기 때문입니다. 사람이 읽고 검증할 수 있을 만큼 목록을 짧게 유지하세요.

호스트가 엔드포인트를 알 때 광고하세요

포트 포워딩 뒤의 호스트는 자신의 어떤 인터페이스에도 할당되지 않은 공개 주소로 도달할 수 있습니다. 자신을 보는 것만으로는 그 주소를 발견할 수 없습니다. advertise_addrs는 등대를 통해 엔드포인트를 게시하게 하여 다른 peer가 실제로 작동하는 경로를 배우게 합니다. 이 설정이 존재하는 이유는 매핑이 만들어졌음을 아는 유일한 당사자가 호스트이기 때문입니다.

다른 peer가 실제로 도달할 수 있는 주소와 포트를 사용하세요. 같은 논리가 여러 네트워크 경로를 가진 호스트에도 적용되며, 특정 네트워크의 peer에게는 한 경로가 더 낫습니다. 광고는 underlay에 대한 진술이지 무엇인가에 대한 요청이 아닙니다. 매핑이 바뀌면 호스트에서 광고를 갱신하고 발견이 그것을 나르게 하세요, 함대 전체의 정적 파일을 편집하는 대신.

광고는 도달 가능성이 아닙니다

엔드포인트를 게시한다고 해서 라우터의 포워딩 규칙이 생기지 않고, 상류 방화벽이 열리지 않으며, DNS 이름이 해석되지 않습니다. 그것들은 별개의 작업 조각이며, 포트 포워딩이 빠진 올바른 광고는 당신이 고치려던 바로 그 고장을 만듭니다. 광고는 도달 가능성에 대한 주장이지, 그것을 확립하는 메커니즘이 아닙니다.

발견을 탓하기 전에 외부에서 경로를 확인하세요. 엔드포인트를 배웠지만 핸드셰이크를 완료할 수 없는 peer는 underlay에서 라우팅이나 필터링 문제가 있으며, 두 설정에 같은 주소를 반복해도 그것은 바뀌지 않습니다.

overlay 주소를 엔드포인트와 분리하세요

노드의 인증서는 Nebula 주소를 식별합니다. 광고된 주소는 하위 네트워크에 속하며 인증서를 건드리지 않고 바뀔 수 있습니다. 다른 overlay IP로 새 인증서 발급는 다른 작업이며, 옛것을 고정한 모든 신뢰 관계에 각자의 결과를 남깁니다. runbook에서 두 변경을 분리하세요, 그렇지 않으면 엔드포인트 이동이 재발급으로 기록됩니다.

트리아지가 막히면 두 계층을 명시적으로 분리하세요: 발견이 예상 엔드포인트를 반환하는가, 그리고 핸드셰이크가 거기에 도달하는가? 발견이 옳고 패킷이 실패하면 문제는 overlay 아래에 있습니다. 발견이 틀렸다면 문제는 맵이나 광고에 있으며, 수정도 그곳에 속합니다.

관련 글