🗼😀本站将逐步迁移至新站点,点击访问 -->

微服务API网关 Kong On Docker

517次阅读
一条评论

基于 docker 的方式安装

  • 创建网络

启动三个容器服务:Kong、konga 和 kong-database。这三个容器之间的通信需要增加 network 段,把容器放在同一个网段内,相关链接修改为容器名称来访问:

docker network create kong-net
  • docker-compose.yml

docker-compose.yml中定义的镜像、依赖和参数如下所示:

version: "3.7"
services:
  kong:
    image: kong:1.1.2
    environment:
     - "KONG_DATABASE=postgres"
     - "KONG_PG_HOST=kong-database"
     - "KONG_CASSANDRA_CONTACT_POINTS=kong-database"
     - "KONG_PROXY_ACCESS_LOG=/dev/stdout"
     - "KONG_ADMIN_ACCESS_LOG=/dev/stdout"
     - "KONG_PROXY_ERROR_LOG=/dev/stderr"
     - "KONG_ADMIN_ERROR_LOG=/dev/stderr"
     - "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl"
    ports:
     - 8000:8000
     - 8443:8443
     - 8001:8001
     - 8444:8444
    networks:
     - kong-net
    depends_on:
      - kong-database
  konga:
    image: pantsel/konga
    environment:
     - "TOKEN_SECRET=blueskykong.com"
     - "NODE_ENV=production"
    ports:
     - 8080:1337
    networks:
     - kong-net

    depends_on:
      - kong-database
  kong-database:
    image: postgres:9.6
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=kong
      - POSTGRES_DB=kong
    networks:
      - kong-net
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /data/data/postgresql:/var/lib/postgresql/data

networks:
  kong-net:
    external: true
  • 启动服务

所启动的三个容器服务,除了 Kong 之外的两个服务:konga 是 Kong 的 Dashboard,基于 js 的客户端管理工具,对外暴露的端口为 8080;kong-database 是 Kong 的数据库服务,存储配置信息,这里使用的是 postgres。需要注意的是,在启动 Kong 容器之前,需要保持数据库的 Docker 容器在运行状态,并执行如下初始化数据库的操作:

[root@gitbook-ser ~]# docker-compose up -d

docker-compose报错解决:docker-compose

注意:这里启动服务会报错,因为kong 使用的postgres 数据还需要进行初始化才能使用。
  • 数据初始化
docker run --rm \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     kong:latest kong migrations bootstrap

微服务API网关

数据库初始化成功后,再次启动 docker-compose.yml 服务就可以了。我们看到 Kong 映射出多个端口,默认情况下,Kong 监听的端口为:

  • 8000:此端口是 Kong 用来监听来自客户端传入的 HTTP 请求,并将此请求转发到上有服务器;(Kong 根据配置的规则转发到真实的后台服务地址)
  • 8443:此端口是 Kong 用来监听来自客户端传入的HTTPS请求的。它跟8000端口的功能类似,转发 HTTPS 请求的。可以通过修改配置文件来禁止它;
  • 8001:Admin API,通过此端口,管理者可以对 Kong 的监听服务进行配置,插件设置、API 的增删改查、以及负载均衡等一系列的配置都是通过 8001 端口进行管理;
  • 8444:通过此端口,管理者可以对 HTTPS 请求进行监控。

验证

创建服务

如我们在术语部分的介绍,服务是上游服务的抽象,可以是一个应用,或者具体某个接口。Kong 提供了管理接口,我们可以通过请求 8001 管理接口直接创建,也可以通过安装的管理界面,实现的效果是一样的。

curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=cloudcared-blog' \
--data 'url=https://www.cloudcared.cn/'

微服务API网关

我们创建一个服务名为 cloudcared-blog,指定转发的地址为 https://www.cloudcared.cn。可以在管理界面中看到如下的记录:

微服务API网关

创建路由

创建好服务之后,我们需要创建具体的 API 路由。路由是请求的转发规则,根据 Hostname 和 PATH,将请求转发。

curl -i -X POST \
--url http://localhost:8001/services/cloudcared-blog/routes \
--data 'hosts[]=cloudcared.cn' \
--data 'paths[]=/api/blog'

微服务API网关

微服务API网关

创建好路由之后,我们就可以访问 /api/blog

微服务API网关

Kong 默认通过 8000 端口处理代理的请求。成功的响应意味着 Kong 将 http://localhost:8000 的请求转发到配置的 URL,并将响应转发给我们。需要注意的是,如果 API 暴露的地址与前面 Host 定义的地址(cloudcared.cn)不一致,就需要在请求的 Headers 里面加入 Header,Kong 根据上面请求中定义的 Header:Host,执行此操作。

Honest1y
版权声明:本站原创文章,由Honest1y于2020年01月19日发表,共计5252字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(一条评论)
老赵 评论达人LV.1
2021-01-26 00:08:00 回复

来晚了!兄弟!!!来晚了!兄弟!!!