F5 BIG-IP 및 Puppet을 활용한 애플리케이션 배포 자동화

소개

기업이 새로운 수익원을 개척하거나 단순히 경쟁력을 유지하기 위해 디지털 혁신 전략을 추진할 때, 주요 동인 중 하나는 속도, 즉 탁월한 고객 경험을 신속하게 제공할 수 있는 역량입니다. 조직이 DevOps 방법론을 도입하면서 현재의 네트워크 아키텍처가 제약 요인으로 작용한다는 사실을 깨닫고 있습니다. 기존 네트워크 아키텍처는 정적이고 인적 오류에 취약하며, 관리에 상당한 운영 투자가 필요합니다. 확장된 지속적 통합/개발(CI/CD) 파이프라인의 일부로서 애플리케이션 배포를 지원하는 네트워크 인프라뿐만 아니라 DNS 및 부하 분산과 같은 네트워크 서비스도 자동화해야 합니다.

네트워크 자동화를 통해 조직은 민첩성을 높일 수 있으며, 이를 바탕으로 더욱 동적이고 안정적인 네트워크를 구축하고 운영 효율성을 향상하며 배포 시간을 단축하고 애플리케이션을 더욱 일관되게 배포할 수 있습니다.

F5 프로그래밍 기능으로 IT 및 DevOps 생산성 향상

프로그래밍 기능은 운영 자동화를 실현하는 핵심 요소입니다. F5는 오랫동안 이 개념을 수용해 왔으며, 모든 F5® BIG-IP® 애플리케이션 딜리버리 컨트롤러(ADC)에서 프로그래밍 기능을 지원하여 애플리케이션 네트워크 서비스 패브릭의 민첩성과 확장성을 구현합니다. BIG-IP ADC의 물리적 에디션과 가상 에디션 모두 유연하고 프로그래밍 가능한 관리, 제어 및 데이터 플레인을 제공합니다:

관리 플레인

  • F5 iControl®: SOAP/XML/REST를 활용하여 서로 다른 시스템 간의 개방형 통신을 보장하고 BIG-IP 기능을 자동화합니다. 또한 F5-iControl gem을 지원하므로 웹 서비스를 통해 F5 디바이스에 연결할 수 있습니다.
  • F5 iApps®: 템플릿화된 기능 세트를 통해 F5 디바이스의 구성 및 애플리케이션 배포를 자동화할 수 있습니다.

제어 플레인

  • F5 iCall™: 이 Tcl 기반 스크립팅 프레임워크를 사용하면 일반적인 Tcl 명령과 함께 TMSH(TMOS 셸 명령줄 인터페이스) 명령을 실행하여, 실행 중인 F5 디바이스의 구성을 제어할 수 있습니다.

데이터 플레인

  • F5 iRules®: 고도로 사용자 지정이 가능하며 프로그래밍 방식으로 사용할 수 있는 Tcl 기반 스크립팅 언어인 iRules를 통해 트래픽을 실시간으로 검사, 분석, 수정, 라우팅, 리디렉션 또는 조작할 수 있습니다. 차세대 기술인 iRules Language eXtensions(LX)는 BIG-IP 플랫폼(v12.1)에서 node.js 기능을 사용할 수 있도록 지원합니다.

네트워크 프로그래밍 기능에 대한 포괄적인 접근 방식을 통해 운영 조직은 운영 및 비즈니스 관련 이벤트나 기회에 필요에 따라 대응할 수 있습니다. 네트워크 프로그래밍 기능을 제공하는 F5 제품 포트폴리오는 조직이 자동화와 오케스트레이션을 효율적으로 수행할 수 있도록 지원합니다.

F5와 Puppet의 공동 솔루션

F5와 Puppet은 포괄적인 솔루션을 통해 지속적 통합 및 지속적 배포(CI/CD)를 지원하고, 민첩성에 대한 현대 기업의 요구를 충족하기 위해 협력하고 있습니다. Puppet은 상용 지원이 제공되는 구성 관리 도구인 Puppet Enterprise를 통해 컴퓨팅, 네트워크 및 스토리지 리소스 관리를 자동화하는 통합된 소프트웨어 정의 방식을 제공하며, 조직이 애플리케이션을 더욱 원활하게 제공할 수 있도록 지원합니다.

선언적 모델 기반 IT 자동화 접근 방식을 사용하는 Puppet Enterprise를 통해 단순하고 반복적인 작업의 자동화부터 대규모 퍼블릭, 프라이빗 및 하이브리드 클라우드 배포에 이르기까지 다양한 기능을 수행할 수 있습니다. 이러한 클라우드 환경에서 구성 변경 사항을 모델링하고 테스트한 후 배포할 수 있으므로 인프라 리소스를 효율적으로 활용할 수 있습니다. 또한 조직은 모듈을 통한 Puppet의 확장성을 활용하여 기존 프레임워크를 확장하고 BIG-IP 디바이스를 지원할 수 있습니다.

일반적인 Puppet 인프라에서는 관리되는 각 시스템에 소프트웨어 에이전트가 설치됩니다. 이러한 에이전트는 시스템에 관한 여러 정보를 주기적으로 Puppet 마스터 서버에 전송하며, 이 정보를 “팩트(facts)”라고 합니다. 그러면 Puppet 마스터는 수신한 팩트와 매니페스트(Puppet 코드로 구성된 Puppet 프로그램)를 사용하여 최종 구성을 정의하는 카탈로그를 컴파일한 후, 해당 카탈로그를 에이전트로 다시 전송합니다. 이후 에이전트는 카탈로그에 정의된 대로 시스템 상태를 적용할 수 있습니다.

소프트웨어 에이전트가 노드에서 직접 실행되는 서버의 경우와 달리, Puppet 인프라에서는 BIG-IP 디바이스용 에이전트를 실행하는 프록시를 설정할 수 있습니다. 이제 BIG-IP 디바이스를 Puppet으로 관리하면서 이 솔루션이 제공하는 이점을 누릴 수 있습니다. Puppet 에이전트는 Puppet 마스터와 별도의 서버에 둘 수도 있고, 동일한 서버에서 함께 실행할 수도 있습니다.

Puppet 언어 파일은 매니페스트라고 하며, 파일 이름에는 .pp 확장자가 사용됩니다. Puppet 언어의 핵심은 리소스를 선언하는 것입니다. 언어의 다른 모든 요소는 리소스를 선언하는 방식에 유연성과 편의성을 더하기 위해 존재합니다. Puppet 마스터는 항상 현재 노드의 환경에 설정된 기본 매니페스트를 사용하며, 여기에서 리소스를 선언적으로 기술할 수 있습니다.

F5와 Puppet 공동 솔루션의 데이터 흐름은 그림 1에 나와 있습니다.

  1. Puppet 에이전트를 실행하는 프록시는 원격 셸 액세스, API 또는 기타 수단을 통해 BIG-IP 디바이스에 대한 정보를 주기적으로 검색한 다음, 이를 팩트로 Puppet 마스터에 전달합니다.
  2. Puppet 마스터는 카탈로그를 컴파일하여 에이전트 또는 프록시에 반환합니다.
  3. Puppet 프록시는 Puppet 마스터에서 받은 카탈로그를 iControl gem 코드 조각으로 변환하여 BIG-IP 디바이스에 최종 구성을 생성합니다.
  4. iControl gem 파일은 노드 구성 매개변수를 iControl 메시지로 변환하여 API를 통해 정의된 상태를 적용하는 데 사용됩니다.
그림 1: F5와 Puppet의 공동 솔루션.

이 공동 구현의 핵심 기능 두 가지는 iControl API와 Puppet Network Device Management입니다. F5 iControl API는 Puppet 프록시와 F5 BIG-IP 디바이스 간의 통신을 지원하며, Puppet Network Device Management는 조직이 네트워크 디바이스를 구성할 수 있도록 지원합니다. Puppet Network Device와 F5 iControl API를 사용하면 Puppet F5 모듈을 배포하고 BIG-IP 디바이스를 Puppet으로 관리할 수 있습니다. Puppet F5 모듈은 가상 서버의 배포 및 관리는 물론 풀과 풀 멤버의 구성 및 관리 등 BIG-IP 객체를 관리하기 위한 리소스를 제공합니다. Puppet은 F5 모듈을 사용하여 BIG-IP 디바이스에 정의된 리소스를 찾고, F5 모듈에 저장된 사용자 지정 클래스나 정의된 유형을 자동으로 로드합니다.

주요 이점

F5와 Puppet의 공동 솔루션을 통해 다음과 같은 이점을 얻을 수 있습니다:

  • 동일한 도구로 컴퓨팅 및 네트워크 인프라를 관리하여 효율성을 높일 수 있습니다.
  • 시스템 팀과 네트워킹 팀 간의 시간 소모적인 업무 인계를 없애세요.
  • BIG-IP 디바이스의 구성 일관성을 유지합니다(구성이 원하는 상태에서 벗어날 때마다 Puppet이 자동으로 설정된 상태로 되돌립니다).
  • 구성을 한 번 작성하여 대규모의 여러 시스템에 적용할 수 있으므로 확장성과 서비스 탄력성을 확보할 수 있습니다.
  • 신속한 재현을 지원합니다. 애플리케이션을 사전 프로덕션 환경에서 프로덕션 환경으로 전환할 때 Puppet을 실행하기만 하면, Puppet이 테스트 환경에서와 동일한 방식으로 모든 항목을 구성합니다.
  • 애플리케이션 제공 속도를 높입니다.

Puppet F5 모듈은 일반적인 애플리케이션 배포에 필요한 서버 노드, 풀, 가상 서버 등의 BIG-IP 객체를 생성하고 구성할 수 있습니다. 여러 BIG-IP 디바이스를 배포할 때 조직은 Puppet 모듈을 사용하여 디바이스 라이선스, DNS 및 NTP 설정, 내부 및 외부 VLAN, 셀프 IP, 라우트 도메인 등 모든 초기 BIG-IP 온보딩 작업을 자동화할 수 있습니다.

사용 사례: BIG-IP 플랫폼에서 HTTP 애플리케이션 배포

BIG-IP 디바이스에서 일반적인 HTTP 애플리케이션을 구성하려면 노드, 모니터 및 프로파일을 설정하고 가상 IP 주소를 배포하는 등 여러 작업을 수행해야 합니다. 단일 BIG-IP 디바이스에서는 자동화 없이도 관리할 수 있을 것처럼 보이지만, 대규모 엔터프라이즈 애플리케이션을 제공하기 위해 여러 데이터 센터에 걸쳐 여러 F5 디바이스를 구성하는 작업은 복잡하고 시간이 많이 소요되며 오류가 발생하기 쉽습니다. 조직은 선언적 모델 기반 Puppet 매니페스트를 사용하여 여러 데이터 센터의 여러 BIG-IP 디바이스에서 애플리케이션 배포를 관리하고 자동화할 수 있습니다.

배포를 시작하려면 Puppet 마스터를 설치하고 Puppet 에이전트를 실행할 수 있는 프록시 시스템을 생성합니다. 또한 프록시 호스트(Puppet 에이전트)의 Puppet Ruby 환경에 iControl gem 및 Faraday gem을 비롯한 모든 종속성을 설치해야 합니다. 배포 구성은 그림 2에 나와 있습니다.

그림 2: F5와 Puppet의 공동 솔루션 배포.

device.conf 파일 만들기

F5 모듈을 사용하려면 먼저 Puppet 프록시의 Puppet 구성 디렉터리(device.conf 파일을 생성해야 합니다. 디렉터리는 /etc/puppet 또는 /etc/puppetlabs/puppet 중 하나입니다:

[bigip1]
type f5
url https://admin:admin@10.192.74.111

위 예에서 admin:admin@10.192.74.111 은 F5 디바이스에 대한 Puppet의 로그인 정보인 <사용자 이름>:<비밀번호>@<BIGIP의 IP 주소>를 나타냅니다.

Puppet 마스터에서 노드 분류

그런 다음 site.pp의 관련 클래스 문이나 노드 선언, <devicecertname>.pp 노드 매니페스트 또는 profiles::<profile_name> 매니페스트 파일에 구성을 입력합니다. 다음은 BIG-IP 플랫폼에서 HTTP 애플리케이션을 구성하기 위한 Puppet 매니페스트 파일(site.pp)의 예입니다:

node bigip1 {
f5_node { '/Common/web_server_1':
ensure => 'present',
address => '10.1.20.11',
description => 'Web Server Node 1',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->

f5_node { '/Common/web_server_2':
ensure => 'present',
address => '10.1.20.12',
description => 'Web Server Node 2',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->

f5_node { '/Common/web_server_3':
ensure => 'present',
address => '10.1.20.13',
description => 'Web Server Node 3',
availability_requirement => 'all',
health_monitors => ['/Common/icmp'],
}->

f5_pool { '/Common/web_pool':
ensure => 'present',
members => [
{ name => '/Common/web_server_1', port => '80', },
{ name => '/Common/web_server_2', port => '80', },
{ name => '/Common/web_server_3', port => '80', },
],
availability_requirement => 'all',
health_monitors => ['/Common/http_head_f5'],
}->

f5_virtualserver { '/Common/http_vs':
ensure => 'present',
provider => 'standard',
default_pool => '/Common/web_pool',
destination_address => '10.1.10.240',
destination_mask => '255.255.255.255',
http_profile => '/Common/http',
service_port => '80',
protocol => 'tcp',
source => '0.0.0.0/0',
source_address_translation => 'automap'
}

}

이 예제에는 세 가지 작업이 포함되어 있습니다:

  1. 먼저 웹 서버를 설정해야 합니다. “f5_node”라는 F5 모듈은 다음 세 개의 웹 서버를 추가합니다: web_server_1, web_server_2, 그리고 web_server_3. 각 서버는 가능한 최소한의 매개변수로 구성되며, 서버에 직접 ping을 보내 응답 상태를 확인하는 상태 모니터가 포함됩니다.
  2. 다음으로 서버 풀을 구성합니다. “f5_pool” 모듈은 web_pool이라는 풀을 생성하고 위에서 생성한 노드 멤버도 풀 멤버로 추가합니다.
  3. “f5_virtualserver” 모듈은 가상 서버 http-vs를 http 프로파일 및 위에서 생성한 web_pool과 함께 생성합니다.

puppet device 실행

Before running puppet device를 실행하기 전에는(Puppet Network Device용 명령), BIG-IP 디바이스에 구성된 가상 서버, 풀 또는 노드가 없습니다. puppet device -v --user=root 명령을 실행하면 디바이스 프록시 노드가 인증서를 생성하고 사용자의 분류를 F5 디바이스에 적용합니다.

아래와 같이 모든 작업이 실패 없이 성공적으로 완료되었습니다.

$ sudo puppet device -v --user=root –trace
정보: https://10.192.74.111:443의 bigip1에 구성 적용 시작
정보: pluginfacts 가져오는 중
정보: 플러그인 가져오는 중
정보: bigip1의 카탈로그 캐싱 중
정보: 구성 버전 '1498175426' 적용 중
알림: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_1]/ensure: 생성됨
알림: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_2]/ensure: 생성됨
알림: /Stage[main]/Main/Node[bigip1]/F5_node[/Common/web_server_3]/ensure: 생성됨
알림: /Stage[main]/Main/Node[bigip1]/F5_pool[/Common/web_pool]/ensure: 생성됨
알림: /Stage[main]/Main/Node[bigip1]/F5_virtualserver[/Common/http_vs]/ensure: 생성됨
정보: Node[bigip1]: Node[bigip1]의 모든 이벤트 예약 취소 중
알림: 0.50초 만에 카탈로그 적용 완료

이제 Puppet이 완전히 구성된 새 가상 서버를 생성했습니다(그림 3). 이 서버는 새로 생성된 풀 전체에 HTTP 애플리케이션의 부하를 분산합니다(그림 4). 이 풀에는 새로 생성된 웹 서버 3대가 포함되어 있습니다(그림 5).

그림 3: Puppet에서 생성한 가상 서버(“http_vs”).
그림 4: Puppet에서 생성한 BIG-IP 풀.
그림 5: Puppet에서 생성한 BIG-IP 풀.

모든 Puppet F5 모듈은 멱등성을 갖습니다. 즉, 노드 상태가 구성된 상태 또는 원하는 상태와 일치하지 않는 경우에만 작업이 실행됩니다. 다시 말해 동일한 매니페스트를 다시 실행해도 Puppet은 이러한 객체를 재구성하지 않습니다.

정보: https://10.192.74.111:443의 bigip1에 구성 적용 시작
정보: pluginfacts 검색 중
정보: 플러그인 검색 중
정보: bigip1의 카탈로그 캐싱 중
정보: 구성 버전 '1498522983' 적용 중
알림: 카탈로그가 1.51초 만에 적용됨

결론

자동화는 DevOps와 CI/CD의 핵심 요소이며, 대개 구성 관리에서 시작됩니다. F5와 Puppet의 공동 솔루션을 통해 운영 팀은 전체 애플리케이션 인프라 스택의 구성을 배포하고 자동화하며 관리할 수 있습니다. 이를 통해 애플리케이션 개발자는 인프라 리소스를 탄력적으로 확장하거나 축소하고, 애플리케이션 테스트를 자동화하며, 애플리케이션 개발 기간을 단축할 수 있습니다. 그 결과 조직은 전례 없는 수준의 민첩성과 확장성을 확보할 수 있습니다.

F5와 Puppet의 공동 솔루션이 귀사의 비즈니스에 어떤 도움을 줄 수 있는지 자세히 알아보려면 forge.puppet.com/f5/f5 페이지를 방문하세요.

2017년 10월 5일 게시