微服务网关整合
TOC
[TOC]
整体架构图
Kong 的使用
Spring Cloud Zuul
网关架构
方案一 : Nginx + Lua
方案二: Nginx + Lua = Openresty
方案三: Nginx + Lua + DB = Kong
Kong 的使用(Windows)
安装 Docker
- windows 10 一下的版本:https://docs.docker.com/toolbox/overview/
- Docker Image + Oracle Virtual VM
1
2
3
4
5
| $ docker container ls -all
$ docker rm xxxx
|
Docker 安装 Kong
创建网络
1
| docker network create kong-net
|
启动数据库
1
2
3
4
5
6
7
| docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
postgres:9.6
|
准备数据库
1
2
3
4
5
6
7
| docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations bootstrap
|
启动 Kong
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_PASSWORD=kong" \
-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 127.0.0.1:8001:8001 \
-p 127.0.0.1:8444:8444 \
kong:latest
|
1
| docker run -d --name kong --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_PG_PASSWORD=kong" -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 127.0.0.1:8001:8001 -p 127.0.0.1:8444:8444 kong:latest
|
Kong 网关服务
注册服务
1
2
3
4
| curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service' \
--data 'url=http://mockbin.org'
|
添加服务路由
1
2
3
| curl -i -X POST \
--url http://localhost:8001/services/example-service/routes \
--data 'hosts[]=example.com'
|
添加服务实例
1
2
| curl -X POST http://192.168.0.1:8001/upstreams \
--data "name=test-service"
|
1
2
3
| curl -X POST http://192.168.0.1:8001/upstreams/test-service/targets \
--data "target=192.168.0.1:80"
--data "weight=100"
|
1
2
3
4
| curl -X POST http://192.168.0.1:8001/services/ \
--data "name=test-service" \
--data "host=test-service" \
--data "path=/address"
|
1
2
3
| curl -X POST http://192.168.0.1:8001/services/ \
--data "name=test-service" \
--data "url=http://192.168.0.1:8080"
|
1
2
| curl -X POST http://192.168.0.1:8001/services/test-service/routes/ \
--data "paths[]=/test1"
|
网页输入:转发成功
Eureka
Eureka 的注册是被动的,
Kong 是主动的。
Eureka 是 Java,必须重新拉取,还有是内存型的,需要全部的拉取。容易 hang 住。
当你不想用 Eureka 来做 注册中心的时候,Kong 是另一个方案。