기존 배포를 FIPS 규격 이미지로 마이그레이션
Mattermost v12.0요약
Mattermost v11부터 각 릴리즈는 표준 Enterprise 빌드(mattermost/mattermost-enterprise-edition)와 FIPS 규격 빌드(mattermost/mattermost-enterprise-fips-edition)의 두 가지...
사용 가능 플랜: Entry, Enterprise, Enterprise Advanced(Professional 제외)
Mattermost v11부터 각 릴리즈는 표준 Enterprise 빌드(mattermost/mattermost-enterprise-edition)와 FIPS 규격 빌드(mattermost/mattermost-enterprise-fips-edition)의 두 가지 이미지 변형으로 제공됩니다. 기존 배포를 FIPS 이미지로 마이그레이션하는 작업은 주로 이미지를 교체하고 Mattermost를 다시 시작하는 일입니다. 데이터 마이그레이션은 필요하지 않으며 롤백도 같은 방식으로 수행합니다.
이 가이드는 Docker 또는 Kubernetes에서 실행 중인 기존 Mattermost Server 배포를 마이그레이션하는 방법을 설명합니다. Linux 패키지와 tarball 설치에는 FIPS 규격에 해당하는 설치 방식이 없습니다.
Mattermost의 FIPS 제공 범위에는 Mattermost Operator 컨트롤러와 셀프 호스팅 푸시 프록시도 포함됩니다. 이러한 구성 요소를 FIPS 변형으로 마이그레이션하는 방법은 이 가이드의 범위에 포함되지 않습니다.
FIPS 빌드가 무엇이며 어떻게 구성되는지에 대한 배경은 컨테이너를 사용한 Mattermost 배포의 FIPS/STIG 탭을 참조하세요.
시작하기 전에#
-
데이터베이스와 구성을 백업하세요. 이미지를 변경하기 전에 항상 전체 백업을 수행하세요. 백업 및 재해 복구 문서를 참조하세요.
-
배포 유형을 확인하세요. FIPS 이미지는 Docker, Docker Compose, Kubernetes에서만 지원됩니다. Linux 패키지 또는 tarball로 Mattermost를 실행 중이라면 현재 환경에서 바로 마이그레이션할 수 없습니다.
-
Mattermost 버전을 확인하세요. FIPS 이미지는 v11.0부터 제공되며 표준 Enterprise 이미지와 같은 릴리즈 태그를 사용합니다. 현재 버전에 맞는 FIPS 태그로 마이그레이션하도록 계획하세요.
-
추가 플러그인을 계획하세요. FIPS 이미지에는 Boards, Playbooks, Agents가 사전 패키징되어 있으며 FIPS 모드로 실행됩니다. 추가로 설치한 플러그인은 FIPS 이미지 안에서 계속 실행되지만 FIPS가 아닌 모드로 실행됩니다. 이는 구성 오류가 아니라 예상되는 동작입니다.
-
PostgreSQL 비밀번호 길이. Mattermost v11.7부터는 FIPS 이미지를 실행할 때 Mattermost 서버가 사용하는 Postgres 비밀번호가 14자 이상이어야 합니다. 현재 비밀번호가 이보다 짧다면 이미지를 교체하기 전에 다음 단계를 완료하세요.
a. PostgreSQL에서 비밀번호를 변경합니다. 예를 들어 Postgres 슈퍼유저로 접속하여
mmuser와<new password>를 배포 환경에 맞게 바꿔 실행합니다.ALTER USER mmuser WITH PASSWORD '<new password>';b. 배포 환경에서 비밀번호를 저장하는 위치를 업데이트합니다. 공식 Docker 배포에서는
.env의POSTGRES_PASSWORD값이고, Operator가 관리하는 Kubernetes 배포에서는Mattermost커스텀 리소스가 참조하는 데이터베이스 Secret(일반적으로spec.database.external.secret아래)입니다.c. 아래에서 배포 유형에 맞는 이미지 교체 절차로 진행합니다. 마이그레이션 과정에서 컨테이너를 다시 생성하면 새 자격 증명이 적용되므로 별도의 재시작은 필요하지 않습니다.
-
다운타임을 계획하세요. 마이그레이션에는 새 이미지를 가져오고 Mattermost 컨테이너 또는 Pod를 다시 시작하는 작업이 필요합니다.
Kubernetes 배포 마이그레이션#
이 단계는 Mattermost 커스텀 리소스를 사용하는 Mattermost Operator가 배포를 관리한다고 가정합니다.
아래 단계에서 <namespace>는 Mattermost 설치가 실행되는 네임스페이스로 바꾸세요. -n <namespace>를 생략하면 kubectl은 현재 컨텍스트의 기본 네임스페이스를 사용합니다.
-
Mattermost 커스텀 리소스의 이름을 확인합니다.
kubectl -n <namespace> get mattermost -
FIPS 이미지를 가리키도록
Mattermost커스텀 리소스를 편집합니다. 실행 중인 리소스를 직접 편집할 수 있습니다.kubectl -n <namespace> edit mattermost <installation-name>또는 매니페스트 파일을 업데이트한 다음 다시 적용합니다.
-
spec.image에서 값을mattermost/mattermost-enterprise-edition에서mattermost/mattermost-enterprise-fips-edition으로 변경합니다.spec.version은 현재 릴리즈 태그와 일치하도록 유지합니다. 예시는 다음과 같습니다.spec: image: mattermost/mattermost-enterprise-fips-edition version: 11.6.1 -
매니페스트 파일을 편집했다면 적용합니다.
kubectl -n <namespace> apply -f <your-mattermost-manifest>.yaml -
새 Mattermost Pod가
Ready로 표시되고 이전 Pod가 종료될 때까지 지켜봅니다. Pod가Running으로 표시되어도 아직 트래픽을 처리하고 있다고 단정할 수는 없습니다.READY칼럼에 모든 컨테이너가 준비된 상태(예:1/1)로 표시될 때까지 기다리세요.kubectl -n <namespace> get pods -l app=mattermost -w -
실행 중인 Pod가 FIPS 이미지를 사용하는지 확인합니다.
kubectl -n <namespace> get pods -l app=mattermost -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\n"}{end}'
Docker 또는 Docker Compose 배포 마이그레이션#
이 단계는 공식 Mattermost Docker 배포를 기준으로 작성되었습니다. 공식 배포는 .env 변수(MATTERMOST_IMAGE와 MATTERMOST_IMAGE_TAG)로 Mattermost 이미지와 태그를 선택하며, docker-compose.yml에서 mattermost/${MATTERMOST_IMAGE}:${MATTERMOST_IMAGE_TAG}로 이를 참조합니다. docker-compose.yml에 이미지를 직접 지정하거나 다른 변수 이름을 사용하는 사용자 지정 Docker 구성을 사용 중이라면 이 단계를 환경에 맞게 조정하세요.
-
Mattermost 컨테이너를 중지합니다.
docker compose stop mattermost -
.env파일을 편집합니다.MATTERMOST_IMAGE를mattermost-enterprise-edition에서mattermost-enterprise-fips-edition으로 변경합니다.MATTERMOST_IMAGE_TAG는 현재 릴리즈 태그 그대로 둡니다. FIPS 이미지는 표준 Enterprise 이미지와 같은 태그로 게시됩니다.MATTERMOST_IMAGE=mattermost-enterprise-fips-edition MATTERMOST_IMAGE_TAG=<tag> -
FIPS 이미지를 가져옵니다.
docker compose pull mattermost -
새
.env값이 적용되도록 Mattermost 컨테이너를 다시 생성합니다.docker compose up -d --force-recreate mattermost -
실행 중인 컨테이너가 FIPS 이미지를 사용하는지 확인합니다.
docker inspect mattermost --format '{{.Config.Image}}'
마이그레이션 확인#
-
Mattermost가 오류 없이 시작되는지 확인합니다. 로그를 따라가며 시작 오류가 있는지 살펴보세요. Kubernetes에서는 특정 Mattermost Pod를 대상으로 지정합니다.
kubectl -n <namespace> logs -f <pod-name>Docker에서는 다음과 같이 합니다.
docker compose logs -f mattermost -
로그인하여 핵심 기능(메시지 전송, 파일 업로드, 검색)을 확인합니다.
-
사전 패키징된 플러그인(Boards, Playbooks, Agents)이 정상적으로 로드되는지 확인합니다. System Console에서 Plugins > Plugin Management로 이동하여 플러그인이 활성화되어 있고 정상 상태인지 확인하세요.
-
추가 플러그인을 설치했다면 해당 플러그인이 여전히 로드되는지 확인합니다. 이 플러그인은 FIPS 이미지 안에서 FIPS가 아닌 모드로 실행되며, 이는 예상되는 동작입니다.
롤백#
마이그레이션이 계획대로 진행되지 않으면 이미지 참조를 되돌리고 다시 배포하는 방식으로 롤백합니다. 롤백도 같은 방식이며 데이터 마이그레이션은 포함되지 않습니다.
- Kubernetes:
Mattermost커스텀 리소스를 편집하여spec.image를mattermost/mattermost-enterprise-edition으로 되돌립니다. 다시 적용하거나 저장한 다음 롤아웃을 지켜봅니다. - Docker / Docker Compose:
.env의 원래MATTERMOST_IMAGE값(mattermost-enterprise-edition)을 복원한 다음docker compose pull mattermost를 실행하고 이어서docker compose up -d --force-recreate mattermost를 실행합니다.