kong服務(wù)網(wǎng)關(guān)API

kong簡(jiǎn)介

Kong 是在客戶端和(微)服務(wù)間轉(zhuǎn)發(fā)API通信的API網(wǎng)關(guān)陈辱,通過插件擴(kuò)展功能衍锚。Kong 有兩個(gè)主要組件:
Kong Server :基于 openresty 的服務(wù)器晴及,用來接收 API 請(qǐng)求虚倒。

Apache Cassandra或者PG :用來存儲(chǔ)操作數(shù)據(jù)诊笤。

你可以通過增加更多 Kong Server 機(jī)器對(duì) Kong 服務(wù)進(jìn)行水平擴(kuò)展系谐,通過前置的負(fù)載均衡器向這些機(jī)器分發(fā)請(qǐng)求。根據(jù)文檔描述,兩個(gè)Cassandra節(jié)點(diǎn)就足以支撐絕大多數(shù)情況纪他,但如果網(wǎng)絡(luò)非常擁擠鄙煤,可以考慮適當(dāng)增加更多節(jié)點(diǎn)。
對(duì)于開源社區(qū)來說茶袒,Kong 中最誘人的一個(gè)特性是可以通過插件擴(kuò)展已有功能梯刚,這些插件在 API 請(qǐng)求響應(yīng)循環(huán)的生命周期中被執(zhí)行。插件使用 Lua 編寫薪寓,而且 Kong 還有如下幾個(gè)基礎(chǔ)功能:HTTP 基本認(rèn)證亡资、密鑰認(rèn)證、CORS( Cross-origin Resource Sharing向叉,跨域資源共享)锥腻、TCP、UDP母谎、文件日志旷太、API 請(qǐng)求限流、請(qǐng)求轉(zhuǎn)發(fā)以及 nginx 監(jiān)控销睁。
Kong包可運(yùn)行在某些 Linux 發(fā)行版供璧、Mac OS X 和 Docker 中,無(wú)論是本地機(jī)還是云端服務(wù)器皆可運(yùn)行冻记。
除了免費(fèi)的開源版本睡毒,Mashape 還提供了付費(fèi)的企業(yè)版,其中包括技術(shù)支持冗栗、使用培訓(xùn)服務(wù)以及 API 分析插件演顾。

Paste_Image.png

kong安裝

官網(wǎng)提供了多種安裝方式https://getkong.org/install/,采用yum或者docker安裝較為方便隅居。docker安裝需要先安裝數(shù)據(jù)庫(kù)钠至,本文使用PG數(shù)據(jù)庫(kù)。

安裝過程

因?yàn)楝F(xiàn)場(chǎng)網(wǎng)絡(luò)不通在家里測(cè)試環(huán)境安裝好save下胎源,在現(xiàn)場(chǎng)load使用即可棉钧。使用了export和import裝載是報(bào)錯(cuò),因?yàn)榘惭b時(shí)也沒有進(jìn)行其他配置涕蚤,索性使用save進(jìn)行拷貝宪卿。

docker save -o kong-database-postgres-docker-9.4.tar.gz docker.io/postgres
docker save -o kong.tar.gz docker.io/kong

docker load -i kong-database-postgres-docker-9.4.tar.gz
docker load -i kong.tar.gz

1. 安裝kong

[slview@DEMO:~]$ docker search  kong
INDEX       NAME                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/kong                      Open-source Microservice & API Management ...   73        [OK]       
docker.io   docker.io/pgbi/kong-dashboard       Web UI for managing your Kong setup.            14                   [OK]
docker.io   docker.io/pantsel/konga             More than just another GUI to KONG Admin API.   3                    [OK]
docker.io   docker.io/articulate/kong-wait      Waits for Cassandra to be connectable befo...   1                    [OK]
docker.io   docker.io/galacticfog/kong          A fork mashape/kong, with a bias towards p...   1                    [OK]
docker.io   docker.io/littlebaydigital/kong     Extension of official docker kong image wi...   1                    [OK]
docker.io   docker.io/mesoshq/kong              Run Kong clusters on Mesos/Marathon!            1                    [OK]
docker.io   docker.io/wmzhong/docker-kong       For adding solutions for clustering...          1                    [OK]
docker.io   docker.io/anduin/kong               kong                                            0                    [OK]
docker.io   docker.io/articulate/kong-monit     Adds monit to the base kong image.              0                    [OK]
docker.io   docker.io/bakstad/kong              Extension of the official Docker image for...   0                    [OK]
docker.io   docker.io/cknowles/kong             Fork of official repo to ensure logs work ...   0                    [OK]
docker.io   docker.io/dasudian/kong             Build kong docker image.                        0                    [OK]
docker.io   docker.io/derdiedasjojo/kong        kong with piwik-log plugin                      0                    [OK]
docker.io   docker.io/derdiedasjojo/kong-conf   create an api in kong by making an api-call     0                    [OK]
docker.io   docker.io/koudaiii/kong             docker-kong                                     0                    [OK]
docker.io   docker.io/misfit/kong               Kong in Docker                                  0                    [OK]
docker.io   docker.io/mrsaints/kong-aws         An extension of Kong with a plugin that ca...   0                    [OK]
docker.io   docker.io/mrsaints/kong-dev         A test / development sandbox for Kong, a s...   0                    [OK]
docker.io   docker.io/sikmi/nendo-docker-kong   nendo kong                                      0                    [OK]
docker.io   docker.io/sneck/kong                Kong(Open-Source API Management and Micros...   0                    [OK]
docker.io   docker.io/supermp/kong              Kong                                            0                    [OK]
docker.io   docker.io/vikingco/kong             Microservice & API Management Layer (https...   0                    [OK]
docker.io   docker.io/vikingco/kong-admin       Standalone Kong Admin Service                   0                    [OK]
docker.io   docker.io/zymbit/kong               Mashape Kong                                    0                    [OK]
[slview@DEMO:~]$ 
[slview@DEMO:~]$ 
[slview@DEMO:~]$ 
[slview@DEMO:~]$ 
[slview@DEMO:~]$ docker pull  kong:0.10
Trying to pull repository 192.168.5.249:5000/kong ... 
Pulling repository 192.168.5.249:5000/kong
Trying to pull repository docker.io/library/kong ... 
sha256:ff6dd0495f1a5b312bff9fd42f6aee6437200a337e190eb0ddc8e5ca83482995: Pulling from docker.io/library/kong
343b09361036: Pull complete 
eb953d76e90b: Pull complete 
ebdf6ecbe509: Pull complete 
24f20231ced9: Pull complete 
Digest: sha256:ff6dd0495f1a5b312bff9fd42f6aee6437200a337e190eb0ddc8e5ca83482995
Status: Downloaded newer image for docker.io/kong:0.10

2. 安裝PG

[slview@DEMO:~]$ docker search postgres
INDEX       NAME                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/postgres                  The PostgreSQL object-relational database ...   3552      [OK]       
docker.io   docker.io/kiasaki/alpine-postgres   PostgreSQL docker image based on Alpine Linux   30                   [OK]
docker.io   docker.io/abevoelker/postgres       Postgres 9.3 + WAL-E + PL/V8 and PL/Python...   10                   [OK]
docker.io   docker.io/macadmins/postgres        Postgres that accepts remote connections b...   8                    [OK]
docker.io   docker.io/jamesbrink/postgres       Highly configurable PostgreSQL container.       5                    [OK]
docker.io   docker.io/eeacms/postgres           Docker image for PostgreSQL (RelStorage re...   4                    [OK]
docker.io   docker.io/blacklabelops/postgres    Postgres Image for Atlassian Applications       3                    [OK]
docker.io   docker.io/azukiapp/postgres         Docker image to run PostgreSQL by Azuki - ...   2                    [OK]
docker.io   docker.io/clkao/postgres-plv8       Docker image for running PLV8 1.4 on Postg...   2                    [OK]
docker.io   docker.io/publysher/postgres-s3     A Docker-based solution for Postgres backu...   2                    [OK]
docker.io   docker.io/2020ip/postgres           Docker image for PostgreSQL with PLV8           1                    [OK]
docker.io   docker.io/eccube/postgres           Docker image for PostgreSQL extended local...   1                    [OK]
docker.io   docker.io/steenzout/postgres        Steenzout's docker image packaging for Pos...   1                    [OK]
docker.io   docker.io/1maa/postgres             PostgreSQL base image                           0                    [OK]
docker.io   docker.io/beorc/postgres            Ubuntu-based PostgreSQL server                  0                    [OK]
docker.io   docker.io/camptocamp/postgres       Docker image for PostgreSQL including some...   0                    [OK]
docker.io   docker.io/coreroller/postgres       official postgres:9.4 image but it adds 2 ...   0                    [OK]
docker.io   docker.io/debezium/postgres         PostgreSQL for use with Debezium change da...   0                    [OK]
docker.io   docker.io/examus/postgres           Postgres with change password                   0                    [OK]
docker.io   docker.io/kobotoolbox/postgres      Postgres image for KoBo Toolbox.                0                    [OK]
docker.io   docker.io/opencog/postgres          This is a configured postgres database for...   0                    [OK]
docker.io   docker.io/studionone/postgres       Postgres Docker image with postgres uuid-o...   0                    [OK]
docker.io   docker.io/timbira/postgres          Postgres  containers                            0                    [OK]
docker.io   docker.io/travix/postgres           A container to run the PostgreSQL database.     0                    [OK]
docker.io   docker.io/vrtsystems/postgres       PostgreSQL image with added init hooks, bu...   0                    [OK]
[slview@DEMO:~]$ 
[slview@DEMO:~]$ 
[slview@DEMO:~]$ 
[slview@DEMO:~]$ docker pull  postgres:9.4
Trying to pull repository 192.168.5.249:5000/postgres ... 
Pulling repository 192.168.5.249:5000/postgres
Trying to pull repository docker.io/library/postgres ... 
sha256:8988064772fc8a39f0be47f7f2557788559221b27a51cbba595f23868edbc426: Pulling from docker.io/library/postgres
10a267c67f42: Pull complete 
e9a920522e33: Pull complete 
6888e696bd71: Pull complete 
798096eed143: Pull complete 
fb58419959b5: Pull complete 
97f9ec09cb68: Pull complete 
94972b6e82a0: Pull complete 
a281bad165d7: Pull complete 
080dd452e4af: Pull complete 
e04973558177: Pull complete 
79155f9ed5e1: Pull complete 
010432309d6c: Pull complete 
d1d8761b1fae: Pull complete 
Digest: sha256:8988064772fc8a39f0be47f7f2557788559221b27a51cbba595f23868edbc426
Status: Downloaded newer image for docker.io/postgres:9.4

安裝后啟動(dòng)

  • 啟動(dòng)pg
docker run -d --name kong-database \
                -p 5432:5432 \
                -e "POSTGRES_USER=kong" \
                -e "POSTGRES_DB=kong" \
                postgres:9.4
  • 啟動(dòng)kong
docker run -d --name kong \
    --link kong-database:kong-database \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
    -e "KONG_PG_HOST=kong-database" \
    -p 8000:8000 \
    -p 8443:8443 \
    -p 8001:8001 \
    -p 7946:7946 \
    -p 7946:7946/udp \
    kong:0.10

API

  1. 增加API
    strip_uri :When matching an API via one of the uris prefixes, strip that matching prefix from the upstream URI to be requested. Default: true. 默認(rèn)會(huì)刪除uris前綴
curl -i -X POST --url http://127.0.0.1:8001/apis/ --data 'name=iot_user_app' --data 'upstream_url=http://127.0.0.1:16666/' --data 'uris=/getuserinfo,/getnatipmapinfo,/getimeibindinfo' --data 'strip_uri=false'
curl -i -X POST --url http://127.0.0.1:8001/apis/ --data 'name=iot_vpdn_app' --data 'upstream_url=http://127.0.0.1:16666/' --data 'uris=/getvpdnuserinfo,/getvpdnservinfo' --data 'strip_uri=false'
  1. 刪除API
curl -i -X DELETE http://127.0.0.1:8001/apis/iot_user_app
  1. 查詢API http://127.0.0.1:8001/apis/
{
    data: [
        {
            uris: [
                "/getuserinfo",
                "/getnatipmapinfo",
                "/getimeibindinfo"
            ],
            id: "65dd8d1a-aea5-449d-a1d4-e705a4c88d1c",
            upstream_read_timeout: 60000,
            preserve_host: false,
            created_at: 1495682904000,
            upstream_connect_timeout: 60000,
            upstream_url: "http://127.0.0.1:20000/",
            strip_uri: false,
            https_only: false,
            name: "iot_user_app",
            http_if_terminated: true,
            upstream_send_timeout: 60000,
            retries: 5
        },
        {
            uris: [
                "/getvpdnuserinfo",
                "/getvpdnservinfo"
            ],
            id: "146df495-455d-48dd-a051-eaefacbd7b1e",
            upstream_read_timeout: 60000,
            preserve_host: false,
            created_at: 1495682920000,
            upstream_connect_timeout: 60000,
            upstream_url: "http://127.0.0.1:16666/",
            strip_uri: false,
            https_only: false,
            name: "iot_vpdn_app",
            http_if_terminated: true,
            upstream_send_timeout: 60000,
            retries: 5
        }
    ],
    total: 2
}
  1. 訪問
-bash-4.4$ curl http://127.0.0.1:8000/getuserinfo?Type=hss\&IMSI=46003xxxxx\&REVLP=1
{
    "86xxxxxxx": {
        "CDMA_IMSI": "46003xxxxxxxxxx",
        "ISDN": "86xxxxxxxxx",
        "LTE_IMSI": "46011xxxxxxx",
        "TYPE": "2/3/4G"
    }
}

插件

kong提供了很多插件,一般使用的是授權(quán)和流量控制万栅。

{
    enabled_plugins: [
        "syslog",
        "ldap-auth",
        "rate-limiting",
        "correlation-id",
        "jwt",
        "request-termination",
        "runscope",
        "request-transformer",
        "http-log",
        "loggly",
        "response-transformer",
        "basic-auth",
        "tcp-log",
        "hmac-auth",
        "oauth2",
        "acl",
        "bot-detection",
        "udp-log",
        "cors",
        "file-log",
        "ip-restriction",
        "datadog",
        "request-size-limiting",
        "galileo",
        "aws-lambda",
        "statsd",
        "response-ratelimiting",
        "key-auth"
    ]
}
{
    data: [
        {
            api_id: "ff315a1a-d98d-4a62-aad9-7bc6bb063e22",
            id: "65146028-c231-4618-82d4-02f8cc2b6e57",
            created_at: 1495684427000,
            enabled: true,
            name: "ip-restriction",
            config: {
                whitelist: [
                    "59.43.53.0/24",
                    "100.66.124.0/24",
                    "100.66.44.0/24",
                    "172.16.0.0/18"
                ]
            }
        },
        {
            api_id: "ff315a1a-d98d-4a62-aad9-7bc6bb063e22",
            id: "2aa6b021-cf73-4651-9c07-a3d5c60b900f",
            created_at: 1495684482000,
            enabled: true,
            name: "rate-limiting",
            config: {
                fault_tolerant: true,
                limit_by: "consumer",
                policy: "cluster",
                redis_database: 0,
                second: 100,
                hour: 6000,
                redis_timeout: 2000,
                redis_port: 6379
            }
        },
        {
            api_id: "ff315a1a-d98d-4a62-aad9-7bc6bb063e22",
            id: "c53fa430-1b2a-47e8-a093-3c19a23bd87b",
            created_at: 1495684523000,
            enabled: true,
            name: "request-size-limiting",
            config: {
                allowed_payload_size: 128
            }
        }
    ],
    total: 3
}
  • 安全插件
    通過設(shè)置安全插件可以控制IP白名單佑钾、黑名單以及ACL來控制訪問范圍,多個(gè)IP段使用逗號(hào)分隔:
curl -X POST http://127.0.0.1:8001/apis/iot_user_app/plugins  \
--data "name=ip-restriction"  \
--data "config.whitelist=59.43.53.0/24,100.66.124.0/24,100.66.44.0/24,172.16.0.0/18"
  • 訪問速率插件
    通過設(shè)置訪問速率插件可以訪問速率烦粒,防止訪問速率過大造成服務(wù)器壓力休溶,目前支持每秒、每小時(shí)進(jìn)行限制:
curl -X POST http://127.0.0.1:8001/apis/iot_user_app/plugins \
--data "name=rate-limiting" \
--data "config.second=1000" \
--data "config.hour=60000"
  • 訪問速率插件
    通過設(shè)置訪問速率插件可以訪問速率,防止訪問速率過大造成服務(wù)器壓力兽掰,目前支持每秒芭碍、每小時(shí)進(jìn)行限制:
curl -X POST http://127.0.0.1:8001/apis/iot_user_app/plugins \
--data "name=rate-limiting" \
--data "config.second=1000" \
--data "config.hour=60000"
  • 訪問包大小控制
curl -X POST http://127.0.0.1:8001/apis/iot_user_app/plugins \
--data "name=request-size-limiting" \
--data "config.allowed_payload_size=128"

遺留問題

  1. kong可以做oauth2.0和jwt做鑒權(quán)。
  2. 未進(jìn)行壓力測(cè)試禾进,后面再探索吧豁跑。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末廉涕,一起剝皮案震驚了整個(gè)濱河市泻云,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狐蜕,老刑警劉巖宠纯,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異层释,居然都是意外死亡婆瓜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門贡羔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廉白,“玉大人,你說我怎么就攤上這事乖寒『秕澹” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵楣嘁,是天一觀的道長(zhǎng)磅轻。 經(jīng)常有香客問我,道長(zhǎng)逐虚,這世上最難降的妖魔是什么聋溜? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮叭爱,結(jié)果婚禮上撮躁,老公的妹妹穿的比我還像新娘。我一直安慰自己买雾,他們只是感情好馒胆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凝果,像睡著了一般祝迂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上器净,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天型雳,我揣著相機(jī)與錄音,去河邊找鬼。 笑死纠俭,一個(gè)胖子當(dāng)著我的面吹牛沿量,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冤荆,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼朴则,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了钓简?” 一聲冷哼從身側(cè)響起乌妒,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎外邓,沒想到半個(gè)月后撤蚊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡损话,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年侦啸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丧枪。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡光涂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拧烦,到底是詐尸還是另有隱情忘闻,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布屎篱,位于F島的核電站服赎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏交播。R本人自食惡果不足惜重虑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秦士。 院中可真熱鬧缺厉,春花似錦、人聲如沸隧土。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)曹傀。三九已至辐脖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間皆愉,已是汗流浹背嗜价。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工艇抠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人久锥。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓家淤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親瑟由。 傳聞我的和親對(duì)象是個(gè)殘疾皇子絮重,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一、簡(jiǎn)介 Kong歹苦,是由Mashape公司開源的青伤,基于Nginx的API gateway。 二暂氯、特點(diǎn) 可擴(kuò)展:支持...
    peng66cheng閱讀 43,318評(píng)論 2 21
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理潮模,服務(wù)發(fā)現(xiàn)亮蛔,斷路器痴施,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • PLEASE READ THE FOLLOWING APPLE DEVELOPER PROGRAM LICENSE...
    念念不忘的閱讀 13,433評(píng)論 5 6
  • 寶寶還有兩個(gè)多月就滿三周歲,很多時(shí)候說話做事都是一副小大人模樣了究流,但是帶娃的難度卻陡增辣吃,讓我經(jīng)常感到有心無(wú)力,瀕臨...
    瑪莉隨心記閱讀 1,140評(píng)論 0 1
  • 決定離開簡(jiǎn)書芬探,再也不來發(fā)文了神得。 再見!
    72b0bac04253閱讀 235評(píng)論 0 0