4.12. 연결이 끊긴 환경에서 실행 환경 빌드

Ansible Automation Platform의 실행 환경 생성 은 연결이 끊긴 환경에서 다르게 작동하는 일반적인 작업입니다. 사용자 정의 실행 환경을 빌드할 때 ansible-builder 툴은 기본적으로 인터넷의 다음 위치에서 콘텐츠를 다운로드합니다.

  • 실행 환경 이미지에 추가된 모든 Ansible 콘텐츠 컬렉션에 대한 Red Hat Automation Hub(console.redhat.com) 또는 Ansible Galaxy(galaxy.ansible.com)입니다.
  • 컬렉션 종속성으로 필요한 python 패키지의 경우 PyPI(pypi.org)입니다.
  • 필요한 경우 RPM을 실행 환경 이미지에 추가하거나 업데이트하기 위한 RHEL 또는 UBI 리포지토리(cdn.redhat.com)와 같은 RPM 리포지토리입니다.
  • registry.redhat.io는 기본 컨테이너 이미지에 액세스할 수 있습니다.

연결이 끊긴 환경에서 실행 환경 이미지를 빌드하려면 이러한 위치의 콘텐츠를 미러링해야 합니다. Ansible Ansible Galaxy 또는 자동화 허브에서 프라이빗 자동화 허브로 컬렉션을 가져오는 방법에 대한 정보는 프라이빗 자동화 허브로 컬렉션 가져오기를 참조하십시오.

연결이 끊긴 네트워크로 전송된 미러링된 PyPI 콘텐츠는 웹 서버 또는 Nexus와 같은 아티팩트 저장소를 사용하여 사용할 수 있습니다. RHEL 및 UBI 리포지토리 콘텐츠는 인터넷에 연결된 Red Hat Satellite 서버에서 내보낸 다음 연결이 끊긴 Satellite로 복사한 다음 사용자 정의 실행 환경을 빌드하는 데 사용할 수 있도록 할 수 있습니다. 자세한 내용은 Air-Gapped Scenario의 ISS Export Sync 를 참조하십시오.

기본 기본 컨테이너 이미지 ee-minimal-rhel8은 사용자 지정 실행 환경 이미지를 생성하는 데 사용되며 번들 설치 프로그램에 포함됩니다. 이 이미지는 설치 시 프라이빗 자동화 허브에 추가됩니다. ee-minimal-rhel9와 같은 다른 기본 컨테이너 이미지가 필요한 경우 연결이 끊긴 네트워크로 가져와 프라이빗 자동화 허브 컨테이너 레지스트리에 추가해야 합니다.

연결이 끊긴 네트워크에서 모든 사전 요구 사항을 사용할 수 있게 되면 ansible-builder 명령을 사용하여 사용자 정의 실행 환경 이미지를 생성할 수 있습니다.

4.12.1. Ansible Builder RPM 설치

사용자 지정 실행 환경이 빌드되는 RHEL 시스템에서 환경에 이미 존재하는 Satellite 서버를 사용하여 Ansible Builder RPM을 설치합니다. 실행 환경 이미지에서 필요한 경우 기존 Satellite의 모든 RHEL 콘텐츠를 사용할 수 있으므로 이 방법을 사용하는 것이 좋습니다.

절차

  1. Ansible Automation Platform 리포지토리에서 Ansible Builder RPM을 설치합니다.

    1. 연결이 끊긴 네트워크의 Satellite에 RHEL 시스템을 서브스크립션합니다.
    2. Ansible Automation Platform 서브스크립션을 연결하고 AAP 리포지토리를 활성화합니다. 리포지토리 이름은 기본 시스템에서 사용되는 RHEL 버전에 따라 ansible-automation-platform-2.4-for-rhel-8-x86_64-rpms 또는 ansible-automation-platform-2.4-for-rhel-9-x86_64-rpms 입니다.
    3. Ansible Builder RPM을 설치합니다. 아래 예제가 제대로 작동하려면 Ansible Builder RPM 버전이 3.0.0 이상이어야 합니다.
  2. Ansible Automation Platform 설치 번들에서 Ansible Builder RPM을 설치합니다. 연결이 끊긴 네트워크에서 Satellite 서버를 사용할 수 없는 경우 이 방법을 사용합니다.

    1. Ansible Automation Platform 설치 번들의 보관을 해제합니다.
    2. 포함된 콘텐츠에서 Ansible Builder RPM 및 해당 종속 항목을 설치합니다.
$ tar -xzvf ansible-automation-platform-setup-bundle-2.4-3-x86_64.tar.gz
$ cd ansible-automation-platform-setup-bundle-2.4-3-x86_64/bundle/packages/el8/repos/
$ sudo dnf install ansible-builder-3.0.0-2.el8ap.noarch.rpm \
    python39-requirements-parser-0.2.0-4.el8ap.noarch.rpm \
    python39-bindep-2.10.2-3.el8ap.noarch.rpm \
    python39-jsonschema-4.16.0-1.el8ap.noarch.rpm \
    python39-pbr-5.8.1-2.el8ap.noarch.rpm \
    python39-distro-1.6.0-3.el8pc.noarch.rpm \
    python39-packaging-21.3-2.el8ap.noarch.rpm \
    python39-parsley-1.3-2.el8pc.noarch.rpm \
    python39-attrs-21.4.0-2.el8pc.noarch.rpm \
    python39-pyrsistent-0.18.1-2.el8ap.x86_64.rpm \
    python39-pyparsing-3.0.9-1.el8ap.noarch.rpm
참고

사용 중인 설치 번들 버전에 따라 특정 버전이 약간 다를 수 있습니다.

추가 리소스

4.12.2. 사용자 정의 실행 환경 정의 생성

Ansible Builder RPM이 설치되면 다음 단계를 사용하여 사용자 지정 실행 환경을 생성합니다.

  1. 사용자 정의 실행 환경을 생성할 때 사용되는 빌드 아티팩트용 디렉터리를 생성합니다. 아래 단계로 생성된 새 파일은 이 디렉터리에 생성됩니다.

    $ mkdir $HOME/custom-ee $HOME/custom-ee/files
    $ cd $HOME/custom-ee/
  2. 사용자 정의 실행 환경에 대한 요구 사항을 정의하는 execution-environment.yml 파일을 생성합니다.

    참고

    실행 환경 정의 형식의 버전 3이 필요하므로 계속하기 전에 execution-environment.yml 파일에 버전 3 이 명시적으로 포함되어 있는지 확인합니다.

    1. 프라이빗 자동화 허브에서 사용할 수 있는 최소 실행 환경을 가리키도록 기본 이미지를 재정의합니다.
    2. 빌드 프로세스에서 사용할 연결이 끊긴 콘텐츠 소스를 가리키는 데 필요한 추가 빌드 파일을 정의합니다. 사용자 정의 execution-environment.yml 파일은 다음 예와 유사해야 합니다.
    $ cat execution-environment.yml
    ---
    version: 3
    
    images:
      base_image:
        name: private-hub.example.com/ee-minimal-rhel8:latest
    
    dependencies:
      python: requirements.txt
      galaxy: requirements.yml
    
    additional_build_files:
      - src: files/ansible.cfg
        dest: configs
      - src: files/pip.conf
        dest: configs
      - src: files/hub-ca.crt
        dest: configs
      # uncomment if custom RPM repositories are required
      #- src: files/custom.repo
      #  dest: configs
    
    additional_build_steps:
      prepend_base:
        # copy a custom pip.conf to override the location of the PyPI content
        - ADD _build/configs/pip.conf /etc/pip.conf
        # remove the default UBI repository definition
        - RUN rm -f /etc/yum.repos.d/ubi.repo
        # copy the hub CA certificate and update the trust store
        - ADD _build/configs/hub-ca.crt /etc/pki/ca-trust/source/anchors
        - RUN update-ca-trust
        # if needed, uncomment to add a custom RPM repository configuration
        #- ADD _build/configs/custom.repo /etc/yum.repos.d/custom.repo
    
      prepend_galaxy:
        - ADD _build/configs/ansible.cfg ~/.ansible.cfg
    
    ...
  3. 개인 자동화 허브를 가리키는 files/ 하위 디렉터리에 ansible.cfg 파일을 생성합니다.

    $ cat files/ansible.cfg
    [galaxy]
    server_list = private_hub
    
    [galaxy_server.private_hub]
    url = https://private-hub.example.com/api/galaxy/
  4. 내부 PyPI 미러(웹 서버 또는 Nexus와 같은 항목)를 가리키는 files/ 하위 디렉터리에 pip.conf 파일을 생성합니다.

    $ cat files/pip.conf
    [global]
    index-url = https://<pypi_mirror_fqdn>/
    trusted-host = <pypi_mirror_fqdn>
  5. 선택 사항: bindep.txt 파일을 사용하여 사용자 지정 실행 환경을 추가하는 경우, 연결이 끊긴 Satellite 또는 RPM 리포지토리를 호스팅하는 다른 위치를 가리키는 files/ 하위 디렉터리에 custom.repo 파일을 만듭니다. 이 단계가 필요한 경우 custom.repo 파일에 해당하는 execution-environment.yml 파일의 단계 주석을 제거합니다.

    다음 예제는 UBI 리포지토리를 위한 것입니다. 다른 로컬 리포지토리도 이 파일에 추가할 수 있습니다. 웹 서버에 미러 콘텐츠가 있는 위치에 따라 URL 경로를 변경해야 할 수 있습니다.

    $ cat files/custom.repo
    [ubi-8-baseos]
    name = Red Hat Universal Base Image 8 (RPMs) - BaseOS
    baseurl = http://<ubi_mirror_fqdn>/repos/ubi-8-baseos
    enabled = 1
    gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
    gpgcheck = 1
    
    [ubi-8-appstream]
    name = Red Hat Universal Base Image 8 (RPMs) - AppStream
    baseurl = http://<ubi_mirror_fqdn>/repos/ubi-8-appstream
    enabled = 1
    gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
    gpgcheck = 1
  6. 프라이빗 자동화 허브 웹 서버 인증서에 서명하는 데 사용되는 CA 인증서를 추가합니다. 프라이빗 자동화 허브에서 설치 프로그램에서 제공하는 자체 서명된 인증서를 사용하는 경우:

    1. 개인 자동화 허브에서 /etc/pulp/certs/pulp_webserver.crt 파일을 복사하여 이름을 hub-ca.crt 로 지정합니다.
    2. hub-ca.crt 파일을 files/ 하위 디렉터리에 추가합니다.
  7. 프라이빗 자동화 허브에서 인증 기관에서 서명한 사용자 제공 인증서를 사용하는 경우:

    1. 해당 CA 인증서의 사본을 만들고 이름을 hub-ca.crt 로 지정합니다.
    2. hub-ca.crt 파일을 files/ 하위 디렉터리에 추가합니다.
  8. 이전 단계가 완료되면 사용자 정의 실행 환경 이미지에 필요한 콘텐츠를 사용하여 python requirements.txt 및 Ansible collection requirements.yml 파일을 생성합니다.

    참고

    필요한 컬렉션은 이미 프라이빗 자동화 허브에 업로드해야 합니다.

    다음 파일은 bindep.txtfiles/custom.repo 가 선택인 custom-ee/ 디렉터리에 있어야 합니다.

$ cd $HOME/custom-ee
$ tree .
.
├── bindep.txt
├── execution-environment.yml
├── files
│   ├── ansible.cfg
│   ├── custom.repo
│   ├── hub-ca.crt
│   └── pip.conf
├── requirements.txt
└── requirements.yml

1 directory, 8 files

추가 리소스

버전 3 형식 및 요구 사항에 대한 자세한 내용은 실행 환경 정의: 버전 3 형식을 참조하십시오.

4.12.3. 사용자 정의 실행 환경 빌드

새 사용자 정의 실행 환경을 생성하기 전에 콘텐츠를 다운로드하려면 개인 허브의 API 토큰이 필요합니다.

다음 단계를 수행하여 토큰을 생성합니다.

  1. 프라이빗 허브에 로그인합니다.
  2. 왼쪽 메뉴에서 "Collections"를 선택합니다.
  3. 메뉴의 "Collections" 섹션에서"API 토큰"을 선택합니다.
  4. 토큰이 있으면 Ansible Builder가 토큰에 액세스할 수 있도록 다음 환경 변수를 설정합니다.

    $ export ANSIBLE_GALAXY_SERVER_PRIVATE_HUB_TOKEN=<your_token>
  5. 명령을 사용하여 사용자 정의 실행 환경을 생성합니다.

    $ cd $HOME/custom-ee
    $ ansible-builder build -f execution-environment.yml -t private-hub.example.com/custom-ee:latest -v 3
    참고

    개인 허브 인증서가 알 수 없는 기관에서 서명한 오류로 인해 빌드가 실패하면 명령을 실행하여 필요한 이미지를 로컬 이미지 캐시로 가져올 수 있습니다.

    $ podman pull private-hub.example.com/ee-minimal-rhel8:latest --tls-verify=false

    또는 podman 인증서 저장소에 개인 허브 CA 인증서를 추가할 수 있습니다.

    $ sudo mkdir /etc/containers/certs.d/private-hub.example.com
    $ sudo cp $HOME/custom-ee/files/hub-ca.crt /etc/containers/certs.d/private-hub.example.com

4.12.4. 프라이빗 자동화 허브에 사용자 정의 실행 환경 업로드

새 실행 환경 이미지를 자동화 작업에 사용하려면 먼저 프라이빗 자동화 허브에 업로드해야 합니다.

먼저 실행 환경 이미지가 로컬 podman 캐시에 표시되는지 확인합니다.

$ podman images --format "table {{.ID}} {{.Repository}} {{.Tag}}"
IMAGE ID	    REPOSITORY					              TAG
b38e3299a65e	private-hub.example.com/custom-ee     	  latest
8e38be53b486	private-hub.example.com/ee-minimal-rhel8  latest

그런 다음 프라이빗 자동화 허브의 컨테이너 레지스트리에 로그인하고 이미지를 푸시하여 작업 템플릿 및 워크플로우와 함께 사용할 수 있도록 합니다.

$ podman login private-hub.example.com -u admin
Password:
Login Succeeded!
$ podman push private-hub.example.com/custom-ee:latest