이미지에서 한 번 부팅한다고 해서 Pi가 재구축 가능한 어플라이언스가 되는 것은 아닙니다. 필요한 것은 다시 적용할 수 있는 작은 입력 집합, 즉 유지 관리되는 기반, 선언된 구성, 애플리케이션의 영구 데이터, 그리고 그 보드에만 속하는 장치 정체성입니다. 마지막 항목을 빠뜨리면 모든 교체가 자격 증명의 복제본이 됩니다.

아래 단계는 도구 권장 사항이 아니라 작업 순서입니다. 이를 표현할 수 있는 구성 시스템이면 무엇이든 됩니다.

먼저 네 가지 입력 유형을 나열하십시오

기반 이미지와 그 패키지는 운영 체제, 아키텍처, 업데이트의 출처를 정의하며, 이미지 빌더는 그것이 지목하는 도구가 해당 릴리스에 대해 여전히 유지 관리될 때만 도움이 됩니다. 선언된 구성은 사람이 검토하는 부분으로, 네트워크 역할, 서비스 설정, 각 서비스에 필요한 수명 주기 작업을 포함합니다. 영구 애플리케이션 데이터는 서비스가 다시 생성할 수 없는 모든 것이며, 그 위치와 백업 방법은 이미지가 아니라 해당 애플리케이션에 속합니다. 장치 정체성과 비밀은 네 번째 입력이며, 작동하는 카드를 복제할 때 사람들이 잊는 것이 바로 이것입니다.

무엇이든 재구축하기 전에 네 개의 목록을 작성하십시오. 빈 행이 있는 목록은 아직 내리지 않은 결정입니다.

비밀을 저장소 밖에 두고 어디에 있는지 밝히십시오

저장소는 검토된 템플릿과 비밀이 아닌 구성에 좋은 집이고, VPN 개인 키, 재사용 가능한 관리자 자격 증명, 진단 아카이브에는 나쁜 집입니다. 비밀이 장치에 존재해야 한다면 어디서 오는지, 누가 읽을 수 있는지, 어떻게 교체되는지 기록하십시오. SD 카드 한 장에만 있는 키는 단일 실패 지점이며, 모든 보드에 복사된 키는 소유자 없는 전체 플릿의 자격 증명입니다. 둘 다 복구 계획이 아닙니다.

시험은 간단합니다—내일 저장소가 유출되면 공격자는 무엇을 얻을까요. 템플릿과 토폴로지 메모는 살아남습니다. 작동하는 정체성은 살아남지 못합니다.

다시 실행할 수 있는 것은 자동화가 소유하게 하십시오

Ansible 모델은 관리 노드 인벤토리를 플레이, 작업, 역할, 그리고 작업이 변경을 보고할 때 실행되는 핸들러와 분리해 유지합니다. 그 구조를 사용해 각 서비스에 구성 소유자를 하나씩 부여하고 셸 기록을 재생하지 마십시오. 두 번 실행해도 안전한 작업을 선호하고, 변경된 파일이 실행 중인 프로세스에 어떻게 도달하는지 의도적으로 결정하십시오. 서비스가 시작되었음을 보장하는 작업이 방금 다시 작성한 구성을 반드시 다시 로드하게 만드는 것은 아닙니다.

관리 단계도 분리하십시오. 부트스트랩 연결, 일상 구성, VPN 의존 관리는 서로 다른 세 개의 창이며, 세 번째는 재구축이 그 아래 네트워크를 초기화하면 자신의 접근 권한을 제거할 수 있습니다. 독립적인 진입 경로를 유지하십시오.

데이터와 정체성을 의도적으로 복원하십시오

컨테이너 볼륨은 컨테이너 수명 주기와 무관하게 지속되지만 컨테이너 내부의 쓰기 가능 계층은 그렇지 않으므로, 이미지에서 컨테이너를 다시 만들어도 애플리케이션이 사용하던 상태가 다시 만들어지지 않으며, 이는 볼륨 문서가 설명하는 대로입니다. 어플라이언스가 의존하는 볼륨, 바인드 마운트, 외부 서비스를 기록하고 애플리케이션 자체의 백업 및 복구 절차를 사용하십시오. 오류 없이 시작하는 컨테이너는 데이터베이스와 파일이 일치한다는 증거가 아닙니다.

정체성의 경우 같은 장치를 복구하는지 교체품을 등록하는지 결정해야 하며, 이는 서로 다른 정리가 필요한 서로 다른 작업입니다.

다른 곳에서 정체성을 활성화하기 전에 이전 피어의 접근을 조정하고, 그다음에야 재구축한 어플라이언스를 격리 또는 복구 환경에서 시험하십시오. 필요한 데이터, 올바른 정체성, 소유자가 있는 업데이트 경로, 의도한 네트워크 정책을 확인하십시오.

부팅 가능한 이미지는 네 가지 중 하나의 입력이며, 재현하기 가장 쉽습니다.

관련 글