微服务网关整合

Posted by NotGeek on May 25, 2020

微服务网关整合

TOC

[TOC]

整体架构图

1590541736312

Kong 的使用

Spring Cloud Zuul

  • proxyServlet -> localhost:8080

  • http://localhost:9090/proxy-servlet/

    • http://localhost:8080/

网关架构

方案一 : Nginx + Lua

方案二: Nginx + Lua = Openresty

方案三: Nginx + Lua + DB = Kong

Kong 的使用(Windows)

安装 Docker

下载 Docker Toolbox

  • 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
$ 

创建网络

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"

网页输入:转发成功

1
192.168.0.1:8000/test1

Eureka

Eureka 的注册是被动的,

Kong 是主动的。

Eureka 是 Java,必须重新拉取,还有是内存型的,需要全部的拉取。容易 hang 住。

当你不想用 Eureka 来做 注册中心的时候,Kong 是另一个方案。