安裝
使用docker-compose安裝是最方便的
在/opt/目錄下創(chuàng)建kong文件夾办陷,然后創(chuàng)建一個(gè)docker-compose.yml文件并編輯
cd /opt
mkdir kong
cd kong
vi docker-compose.yml
在docker-compose.yml添加如下配置(20220528親測可用)
version: '3'
services:
kong-database:
image: postgres:9.6
restart: always #每次總是啟動(dòng)
networks:
- kong-net
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
ports:
- "5432:5432"
#######################
# 執(zhí)行數(shù)據(jù)庫遷移
######################
kong-migration:
image: kong:latest
command: "kong migrations bootstrap"
networks:
- kong-net
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_DATABASE=kong
- KONG_PG_PASSWORD=kong
- KONG_PG_HOST=kong-database
links:
- kong-database #連接的是kong-database服務(wù)的
depends_on:
- kong-database #依賴于kong-database服務(wù)
#####################
# kong gateway
#####################
kong:
image: kong:latest
restart: always
networks:
- kong-net
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_PASSWORD: kong
KONG_PROXY_LISTEN: 0.0.0.0:8000 # 代理監(jiān)聽http
KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443 # 代理監(jiān)聽https
KONG_ADMIN_LISTEN: 0.0.0.0:8001 # Kong的管理API私蕾,不可暴露在公網(wǎng)
depends_on:
- kong-migration
links:
- kong-database
healthcheck:
test: ["CMD", "curl", "-f", "http://kong:8001"]
interval: 5s
timeout: 2s
retries: 15
ports:
- "8001:8001"
- "8000:8000"
- "8443:8443"
#######################
#以下兩個(gè)是konga GUI
#######################
konga-prepare:
image: pantsel/konga:latest
command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga" #注意是用戶名:密碼@數(shù)據(jù)庫服務(wù)名稱:端口
networks:
- kong-net
restart: on-failure
links:
- kong-database
depends_on:
- kong #依賴kong服務(wù)
- kong-database #依賴kong-database服務(wù)
konga:
image: pantsel/konga:latest
restart: always
networks:
- kong-net
environment:
DB_ADAPTER: postgres
DB_HOST: kong-database
DB_USER: kong
DB_DATABASE: konga
DB_PASSWORD: kong #必須加上密碼猎提,不然會(huì)失敗
depends_on:
- kong
- kong-database
ports:
- "1337:1337" #控制臺(tái)訪問端口
networks:
kong-net:
driver: bridge
docker-compose.yml文件參考自
https://wenku.baidu.com/view/eda035c19889680203d8ce2f0066f5335a81670e.html
訪問Konga控制臺(tái)
假設(shè)使用的是本地搭建
使用瀏覽器訪問127.0.0.1:1337
注:端口號(hào)在docker-compose.yml中指定了1337
若是使用云服務(wù)器,注意做好DNS解析以及Nginx配置
這里給出一份可用的kong.conf
server{
listen 80;
server_name kong.YOUR_DOMAIN.com;
charset utf-8;
# 接口
location / {
proxy_pass http://127.0.0.1:1337;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
使用瀏覽器訪問kong.YOUR_DOMAIN:1337
首次進(jìn)入配置管理員
打開界面后寸五,是要?jiǎng)?chuàng)建一個(gè)管理員賬號(hào)的梳凛,按說明填寫即可
配置Kong管理API
先理解一下概念:
我們現(xiàn)在操作的可視化平臺(tái)是Konga
Konga通過調(diào)用Kong的admin url,對Kong網(wǎng)關(guān)進(jìn)行配置管理
所以這一步我們需要將Konga和Kong搭上線
在Connection頁面配置要管理的Kong網(wǎng)關(guān)
主要填寫參數(shù)說明:
Name:必填梳杏,唯一韧拒,用于備忘
Kong Admin URL:Kong網(wǎng)關(guān)的管理路徑淹接,默認(rèn)端口是8001,在docker-compose.yml可修改對外暴露的端口號(hào)
這里有個(gè)提示很顯眼:Kong's admin API should not be publicly exposed
故我們在云服務(wù)器部署時(shí)叛溢,都應(yīng)該注意8001的這個(gè)端口不應(yīng)隨意暴露出去塑悼,以免發(fā)生黑客攻擊風(fēng)險(xiǎn)
為什么配置出來是http://kong:8001?
因?yàn)楸敬问褂玫氖莇ocker-compose部署楷掉,Kong和Konga還有Postgres這幾個(gè)容器都處于kong-net這個(gè)網(wǎng)絡(luò)環(huán)境下厢蒜,可以直接通過容器名訪問到對方
Konga是在接收到瀏覽器請求后,通過后臺(tái)服務(wù)調(diào)用Kong admin URL
如果用了其他方式部署烹植,則需要按實(shí)際情況填寫Kong admin URL斑鸦,并且注意不要暴露到公網(wǎng)上!
ADD NEW SERVICE 添加一個(gè)要代理的服務(wù)
進(jìn)入Service菜單草雕,點(diǎn)擊 ADD NEW SERVICE(添加新服務(wù))
這里我們假設(shè)要代理某度的服務(wù)
主要填寫參數(shù)說明:
Name:非必填巷屿,服務(wù)名稱,用于備忘這是一個(gè)什么服務(wù)
Protocol:必填促绵,填寫http或https攒庵,指請求轉(zhuǎn)發(fā)到該服務(wù)時(shí)嘴纺,使用哪種協(xié)議
Host:必填败晴,填寫被代理的主機(jī)地址
Port:必填,填寫被代理的主機(jī)的端口號(hào)栽渴,默認(rèn)80
ADD ROUTE 在代理服務(wù)中添加一條路由
點(diǎn)擊剛才創(chuàng)建的服務(wù)尖坤,點(diǎn)擊進(jìn)入Route管理界面
點(diǎn)擊ADD ROUTE
主要填寫參數(shù)說明:
Name:非必填,路由名稱闲擦,用于備忘識(shí)別這是一個(gè)什么路由
Paths:這是重點(diǎn)慢味!具體看效果就明白了,這邊添加“/”和“/api/baidu”墅冷,注意要回車
訪問已添加的服務(wù)
訪問服務(wù)的接口為8000(在docker-compose.yml已配置)
若使用的是本地搭建
使用瀏覽器訪問
- 127.0.0.1:8000
- 127.0.0.1:8000/api/baidu
若是部署到云服務(wù)器纯路,并做好了域名解析
使用瀏覽器訪問
- kong.YOUR_DOMAIN
- kong.YOUR_DOMAIN/api/baidu
都會(huì)被解析Route,指向?qū)?yīng)的Service寞忿,返回的是某度的頁面驰唬,搭建成功
Upstream配置
當(dāng)同一個(gè)服務(wù)為分布式或存在多個(gè)域名、ip時(shí)腔彰,我們可以通過配置Upstream叫编,將這些服務(wù)統(tǒng)一起來
進(jìn)入U(xiǎn)pstream頁面
點(diǎn)擊ADD UPSTREAM
主要填寫參數(shù)說明:
Name:必填,名稱霹抛,用于關(guān)聯(lián)Service中Host字段
進(jìn)入剛添加的Upstream的Detail
進(jìn)入Target管理頁
點(diǎn)擊ADD TARGET
主要填寫參數(shù)說明:
Target:該服務(wù)具體的域名+端口搓逾,注意這里默認(rèn)端口8000,故需要手動(dòng)寫80
Weight:權(quán)重
添加好后是這個(gè)樣子
之后我們回到Service配置
將Host填寫為剛剛命名杯拐,并保存
之后我們再次訪問
- 127.0.0.1:8000
- 127.0.0.1:8000/api/baidu
- kong.YOUR_DOMAIN
- kong.YOUR_DOMAIN/api/baidu
能發(fā)現(xiàn)不僅能訪問某度霞篡,還能訪問到某奇廣告網(wǎng)(因?yàn)閎aidu1.com世蔗、baidu2.com并不是某度搜索)
至于每次訪問結(jié)果都有變化,是因?yàn)閁pstream做了權(quán)重的負(fù)載均衡寇损,因此實(shí)際訪問的服務(wù)是
- www.baidu.com
- www.baidu1.com
- www.baidu2.com
-
www.baidu3.com
中任意的一個(gè)