Kong 是在客戶端和(微)服務(wù)間轉(zhuǎn)發(fā)API通信的API網(wǎng)關(guān),通過插件擴(kuò)展功能。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、臨潼網(wǎng)站維護(hù)、網(wǎng)站推廣。
概念術(shù)語
upstream: 是對上游服務(wù)器的抽象;
target: 代表了一個物理服務(wù),是?ip + port?的抽象;
service: 是抽象層面的服務(wù),他可以直接映射到一個物理服務(wù)(host?指向?ip + port),也可以指向一個?upstream?來做到負(fù)載均衡;
route: 是路由的抽象,他負(fù)責(zé)將實際的?request?映射到?service。
默認(rèn)情況下,KONG監(jiān)聽的端口為:
8000: 此端口是KONG用來監(jiān)聽來自客戶端傳入的HTTP請求,并將此請求轉(zhuǎn)發(fā)到上有服務(wù)器;
8443: 此端口是KONG用來監(jiān)聽來自客戶端傳入的HTTP請求的。它跟8000端口的功能類似,但是它只是用來監(jiān)聽HTTP請求的,沒有轉(zhuǎn)發(fā)功能??梢酝ㄟ^修改配置文件來禁止它;
8001: Admin API,通過此端口,管理者可以對KONG的監(jiān)聽服務(wù)進(jìn)行配置;
8444: 通過此端口,管理者可以對HTTP請求進(jìn)行監(jiān)控.
環(huán)境部署
1.安裝docker
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo?http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum repolist
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7?containerd.io
systemctl start docker && systemctl status docker && systemctl daemon-reload
2.禁用防火墻
systemctl disable firewalld && systemctl stop firewalld && systemctl status firewalld
setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
3.禁用交換分區(qū),設(shè)置路由轉(zhuǎn)發(fā)
swapoff -a && yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak | grep -v swap > /etc/fstab
cat /etc/fstab
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
安裝
1.創(chuàng)建docker網(wǎng)絡(luò)
docker network create kong-net
2.運行prostgres 9.6數(shù)據(jù)庫鏡像
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.6
3.數(shù)據(jù)庫準(zhǔn)備,初始化Kong數(shù)據(jù)
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
kong:0.14.1 kong migrations up
4.啟動kong
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:0.14.1
5.創(chuàng)建并運行Kong dashboard容器
docker run -d \
--network=kong-net \
--link kong:kong -p 8008:8080 pgbi/kong-dashboard start \
--kong-url?http://kong:8001?\
--basic-auth kong=kong
然后訪問?http://你的IP:8008,
登錄賬號為kong,密碼為kong
1.為 http://mockbin.org 添加一個名為 example-service 的服務(wù)
使用Admin API添加服務(wù),發(fā)出以下cURL請求以將您的第一個服務(wù)(指向Mockbin API)添加到Kong:
curl?-i?-X?POST \
--url?http://localhost:8001/services/ \
--data?'name=example-service'? --data?'url=http://mockbin.org'
2.為上面創(chuàng)建的服務(wù)添加一個路由
curl?-i?-X?POST \
--url?http://localhost:8001/services/example-service/routes \
--data?'hosts[]=example.com'
勾選"strip_path"選項,并點擊”updata“
3. 運行下面的命令,會返回 http://mockbin.org 的信息
curl -i -X GET --url http://localhost:8000/ --header 'Host: example.com'
添加認(rèn)證
1.配置密鑰身份驗證插件
curl -i -X POST \
--url http://localhost:8001/services/example-service/plugins/ \
--data 'name=key-auth'
注意:此插件還接受一個config.key_names參數(shù),默認(rèn)為['apikey']。它是應(yīng)該在請求期間包含apikey的標(biāo)頭和參數(shù)名稱(均受支持)的列表
2.確認(rèn)插件配置正確
curl -i -X GET --url http://localhost:8000/ --header 'Host: example.com'
由于您未指定所需的apikey標(biāo)題或參數(shù),因此響應(yīng)應(yīng)為401 Unauthorized
增加消費者
curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=Jason"
為上面的用戶添加一個 key。下面命令中的 “ENTER_KEY_HERE” 需要替換成想要設(shè)置的密鑰。
curl -i -X POST \
--url http://localhost:8001/consumers/Jason/key-auth/ \
--data 'key=ENTER_KEY_HERE'
在第3步的請求中添加 key 的信息后,可以正常訪問了。命令如下:
curl -i -X GET \
--url http://localhost:8000 \
--header "Host: example.com" \
--header "apikey: ENTER_KEY_HERE"