티스토리 뷰

728x90
반응형

오늘은 마이크로서비스 아키텍처를 설계하는데 있어서 핵심 요소 중 하나인 API Gateway 제품 중 Tyk (타이크) 오픈소스 게이트웨이 설치 과정에 대해 살펴보겠습니다.

 

설치과정은 매우 간단합니다.

Tyk의 아키텍처를 간단히 살펴보면

구성요소로 API Gateway, Dashboard, Pump 3요소 + Redis, MongoDB Dependency Module로 구성되어 있습니다.

파란 라인의 경우 관리자가 Tyk 대시보드로 접근하여 API Gateway에 수집된 Metrics를 확인하는 과정입니다.

주황 라인의 경우 API 소비자가 L4, DNS 등의 로드밸런서를 통해 이중화 또는 다중화 된 API Gateway에 접근하여 마이크로서비스를 호출하는 과정입니다.

마지막 빨간 라인의 경우 Dashboard, API Gateway에서 저장할 Log나 Metrics 정보를 Redis로 전송하면, Pump 모듈은 해당 정보를 MongoDB 또는 3rd Party Module로 전송하는 역할을 수행합니다.

 

설치과정 역시 매우 간단합니다.

1) tyk-dashboard 설치

- yum install -y epel-release

- yum install python34

- yum install pygpgme yum-utils wget

- tyk yum repo add


[tyk_tyk-dashboard]

name=tyk_tyk-dashboard

baseurl=https://packagecloud.io/tyk/tyk-dashboard/el/7/$basearch

repo_gpgcheck=1

gpgcheck=1

enabled=1

gpgkey=http://keyserver.tyk.io/tyk.io.rpm.signing.key

https://packagecloud.io/tyk/tyk-dashboard/gpgkey

sslverify=1

sslcacert=/etc/pki/tls/certs/ca-bundle.crt

metadata_expire=300


- MongoDB yum repo add


[mongodb-org-3.0]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/

gpgcheck=0

enabled=1


- yum repolist -y

- yum -q makecache -y --disablerepo='*' --enablerepo='tyk_tyk-dashboard'

- yum install -y mongodb-org tyk-dashboard redis

 

2) tyk-dashboard 기동


[root@guruson install]# ./setup.sh --listenport=3000 --redishost=localhost --redisport=6379 --mongo=mongodb://localhost/tyk_analytics --tyk_api_hostname=$HOSTNAME --tyk_node_hostname=http://localhost --tyk_node_port=8080 --portal_root=/portal --domain="xxx.xxx.xxx.xxx" 
Listen Port   = 3000 
Redis Host    = localhost 
Redis Port    = 6379 
Redis PW      =  
Mongo URL     = mongodb://localhost/tyk_analytics 
API Hostname  = guruson 
Tyk Node      = http://localhost 
Tyk Port      = 8080 
Dash Hostname = xxx.xxx.xxx.xxx 
Portal Root   = /portal 
==> File written to ./tyk_analytics.conf 
==> File copied to /opt/tyk-dashboard/install/../tyk_analytics.conf 
[root@guruson install]# systemctl enable tyk-dashboard 
[root@guruson install]# systemctl restart tyk-dashboard 
[root@guruson install]#


- systemctl enable mongod
- systemctl enable redis
- systemctl enable tyk-dashboard
- systemctl start mongod
- systemctl start redis
- systemctl start tyk-dashboard

기동이 완료된 후 http://ip:3000으로 접속하면 Tyk Login 화면이 나옵니다. 이때 최초 접속의 경우 라이센스를 입력하라는 창이 나오며, 아래와 같은 3번 과정을 수행하여 라이센스를 발급 받아 적용합니다.

 

3) tyk license 발급 및 적용

무료 라이센스는 다음 사이트에서 발급 받을 수 있습니다.

https://tyk.io/product/tyk-on-premises-free-edition/

사이트에 게시된 글에는

"개발자는 무료로 Tyk On-Premises를 사용할 수 있습니다. "
- Tyk API 관리 대시 보드 및 분석
- 단일 Tyk API 게이트웨이 노드 관리
- 모든 기능을 갖춘 소프트웨어, 제거 된 기능 없음
"무료 라이센스는 비상업적 용도로만 1 개의 Tyk 노드를 관리하는 데 유효합니다. 또한 비상업적 인 용도로 언제든지 단일 노드를 자유롭게 관리 할 수 ​​있기 때문에 원하는만큼 라이센스를 갱신 할 수 있습니다."

라고 적혀있어 개발 용도로는 언제든지 무료 라이센스를 갱신하여 사용할 수 있습니다.

라이센스는 발급 받으면 이메일로 코드가 전송되며 로그인 화면에 입력하면 아래와 같이 실제 로그인 창으로 변경되는 것을 확인할 수 있습니다.

이때 로그인을 위한 계정 생성을 진행해야 하는데 아래와 같이 생성이 가능합니다.


[root@guruson install]# /opt/tyk-dashboard/install/bootstrap.sh xxx.xxx.xxx.xxx
Found Python interpreter at: /usr/bin/python

Creating Organisation
ORG DATA: {"Status":"OK","Message":"Org created","Meta":"5d29dbd683d4b45c34f91ba1"}
ORG ID: 5d29dbd683d4b45c34f91ba1

Adding new user
USER AUTHENTICATION CODE: d7bad8cbda87491a4e461711fb0f45f8
NEW ID: 5d29dbd624c61de7c99e9ea3

Setting password
{"Status":"OK","Message":"User password updated","Meta":null}

DONE
====
Login at http://xxx.xxx.xxx.xxx:3000/
User: abcd@default.com
Pass: 1234abcd 

[root@guruson install]# 


위와 같이 무작위로 생성된 계정 정보와 비밀번호는 최초 로그인 용도로만 사용하고 직접 관리자 계정을 변경하여 사용하는 것을 추천합니다.

로그인 후 왼쪽 메뉴바 → System Management → Users를 선택하고 기본 생성된 계정을 본인이 원하는 계정으로 변경합니다.

이때 Email Address는 접속 계정 ID로 사용됩니다.

또한 오른쪽 상단의 RESET PASSWORD를 사용하여 비밀번호 역시 변경해 주도록 합니다.

4) Tyk Pump 설치

- tyk_pump yum repo add


[tyk_tyk-pump]

name=tyk_tyk-pump

baseurl=https://packagecloud.io/tyk/tyk-pump/el/7/$basearch

repo_gpgcheck=1

gpgcheck=1

enabled=1

gpgkey=http://keyserver.tyk.io/tyk.io.rpm.signing.key https://packagecloud.io/tyk/tyk-pump/gpgkey

sslverify=1

sslcacert=/etc/pki/tls/certs/ca-bundle.crt

metadata_expire=300


- yum repolist -y

- yum -q makecache -y --disablerepo='*' --enablerepo='tyk_tyk-pump'

- yum install -y tyk-pump

- /opt/tyk-pump/install/setup.sh --redishost=localhost --redisport=6379 --mongo=mongodb://localhost/tyk_analytics


[root@guruson ~]# /opt/tyk-pump/install/setup.sh --redishost=localhost --redisport=6379 --mongo=mongodb://localhost/tyk_analytics
Redis Host  = localhost
Redis Port  = 6379
Redis PW    = 
Use Mongo   = 
Mongo URL   = mongodb://localhost/tyk_analytics
==> File written to ./pump.conf
==> File copied to /opt/tyk-pump/install/../pump.conf
[root@guruson ~]# 


5) Tyk Pump 기동

- systemctl enable tyk-pump

- systemctl start tyk-pump

- journalctl -u tyk-pump

 

6) Tyk gateway 설치

- tyk gateway yum repo add


[tyk_tyk-gateway]

name=tyk_tyk-gateway

baseurl=https://packagecloud.io/tyk/tyk-gateway/el/7/$basearch

repo_gpgcheck=1

gpgcheck=1

enabled=1

gpgkey=http://keyserver.tyk.io/tyk.io.rpm.signing.key

https://packagecloud.io/tyk/tyk-gateway/gpgkey

sslverify=1

sslcacert=/etc/pki/tls/certs/ca-bundle.crt

metadata_expire=300


- yum repolist -y

- yum -q makecache -y --disablerepo='*' --enablerepo='tyk_tyk-gateway' --enablerepo=epel

- yum install -y tyk-gateway

 

7) Tyk gateway 기동

- systemctl enable tyk-gateway

- systemctl start tyk-gateway

- journalctl -u tyk-gateway

 

Tyk 활용 가이드는 차차 업로드 할 예정이며, 불행이도 Tyk 메뉴얼 업데이트가 좀 느린지.. 버전 차이가 있어서 아래 커뮤니티 게시판을 활용하시는 방안을 추천드립니다.

https://community.tyk.io/

 

#참조

mongodb statics 설정 방법

Tyk Dependency 모듈인 mongodb에 metrics & log 등을 저장하여 관리합니다.

이때 정상적으로 데이터가 누적되고 있는지 확인하기 위해서는 다음과 같은 과정으로 확인할 수 있습니다.

1) tyk.conf 수정 (/opt/tyk-gateway/tyk.conf)


...

"enable_analytics": true,

"analytics_config": {

    "type": "mongo",

    "mongo_url": "mongodb://localhost/tyk_analytics",

    "mongo_db_name": "tyk_analytics",

    "mongo_collection": "tyk_analytics",

    "purge_delay": 10,

    "ignored_ips": []

},

...


2) mongbdb 확인

mongodb는 3.0.15 version을 사용하였습니다.

[root@guruson ~]# mongo
> show dbs
local            0.078GB
tyk_analytics  0.078GB
> use tyk_analytics
switched to db tyk_analytics
> show collections
system.indexes
tyk_analytics
tyk_analytics_aggregates
tyk_analytics_users
tyk_apis
tyk_organisations
tyk_uptime_analytics
z_tyk_analyticz_aggregate_asdfqwer1234qwerasdfzxcv
> db.tyk_analytics.count()
30
## api 5번 호출 후 →
> db.tyk_analytics.count()
35
> db.tyk_analytics.findOne()
{
"_id" : ObjectId("549c30c5e3eb809beead5f13"),
"method" : "GET",
"path" : "",
"contentlength" : NumberLong(0),
"useragent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
"day" : 22,
"month" : 07,
"year" : 2019,
"hour" : 15,
"responsecode" : 200,
"apikey" : "",
"timestamp" : ISODate("2019-07-22T15:44:02.614Z"),
"apiversion" : "Non Versioned",
"apiname" : "rcsousa API",
"apiid" : "1",
"orgid" : "default",
"oauthid" : ""
}
> exit
[root@guruson ~]#

 

728x90
반응형