티스토리 뷰
컨테이너 기반 서비스 운영 업무를 맡게 되면서 air gap 환경에 OCP
와 OKD
설치를 진행하게 되었는데, 설치하는 과정 중에 yum repository
를 구축하는 부분이 있어 연습 겸 포스팅을 해보려고 한다.
1. 테스트 개요
air gap 환경을 위해 다음와 같은 순서로 테스트 환경을 구축할 것이다. 테스트를 위해 aws
를 사용했는데, aws
를 사용하지 않을 경우 1, 3번은 다른 방식으로 구성해도 당연히 괜찮다.
aws
의private subnet
에 서버/클라이언트용 인스턴스 생성NAT gateway
를 통해 필요한 패키지를yum repository
가 될 인스턴스에 다운로드NAT gateway
를 제거하여private subnet
내에 있는 인스턴스를 air gap 상태로 변경- 이전 단계에서 구성한
yum repository
정보를 클라이언트 인스턴스에 추가 - 패키지 다운로드
2. 테스트 인스턴스 생성
air gap 환경으로 구축을 위해 private subnet
에 서버와 클라이언트가 될 인스턴스를 생성했다. 테스트 인스턴스의 OS는 Amazon Linux
를 선택했다.
3. yum repository 구성
yum repository 구축
아파치 웹 서버의 기본 디렉토리인 /var/www/html
를 사용해도 되지만, 별도의 디렉토리에 rpm
을 다운받아서 사용할 것이다.
$ sudo yum install -y createrepo
$ sudo mkdir -p /app/rpms
$ sudo createrepo /app/rpms
패키지(rpm) 다운로드
샘플로 다운 받을 패키지는 구성한 인스턴스에 없는 htop
, tmux
, ansible
이다.
$ sudo yumdownloader --resolve --downloaddir=/app/rpms htop tmux ansible
repository 업데이트
$ sudo createrepo --update /app/rpms
httpd 설치
클라이언트 인스턴스에서 접속할 수 있도록 웹 서버를 설치한다.
$ sudo yum install -y httpd
참고로 테스트 환경의 아파치 버전은 다음과 같다.
httpd 설정(httpd.conf) 변경
기존에 테스트 환경에 아파치 웹 서버를 사용하고 있다면, 각자의 환경에 맞춰 수정해서 사용하면 된다. 중요한 것은 DocumentRoot
를 패키지를 설치한 경로로 설정하는 것이다.
DocumentRoot 수정
# DocumentRoot "/var/www/html"
DocumentRoot "/app/rpms"
Document 속성 추가
<Directory "/app/rpms">
AllowOverride None
Options Indexes # 보안 이슈로 사용 주의. 관련 내용은 이후에 나올 "패키지 확인" 부분 참고
Require all granted
</Directory>
추가 설정 파일 제외
# IncludeOptional conf.d/*.conf
httpd 재기동
$ sudo systemctl restart httpd
패키지 확인
웹 서버로 요청을 보내면 설치한 패키지 리스트들을 볼 수 있다. 참고로 실습 결과를 보여주기 위해 httpd.conf
에서 파일 목록 리스트를 노출하도록 설정(Directory - Options Indexes)을 해서 해당 리스트가 보이는거지만, 보안을 위해서는 해당 옵션을 사용하지 않는 것이 좋다.
$ curl localhost:80
4. air gap 환경 구성
변경 전
클라이언트 인스턴스에서 외부 요청을 보낼 경우, 요청이 처리가 되는 것을 확인할 수 있다.
$ curl -I https://google.com
오프라인 환경(air gap) 구축
오프라인 환경 구축을 위해 NAT gateway
를 삭제했다.
이후 외부로 요청을 보낼 경우, 정상적으로 처리되지 않고 타임아웃이 발생한다.
당연히 리눅스 패키지도 다운이 안된다.
5. 클라이언트 인스턴스에서 패키지 다운로드
이제 air gap 환경이 구축되었으니, 클라이언트 인스턴스에서 이전 단계에 구축한 yum repository
설정을 추가해 테스트를 진행해보자.
기존 repository 삭제
물론 삭제 대신 백업을 해도 된다.
$ sudo rm /etc/yum.repos.d/*
yum repository 추가
구축한 yum repository
를 바라볼 수 있도록 설정을 추가한다.
$ sudo bash -c 'cat <<EOF > /etc/yum.repos.d/air-gap-repo.repo
[air-gap-repo]
name=air-gap-repo
baseurl=http://[repository ip]
gpgcheck=0
enabled=1
EOF'
yum repository 추가 확인
repository가 추가된 것을 확인할 수 있다.
$ yum repolist
repo id repo name
air-gap-repo air-gap-repo ✅
패키지 다운로드
yum repositoy
에 받아둔 htop
, tmux
, ansible
을 설치하면 air gap 환경이지만 정상적으로 설치가 되는 것을 볼 수 있다 😎
$ sudo yum install -y htop tmux ansible
당연하지만, 준비되지 않은 패키지(stress
)는 설치할 수 없다.
$ sudo yum install -y stress
패키지 설치 확인
패키지가 잘 설치된 것을 확인할 수 있다.
$ yum list --installed | egrep "htop|tmux|ansible"
'Linux' 카테고리의 다른 글
[linux] 일반 유저로 1024 미만의 포트 사용하기 (0) | 2024.04.21 |
---|---|
[linux] 유저 권한으로 서비스 실행하고 로그아웃에도 서비스 유지하기 (1) | 2024.04.20 |