您好,登錄后才能下訂單哦!
Kong 是在客戶端和(微)服務間轉發(fā)API通信的API網(wǎng)關,通過插件擴展功能。
概念術語
upstream: 是對上游服務器的抽象;
target: 代表了一個物理服務,是 ip + port 的抽象;
service: 是抽象層面的服務,他可以直接映射到一個物理服務(host 指向 ip + port),也可以指向一個 upstream 來做到負載均衡;
route: 是路由的抽象,他負責將實際的 request 映射到 service。
默認情況下,KONG監(jiān)聽的端口為:
8000: 此端口是KONG用來監(jiān)聽來自客戶端傳入的HTTP請求,并將此請求轉發(fā)到上有服務器;
8443: 此端口是KONG用來監(jiān)聽來自客戶端傳入的HTTP請求的。它跟8000端口的功能類似,但是它只是用來監(jiān)聽HTTP請求的,沒有轉發(fā)功能。可以通過修改配置文件來禁止它;
8001: Admin API,通過此端口,管理者可以對KONG的監(jiān)聽服務進行配置;
8444: 通過此端口,管理者可以對HTTP請求進行監(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ū),設置路由轉發(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)絡
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ù)庫準備,初始化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 的服務
使用Admin API添加服務,發(fā)出以下cURL請求以將您的第一個服務(指向Mockbin API)添加到Kong:
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service' --data 'url=http://mockbin.org'
2.為上面創(chuàng)建的服務添加一個路由
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'
添加認證
1.配置密鑰身份驗證插件
curl -i -X POST \
--url http://localhost:8001/services/example-service/plugins/ \
--data 'name=key-auth'
注意:此插件還接受一個config.key_names參數(shù),默認為['apikey']。它是應該在請求期間包含apikey的標頭和參數(shù)名稱(均受支持)的列表
2.確認插件配置正確
curl -i -X GET --url http://localhost:8000/ --header 'Host: example.com'
由于您未指定所需的apikey標題或參數(shù),因此響應應為401 Unauthorized
增加消費者
curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=Jason"
為上面的用戶添加一個 key。下面命令中的 “ENTER_KEY_HERE” 需要替換成想要設置的密鑰。
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"
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。