관리 메뉴

I.K.Picture & IT Info.

[cloud foundry] 서비스 브로커 추가 방법 본문

Cloud/CloudFoundry

[cloud foundry] 서비스 브로커 추가 방법

helpful-intruder 2020. 5. 15. 14:59

클라우드 파운더리에서 DB, 메세징 서비스 등 서드파티 소프트웨어와 같은 것들은 "서비스" 형태로 배포됩니다. 

 

그리고 이 서비스 형태로 배포된 애들은 서비스 브로커라는 연계자?를 통해 다른 앱들에서 활용하는 것이 가능합니다.

 

물론, 모든 서비스들이 브로커가 있는건 아니지만 대부분 존재하는 경우가 많이 있죠.

 

그렇기 때문에 PaaS 운영자가 직접 어떤 기술에 대해 서비스 형태로 제공하려면 서비스 브로커를 만들어서 

배포한 후 이를 서비스 형태로 제공하게됩니다. 

 

쉽게 예로 디비 서비스를 설명해볼께요.

디비 서비스를 PaaS에서 서비스 형태로 제공하기 위해 일단 먼저 데이터베이스가 설치된 컨테이너 또는 가상환경을 구성합니다. (해당 부분은 PaaS 운영자이기 때문에 가능하겠죠)

 

그런 후 클라우드 파운더리에서 제공하는 서비스 브로커 (앱 형태)를 다운로드 받거나 없을 경우 직접 만듭니다.

 

직접 만들경우 기반 프로젝트를 받아서 만들면됩니다.

제가 많이 사용하는게 spring이다보니 전 spring 기반으로된 내용을 링크해드리겠습니다.

https://github.com/spring-cloud-samples/cloudfoundry-service-broker

 

spring-cloud-samples/cloudfoundry-service-broker

Sample project for Spring Cloud - Cloud Foundry Service Broker - spring-cloud-samples/cloudfoundry-service-broker

github.com

MySQL을 예로 들었으니 찾아보겠습니다. 있네요

https://github.com/cloudfoundry/cf-mysql-broker

 

cloudfoundry/cf-mysql-broker

Contribute to cloudfoundry/cf-mysql-broker development by creating an account on GitHub.

github.com

 

 

이렇게 받은것을 가지고 클라우드 파운더리에 앱을 배포하는 형태로 배포를 하게됩니다. 

그런 후 해당 앱을 서비스 브로커로 등록을 하죠 

등록 후에는 PaaS 마켓 플레이스에서 다른 사용자들이 볼 수 있도록 등록을 해줍니다.

 

이렇게 하면 PaaS에 등록하는 앱들이 디비 서비스를 이용할 수 있도록 제공되는겁니다. 

 

 

오늘 그럼 해볼 서비스 등록은 서비스 브로커가 존재하고 있는 PostgreSQL에 대한 서비스 등록입니다. 

 

단계는 이렇게 정리되겠네요.

  1. PostgreSQL 서버 구축 및 설정 변경

     (전 IaaS를 OpenStack으로 구축하여 cloud foundry를 구축했기 때문에 가상 머신 하나를 추가하여 구축하였습니다)

  2. PostgreSQL 서비스 브로커 다운로드 및 몇가지 사항 변경 

  3. cloud foundry에 서비스 브로커 배포

  4. cloud foundry에 배포한 서비스 브로커 활성화 및 마켓플레이스 등록

 

 

단계 자체는 그리 복잡하지 않죠?? 

자 그럼 하나씩 가보도록 하겠습니다.

 

 

1. PostgreSQL 서버 구축 및 설정 변경

뭐 이건... 사실 일반적인 설치 과정이기 때문에 별거 없어요 ubuntu 기준으로 설명을 드리도록 할께요

아래 파일 추가하여 deb 쪽 내용을 추가합니다. 

$sudo vi /etc/apt/sources.list/pgdg.list

 

deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main   

저장하고 나감

$wget --quiet -O https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

$sudo apt update 

$sudo apt upgrade

$sudo apt install postgresql-9.6

여기까지가 postgresql 설치 방법입니다. 

 

설정 변경 /etc 안 postgresql 설치 경로로 이동하여 pg_hba.conf를 수정합니다. postgresql.conf도 같이 수정해야합니다.

$sudo vi /etc/postgresql/9.6/main/postgresql.conf

  listen_addresses = '*'     // 얘를 활성화

 

맨마지막 줄에 아래 내용 추가

$sudo vi /etc/postgresql/9.6/main/pg_hba.conf

  host    all    all    0.0.0.0/0    md5     

 

$sudo service postgresql restart

 

 

2. PostgreSQL 서비스 브로커 다운로드 및 소스코드 수정

postgresql은 다행히(?) 서비스 브로커를 cloud foundry 에서 제공해줍니다. 

https://github.com/cloudfoundry-community/postgresql-cf-service-broker

 

cloudfoundry-community/postgresql-cf-service-broker

Cloud Foundry Service Broker for a PostgreSQL instance - cloudfoundry-community/postgresql-cf-service-broker

github.com

 

해당 github 들어가서 다운로드를 받고 

그대로 올리면 서비스 브로커 등록시 다음과 같은 에러가 나올 수 있습니다.

Service broker error: The provided service broker API version is not supported: Expected Version = 2.4, Provided Version = 2.15

 

해당 부분에 대해 명확하게 확인을 하진 못했지만 아래와 같이 내용을 추가해주니 오류가 나오지 않았어요

(나중에 명확히 확인이 되면 추가 내용으로 올리도록 하겠습니다)

 

추가해야되는 내용  config/BrokerConfiguration.java 에 보면 BrokerAPIVersion 작성한 import 부분과

brokerApiVersion() Bean을 소스코드에 추가해줍니다. 

package org.cloudfoundry.community.servicebroker.postgresql.config;

import org.cloudfoundry.community.servicebroker.config.BrokerApiVersionConfig;
import org.cloudfoundry.community.servicebroker.model.Catalog;
import org.cloudfoundry.community.servicebroker.model.Plan;
import org.cloudfoundry.community.servicebroker.model.ServiceDefinition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.cloudfoundry.community.servicebroker.model.BrokerApiVersion;


@Configuration
@ComponentScan(basePackages = "org.cloudfoundry.community.servicebroker", excludeFilters = { @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = BrokerApiVersionConfig.class) })
public class BrokerConfiguration {

    private static final Logger logger = LoggerFactory.getLogger(BrokerConfiguration.class);

    @Value("${MASTER_JDBC_URL}")
    private String jdbcUrl;


    @Bean
    public BrokerApiVersion brokerApiVersion() {
            return new BrokerApiVersion();
    }


    @Bean
    public Connection jdbc() {
        try {
            Connection conn = DriverManager.getConnection(this.jdbcUrl);

            String serviceTable = "CREATE TABLE IF NOT EXISTS service (serviceinstanceid varchar(200) not null default '',"
                    + " servicedefinitionid varchar(200) not null default '',"
                    + " planid varchar(200) not null default '',"
                    + " organizationguid varchar(200) not null default '',"
                    + " spaceguid varchar(200) not null default '')";
  ...
  

 

 

이렇게 추가한 내용을 가지고 이제 일단 jar 파일 생성

아, 참고로 이 때 test를 수행하기 때문에 해당 데이터베이스가 로컬이라는 가정 하 travis_ci_test 데이터베이스를 추가해줘야하며, 만약 원격 상에서 작업을 하는 중이라면 test resource 폴더에 있는 DB 정보를 변경해줘야합니다. 

$mvn package

 

이렇게 jar 파일을 만들면 이제 준비는 끝난겁니다. 

 

 

제가 확인한 mvn 시 오류나는 경우는 2가지 입니다.

1. maven 저장소가 다운로드 되지 않는 경우 (service broker )

2. test 수행 중 오류가 나는 경우 

 

1번의 경우 수동으로 다운로드를 받아서 maven 저장소 m2 에다가 알맞게 넣어줘야되더군요

(왜 자동으로 못받는지.. 접근 권한이 없다고합니다)

아래 링크 파일을 다운로드 받아서 m2 폴더에다가 넣어주세요.

org.zip
0.05MB

 

2번의 경우 빌드 자바 버전이 문제입니다. 자바 버전 8을 설치하셔서 하셔야됩니다. 

 

3. cloud foundry에 서비스 브로커 배포

명령어는 간단합니다.

일단 cf push를 통해 해당 앱을 배포합니다. (물론 이전에 cf login을 해야겠죠? 해당 부분은 아신다는 가정하 생략합니다)

실행 위치는 service broker 프로젝트 폴더입니다. 

 

$cf push postgresql-cf-service-broker -p target/postgresql-cf-service-broker-2.4.0-SNAPSHOT.jar --no-start

 

실행 결과는 뭐 환경마다 다르지만 제가 수행한 결과에 대한 캡쳐 사진을 아래에 공유하겠습니다.

상태를 보면 down으로 되어있죠?

그럴 수밖에 없는게 배포 시 --no-start 명령어를 썼기때문입니다. 

이 이유는 바로 아래 나옵니다. 

 

그 다음 이제 앱을 실행해야되는데 실행하기 전 아래 환경설정이 필요합니다.

$cf set-env postgresql-cf-service-broker MASTER_JDBC_URL 'jdbc:postgresql://172.16.1.13:5432/cfManager?user=postgres&password=postgres'

$cf set-env postgresql-cf-service-broker JAVA_OPTS "-Dsecurity.user.password=postgres"

아래 보이는 jdbc 주소는 당연히 postgresql 인스턴스에 대한 주소였고 cfManager 데이터베이스 이름은 앞으로 서비스들이 binding 될텐데 해당 서비스들에 대한 관리를 하는 데이터베이스이므로 생성이되어있어야합니다. postgresql에 대한 사용자 아이디와 비밀번호 작성해주시면되구요 

 

이렇게 한 후 서비스 브로커 앱을 실행합니다. (처음에 실행 안한 이유는 위처럼 DB url 등을 설정을 해야되기 때문에 배포와 동시에 실행을 안시킨겁니다. 

 

실행 결과입니다.

 

사진 맨 아래보이는 것처럼 running이 떠야합니다. 

 

4. cloud foundry에 배포한 서비스 브로커 활성화 및 마켓플레이스 등록

  자, 이렇게 된 상태는 단순히 앱으로 배포한 것이기 때문에 이를 이제 서비스 형태로 제공하기 위한 작업을 수행합니다

서비스 브로커를 등록해줍니다. 

 

$cf create-service-broker postgresql-cf-service-broker user postgres http://postgresql-cf-service-broker.app.113.198.0.0.xip.io 

 

명령어 : cf create-service-broker 

앱 이름 : postgresql-cf-service-broker

사용자이름 : user

비밀번호 : postgres

앱 라우터 : http://postgresql-cf-service-broker.app.113.198.0.0.xip.io

 

 

서비스 브로커 마켓플레이스 등록

$cf enable-service-access PostgreSQL -p "Basic PostgreSQL Plan"

 

이렇게 등록까지하면 사용할 수 있는데 org 마다 등록을 해줘야 사용이 가능하므로 등록 명령어도 알고 있어야됩니다.

 

$cf enable-service-access (서비스명) -o (기관명)

 

만약 기관(org) 명이 test라고하면

$cf enable-service-access PostgreSQL -o test

 

가 되겠죠~?

이렇게 딱 하면 다음과 같이 마켓플레이스에 PostgreSQL이 보여지게됩니다.

위에 캡처 사진에도 예제가 포함되어 있으니 확인하세요.

 

 

 

 

전, 피보탈에서 제공하는(지금은 VMWare에서 인수했죠) 클라우드 파운더리를 설치했구요

압축? 설치가 아닌 실제 모든 기능을 다 설치해놓은 상태입니다. 

IaaS : OpenStack

PaaS : PCF  (현재는 TAS라고해야될까요)

 

간단한거 같지만 간단하지 않은 IaaS와 PaaS에 대해 시간 나는데로 차근차근 정리를 해보고 있습니다. 

주로 오픈소스 관련된 내용으로 정리가 될꺼같구요.

저도 지금 여러가지 연구를 하고 있는 입장에서

어떤 질문이라도 좋으니 질문있으신 분들은 댓글 남겨주세요 :)

 

0 Comments
댓글쓰기 폼