티스토리 뷰

컨테이너 기반 서비스 운영 업무를 맡게 되면서 air gap 환경에 OCP와 OKD 설치를 진행하게 되었는데, 설치하는 과정 중에 yum repository를 구축하는 부분이 있어 연습 겸 포스팅을 해보려고 한다.

 

air gap 환경에선 신경 쓸게 곱절은 늘어나는거 같다

 

 

1. 테스트 개요

air gap 환경을 위해 다음와 같은 순서로 테스트 환경을 구축할 것이다. 테스트를 위해 aws를 사용했는데, aws를 사용하지 않을 경우 1, 3번은 다른 방식으로 구성해도 당연히 괜찮다.

 

 

  1. awsprivate subnet에 서버/클라이언트용 인스턴스 생성
  2. NAT gateway를 통해 필요한 패키지를 yum repository가 될 인스턴스에 다운로드
  3. NAT gateway를 제거하여 private subnet 내에 있는 인스턴스를 air gap 상태로 변경
  4. 이전 단계에서 구성한 yum repository 정보를 클라이언트 인스턴스에 추가
  5. 패키지 다운로드

 

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) 다운로드

샘플로 다운 받을 패키지는 구성한 인스턴스에 없는 htoptmuxansible이다.

$ 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"

 

댓글