您好,登錄后才能下訂單哦!
之前項目上api的接口用的是自己nginx搭建的反向代理接口,覺得功能性比較查差,故而另辟蹊徑找到了kong作為接口網關服務。
kong會把所有的后端接口對應的數據放到cassandra數據庫中,對外只暴漏自己的接口,這樣對于前端的開發人員來說就透明了許多,也方便了許多,后端的運維人員管理起來也方便了許多。
系統版本:CentOS release 6.7 (Final)
kong版本:0.9.9
gcc版本:4.8.2 (GCC)
npm版本:3.8.6
node版本:5.11.1
python版本:Python 2.7.8
cassandra版本:dsc22.noarch
jdk版本:>1.7.25
$ wget https://bintray.com/mashape/kong-rpm-el6-0.9.x/rpm -O bintray-mashape-kong-rpm-el6-0.9.x.repo
$ mv bintray-mashape-kong-rpm-el6-0.9.x.repo /etc/yum.repos.d/
$ yum install kong
$ kong start -c <path_to_config>
檢查kong是不是正常啟動了,默認不修改配置文件的情況下會報連接不上PostgreSQL,這里先忽略,繼續裝cassandra
正常啟動的話會輸出:[OK] Started
kong的監聽端口:
8000: API請求的代理層。
8001: restful的配置管理API。
8443: 代理HTTPS
7946: 用于和其他Kong節點通訊,支持TCP/UDP流量
7373: 用于本地集群代理通訊
$ kong stop
$ kong reload
$ kong restart
這里就不演示安裝了,yum也行,綠色版解壓也行。java1.7 或者1.8都可以,注意cassandra3.0必須要jdk1.8版本才行。這里我們由于kong的支持版本是2.x,這里介紹2.x的安裝。
vim /etc/yum.repos.d/datastax.repo
[datastax]
name = DataStax Repo for Apache Cassandra
baseurl = http://rpm.datastax.com/community
enabled = 1
gpgcheck = 0
yum search dsc
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
========================================================= N/S Matched: dsc ==========================================================
dsc1.1.noarch : Meta RPM for installation of the DataStax DSC platform
dsc12.noarch : Meta RPM for installation of the DataStax DSC platform
dsc20.noarch : Meta RPM for installation of the DataStax DSC platform
dsc21.noarch : Meta RPM for installation of the DataStax DSC platform
dsc22.noarch : Meta RPM for installation of the DataStax DSC platform
dsc30.noarch : Meta RPM for installation of the DataStax DSC platform
雖然有3.0,但是目前kong只支持2.2.x ,這里我就安裝2.2版本
yum install dsc22
估計會報這個錯誤
cqlsh
Traceback (most recent call last):
File "/usr/bin/cqlsh.py", line 160, in <module>
from cqlshlib import cql3handling, cqlhandling, pylexotron, sslhandling
ImportError: No module named cqlshlib
cqlsh是cassandra的客戶端查詢工具
cqlsh客戶的工具需要python2.7支持,centos6.x默認是python2.6版本,這里我新安裝下python2.7
首先安裝 python 工具需要的額外軟件包 SSL, bz2, zlib
yum install -y zlib-devel bzip2-devel openssl-devel xz-libs wget
$ wget http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz
$ xz -d Python-2.7.8.tar.xz
$ tar -xvf Python-2.7.8.tar
$ cd Python-2.7.8
$ ./configure --prefix=/usr/local
$ make
$ make altinstall
$ python2.7 -V
Python 2.7.8
$ mv /usr/bin/python /usr/bin/python2.6.6
$ ln -s /usr/local/bin/python2.7 /usr/bin/python
因為yum使用python2.6 故而要改一下yum的環境,不然yum將沒法使用
$ which yum
/usr/bin/yum
#修改 yum中的python
將第一行 #!/usr/bin/python 改為 #!/usr/bin/python2.6
$ curl https://bootstrap.pypa.io/get-pip.py | python2.7
解決cqlsh報錯問題,下面的步驟可能要耗費很長的時間,建議大家耐心等等
$pip install cqlshlib
$pip install cql
$pip install cassandra-driver
$pip install cqlsh
$cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.2.8 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh> create schema testschema
... with replication = {'class':'SimpleStrategy', 'replication_factor':1};
cqlsh> describe keyspaces;
system testschema system_traces
cqlsh> use testschema;
cqlsh:testschema> create table user (
... user_id varchar primary key,
... first varchar,
... last varchar,
... age int
... );
... user_id varchar primary key,
... first varchar,
... last varchar,
... age int
... );
cqlsh:testschema>
cqlsh:testschema> insert into user (user_id, first, last, age) values ('rfroncois', 'ronn', 'francois', 20);
cqlsh:testschema> select * from user;
user_id | age | first | last
-----------+-----+-------+----------
rfroncois | 20 | ronn | francois
小編發現kong的配置文件總計三處
/etc/kong/kong.conf.default
/usr/local/kong/kong.conf
/usr/local/share/lua/5.1/kong/templates/kong_defaults.lua
最開始的時候,小編裝好數據庫和kong,啟動kong的時候,修改了/etc/kong/kong.conf.default的配置連接數據庫的類型為cassandra,啟動的時候死活就是連不上啊,報的還是連不上PostgreSQL數據庫,而且每次重啟kong服務后,修改后的配置文件被重置了。真實奇葩,猜想必然這個配置文件不是主配置文件啊。
/usr/local/share/lua/5.1/kong/templates/kong_defaults.lua----->主配置文件,那咱就來看看這個文件的具體內容吧。
return [[
--安裝路徑
prefix = /usr/local/kong/
--日志等級
log_level = notice
--默認插件
custom_plugins = NONE
--發送匿名使用數據,如錯誤堆棧跟蹤,以幫助提高kong。Default: on
anonymous_reports = on
--監聽地址,客戶端訪問地址。Default: 0.0.0.0:8000
proxy_listen = 0.0.0.0:8000
--如果啟用ssl,kong將接受https請求的地址和端口。Default: 0.0.0.0:8443
proxy_listen_ssl = 0.0.0.0:8443
--管理接口地址,有必要保密。Default:0.0.0.0:8001
admin_listen = 0.0.0.0:8001
--nginx進程數,如果不會設置,設置成自動,會自動檢測,默認auto等同于cpu核數.Default: auto
nginx_worker_processes = auto
nginx_optimizations = on
--確定nginx是作為守護進程還是作為前臺進程運行。Default: on
nginx_daemon = on
--數據庫實體的內存緩存大小。接受的單位是k和m,最小推薦值是幾個mbs。Default: 128m
mem_cache_size = 128m
--確定nginx是否應該監聽proxy_listen_ssl地址上的https流量。如果禁用,nginx將只在proxy_listen上綁定自己,所有ssl設置將被忽略.Default: on
ssl = off
如果啟用了ssl,proxy_listen_ssl地址的絕對路徑。如果沒有指定,并且ssl被啟用,kong將生成默認的證書和密鑰。Default: none
ssl_cert = NONE
--如果啟用了ssl,proxy_listen_ssl地址的ssl密鑰的絕對路徑。Default: none
ssl_cert_key = NONE
--確定該節點將使用哪個postgresql或cassandra作為其數據存儲區。接受的數據庫類型是postgres和cassandra。屬于同一個集群的所有kong節點必須連接到同一個數據庫。Default: postgres
database = cassandra
--postgres服務器的主機
pg_host = 127.0.0.1
--postgres服務器的端口
pg_port = 5432
--數據庫連接。必須存在
pg_database = kong
--postgres用戶
pg_user = kong
--postgres用戶的密碼
pg_password = NONE
--啟用S??SL連接到服務器
pg_ssl = off
--如果啟用pg_ssl,則切換服務器證書驗證
pg_ssl_verify = off
--用逗號分隔的聯系人列表指向您的cassandra集群。
cassandra_contact_points = 127.0.0.1
--您的節點正在偵聽的端口。
cassandra_port = 9042
--密鑰空間在您的群集中使用。如果不存在,將被創建。
cassandra_keyspace = kong
--如果是第一次創建密鑰空間,請指定一個復制策略。
cassandra_repl_strategy = SimpleStrategy
--指定簡單策略的復制因子。
cassandra_repl_factor = 1
--為網絡拓撲策略指定數據中心。
cassandra_data_centers = dc1:2,dc2:3
--讀取/寫入cassandra群集時使用的一致性設置。
cassandra_consistency = ONE
--讀/寫超時(以毫秒為單位)。
cassandra_timeout = 5000
--啟用ssl連接到節點。
cassandra_ssl = off
--如果啟用cassandra_ssl,則切換服務器證書驗證
cassandra_ssl_verify = off
--用戶名
cassandra_username = kong
--密碼
cassandra_password = NONE
cluster_listen = 0.0.0.0:7946
cluster_listen_rpc = 127.0.0.1:7373
cluster_advertise = NONE
cluster_encrypt_key = NONE
cluster_profile = wan
cluster_ttl_on_failure = 3600
dnsmasq = on
dnsmasq_port = 8053
dns_resolver = NONE
--當禁用時,每個請求將在一個單獨的lua虛擬機實例中運行:所有lua模塊將從頭開始加載。這對開發插件時采用編輯和刷新方法很有用。據官方說,關閉此指令對
--性能有嚴重影響,并且從0.11.0以后刪除此配置
lua_code_cache = on
--pem格式的lua cosockets的證書頒發機構文件的絕對路徑。當啟用pg_ssl_verify或cassandra_ssl_verify時,此證書將用于驗證kong的數據庫連接。
lua_ssl_trusted_certificate = NONE
--在由lua_ssl_trusted_certificate設置的lua cosockets使用的服務器證書鏈中設置驗證深度。
lua_ssl_verify_depth = 1
--設置lua模塊搜索路徑(lua_path)。在開發或使用未存儲在默認搜索路徑中的自定義插件時非常有用。
lua_package_path = ?/init.lua;./kong/?.lua
--設置lua c模塊搜索路徑(lua_cpath)。
lua_package_cpath = NONE
serf_path = serf
]]
[root@localhost templates]# kong start
Kong started
1).port:8000 客戶端調用api端口,網關對外開放端口。例如:新建一個api,訪問path= /test,則訪問 http://10.110.2.3:8000/test
2).port:8001 kong admin api管理端口,可以通過該端口對api、consumer、plugin進行管理,例如:查看名字叫test 這個api配置信息,訪問 http://10.110.2.3:8001/apis/test,查看所有api信息,訪問 http://10.110.2.3:8001/apis
3).KONG管理平臺,訪問 http://10.110.2.3:8888/#/ 此端口開通必須安裝 kong dashboard。通過此端口,可使用圖形界面化管理api、consumer、plugin等。
kong 增加api調用
原有接口調用訪問路徑:
http://192.168.1.100:5105/notice/getNotice
添加調用規則語句:
#--url 指定本地的kong訪問連接
#--d name 指定添加的api的規則名稱
#-d upstream_rul 指定訪問原api的host以及端口
#-d request_path 指定請求路徑
curl -i -X POST --url http://localhost:8001/apis/ -d 'name=getAannouncementList' -d 'upstream_url=http://192.168.1.100:5105/' -d 'request_path=/notice/getNotice'
curl -i -X POST --url http://localhost:8001/apis/ -d 'name=testapi' -d 'upstream_url=http://192.168.1.100:5105/' -d 'request_path=/notice/getNotice'
添加api規則后訪問語句:
http://192.168.5.250:8000/notice/getNotice
對某個訪問規則進行用戶驗證設置
設置語句語法:
#--url 要對那個訪問規則進行設置,apis后面對應的是上面設置的api訪問規則中設置的name關鍵字,其余為固定格式
#--data 設置權限訪問關鍵字
curl -i -X POST --url http://192.168.5.250:8001/apis/getAannouncementList/plugins/ --data 'name=key-auth'
curl -i -X POST --url http://192.168.5.250:8001/apis/testapi/plugins/ --data 'name=key-auth'
增加一個用戶:
設置語句語法:
#--url 規定格式
#--data username 設置增加的用戶名稱
curl -i -X POST --url http://192.168.5.250:8001/consumers/ --data "username=inhomeApp"
curl -i -X POST --url http://192.168.5.250:8001/consumers/ --data "username=test"
為消費者添加證書:
設置語句語法:
#--url 倒數第二個請求路徑為要授予的用戶名稱
#--data key 設置的密碼
curl -i -X POST --url http://192.168.5.250:8001/consumers/inhomeApp/key-auth/ --data 'key=inhomeApp_randomNum123456'
curl -i -X POST --url http://192.168.5.250:8001/consumers/test/key-auth/ --data 'key=test_randomNum123456'
通過key訪問api請求--
curl -i -X GET --url http://192.168.5.250:8000/notice/getNotice --header "Host: 192.168.5.250:8000" --header "apikey: test_randomNum123456"
or
http://192.168.5.250:8000/notice/getNotice?apikey=test_randomNum123456
刪除api規則
curl -i -X DELETE --url http://192.168.5.250:8001/apis/getAannouncementList
查看kong的所有api規則信息
http://192.168.5.250:8001/apis
下載node綠色版,版本5.11.1
https://nodejs.org/en/blog/release/v5.11.1/
解壓后,追加node中的bin目錄到PATH環境變量中即可。
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
tar -jxvf gcc-4.8.2.tar.bz2
當然,http://ftp.gnu.org/gnu/gcc 里面有所有的gcc版本供下載,最新版本已經有4.9.2啦.
參考文獻[1]中說:這個神奇的腳本文件會幫我們下載、配置、安裝依賴庫,可以節約我們大量的時間和精力。
cd gcc-4.8.0 ./contrib/download_prerequisites
mkdir gcc-build-4.8.2
cd gcc-build-4.8.2
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
編譯(注意:此步驟非常耗時)
-j4選項是make對多核處理器的優化,如果不成功請使用 make
/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/32/libgcc’
make[4]: * [multi-do] 錯誤 1 make[4]: Leaving directory
/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/libgcc’
make[3]: * [all-multi] 錯誤 2 make[3]: * 正在等待未完成的任務….
make[3]: Leaving directory
/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/libgcc’
make[2]: * [all-stage1-target-libgcc] 錯誤 2 make[2]: Leaving
directory/home/imdb/gcc-4.8.2/gcc-build-4.8.2’ make[1]: *
[stage1-bubble] 錯誤 2 make[1]: Leaving directory
/home/imdb/gcc-4.8.2/gcc-build-4.8.2’ make: * [all] 錯誤 2
解決辦法:sudo yum -y install glibc-devel.i686 glibc-devel
sudo make install
官方文檔 https://github.com/PGBI/kong-dashboard
這里面有一個放長重要的東西,非常重要,小編這個坑足足邁了3次才邁過去。
Compatibility matrix
Kong-Dashboard versions | Kong versions | Node versions |
---|---|---|
1.x.x | 0.6.x, 0.7.x, 0.8.x, 0.9.x | |
2.x.x | 0.10.x | |
3.x.x | 0.9.x, 0.10.x, 0.11.x | >= 6.0.0 |
下載代碼
git clone https://github.com/PGBI/kong-dashboard.git
cd kong-dashboard
git checkout 1.0
構建
npm install
npm run build
啟動
npm start
啟動在某個端口或設置權限
npm start -- [-p port] [-a user=password]
http://192.168.5.250:8080/#/
如果kong有用戶名和密碼那么選擇Basic auth,配置注意地址(kong的管理地址,默認為http://kong server機器或綁定的域名:8001)后面不要多加"/"如下圖 否則點擊API會出現not found api之類的提示,當然也要確保kong server正常運行中
新增API與使用新增的API時,需要注意如果需要使用地址方式指向api即 需要勾選strip-request path 如果使用head中帶請求地址的方式,需要在head中帶 X-Host-Override post.demo (即request host)
訪問kong:8000/version/getVersion 就能看到你想看的畫面啦。
http://192.168.5.250:8000/notice/getNotice?testname=keyauth 不出意外能看到你想看到的畫面
可配置項:
year:年
month: 月
day: 天
minute:分鐘,這里我們配置3,表示每分鐘不能超過3次調用。
Second: 秒
計算頻率的維度:月/天/分鐘/秒, 假如同時配置多個維度,會同時生效。
驗證:連續一分鐘內請求,第四次,報錯
{
"message": "API rate limit exceeded"
}
根據年、月、日、時、分、秒設置限流規則,多個限制同時生效。
比如:每天不能超過10次調用,每分不能超過3次。
當一分鐘內,訪問超過3次,第四次就會報錯。
當一天內,訪問次數超過10次,第十一次就會報錯。
啟動方式:
[root@Kong ~]# kong-dashboard start -a xinsir=521
問題一:
可能會出現的問題,當使用源碼安裝的時候,啟動后訪問8080端口如果出現Not Found,這個多半是因為沒有構建npm造成的。
問題二:
cassandra數據庫啟動后自動down掉,日志報錯報錯說jdk需要大于1.7_25這個升級jdk就可以了。
/status
{
"server": 有關nginx http/s服務器的度量。
{
"connections_handled":2588, 處理的連接總數。一般來說,除非達到一定的資源限制,否則參數值與接受的值相同。
"connections_reading":0, kong讀取請求頭的當前連接數。
"connections_active":4, 當前活動客戶端連接的數量,包括等待連接。
"total_requests":2585, 客戶端請求的總數。
"connections_accepted":2588, 接受的客戶端連接總數。
"connections_writing":1, nginx將響應寫回客戶端的當前連接數。
"connections_waiting":3 當前正在等待請求的空閑客戶端連接數。
},
"database": 有關數據庫集合的度量。
{
"oauth3_credentials":0,
"jwt_secrets":0,
"response_ratelimiting_metrics":0,
"keyauth_credentials":0,
"oauth3_authorization_codes":0,
"acls":0,
"apis":1,
"basicauth_credentials":0,
"consumers":0,
"ratelimiting_metrics":0,
"oauth3_tokens":0,
"nodes":1,
"hmacauth_credentials":0,
"plugins":0
}
}
/cluster 檢索群集狀態,返回群集中每個節點的信息。
{
"data":[
{
"address":"192.168.1.205:7946", 節點地址
"name":"Kong_0.0.0.0:7946_a102f6e6cede4540b1cc6a7a46276986", 節點名稱
"status":"alive" 節點狀態
}
],
"total":1 節點數
}
使用zabbix獲取參數 進行頁面監控就可以了
先去阿里云上購買免費的SSL證書
在產品中找到安全(云盾),選擇SSL證書
選擇購買證書
選擇Symantec的免費SSL證書,有效期為1年
購買后得到一個pem證書和key文件
在kong目錄下的ssl中,里面有默認的自簽名證書和key,這是不安全的,把他備份后,將阿里云上下載的pem和key放到ssl中,pem后綴改為crt,將文件名改為默認kong-default
修改nginx-kong.conf文件
重啟kong和nginx
之前調api路徑為
http://192.168.5.250:8000/notice/getNotice
配置完https后為(綁定了域名)
https://api.example.com:8443/notice/getNotice
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。