• kong配置service和route实现简单API代理



    通过konga连接kong实现API接口代理

    前言

    之前已经对Kong的API做了学习理解,从本文开始,我们将学习如何使用KONG实现API接口代理。为此,您首先需要添加服务;即Kong用来指代其管理的上游API和微服务的名称。

    本文中,我们将创建一个指向Mockbin API的服务进行学习测试。

    1. ADD NEW SERVICE

    [SERVICE]:
    抽象层面的服务,他可以直接映射到一个物理服务 (host 指向 ip + port),也可以指向一个 upstream 来做到负载均衡。通俗说,这个service就是后台访问接口配置。

    导航到SERVICES页面并添加ADD NEW SERVICE

    字段说明

    Url参数是一个简化参数,用于一次性添加protocol,host,port和path。另外不要把SERVICE当作后端的具体API,要把它当作一个大的服务,该服务下面有多个API(endpoint or route)。所以创建服务的时候填上该服务的域名就行了。当然也可以是一个带pathUrl,这样每个关联的API (ROUTE)会路由到该path上。

    属性 描述
    name(必填) 服务名称.
    tags(可选) 可选地向服务添加标记
    url(可选) 将协议、主机、端口和路径立即设置成简短的属性。这个属性是只写的(管理API从来不“返回”url)
    protocol(必填) 该协议用于与upstream通信。它可以是http(默认)或https。
    host(必填) upstream服务器的主机。
    port(必填) upstream服务器端口。默认为80
    path(可选) 在向upstream服务器请求中使用的路径。默认为空。
    retries(可选) 在代理失败的情况下执行的重试次数。默认值是5。
    connect_timeout(可选) 建立到upstream服务器的连接的超时时间。默认为60000。
    write_timeout(可选) 将请求发送到upstream服务器的两个连续写操作之间的超时时间。默认为60000。
    read_timeout(可选) 将请求发送到upstream服务器的两个连续读取操作之间的超时时间。默认为60000。

    添加成功返回SERVICES界面,查看添加的Services信息,两种查看方式:

    2. ADD ROUTE

    [ROUTE]:
    路由的抽象,他负责将实际的 request 映射到 service

    返回SERVICES界面,选择example-service服务

    选择Routes,然后ADD ROUTE

    字段说明:

    属性 描述
    name(可选) 定义名称
    tags(可选) 向路由添加标记
    protocols(可选) 这条路线应该允许的协议列表。默认情况下,它是“http”、“https”,这意味着路由接受这两种方式。当设置为“HTTPS”时,HTTP请求会被请求升级到HTTPS。通过表单编码,符号是协议=http&协议=https。使用JSON,使用数组。
    methods(半可选) 与此路由相匹配的HTTP方法列表。例如: ["GET", "POST"].至少有一个主机、路径或方法必须被设置。用表单编码参数是methods[]=GET&methods[]=OPTIONS。使用JSON,使用数组。
    hosts(半可选) 与此路径匹配的域名列表。例如:example.com. 至少有一个主机、路径或方法必须被设置。用表单编码参数是 hosts[]=foo.com&hosts[]=bar.com。使用JSON,使用数组。
    paths(半可选) 与此路径相匹配的路径列表。例如: /my-path.至少有一个主机、路径或方法必须被设置。用表单编码参数是 paths[]=/foo&paths[]=/bar. 使用JSON,使用数组。
    Regex priority(可选) 当多个路由同时使用正则表达式匹配某个给定请求时,用来选择哪个路由解析该请求的数字。当两个路由匹配路径并且具有相同的regex_优先级时,将使用较旧的路由(最低创建位置)。注意,非regex路由的优先级不同(较长的非regex路由在较短的路由之前匹配)。默认为0。
    strip_path(可选) 当通过其中一条路径匹配路由时,从上游upstream请求URL中去掉匹配前缀。默认值为true。
    preserve_host(可选) 当通过一个主机域名匹配一条路由时,在upstream请求头中使用请求主机头。默认设置为false,upstream主机头将是服务主机的主机头。

    添加成功返回SERVICES界面,点击Routes,查看路由。
    又或者,可以从左侧ROUTES导航进入查看路由。

    3. 验证API 代理

    浏览器验证

    Kong API需要通过Routes规则中配置的hosts or path对请求进行API调度控制。

    由于我们Routes规则中配置的hosts是虚拟域名,因此,我们需要在本地及服务器hosts列表中添加dns解析,这样在浏览器才可以携带host请求信息去正常访问Kong API。

    “WIN +R 输入drivers”,调出hosts

    10.122.45.97 test.example.com
    

    请求kong api

    $ curl -i -X GET 
      --url http://localhost:8000/request 
      --header 'Host: test.example.com'
    

    kong使用Admin API实现接口代理

    请参阅官方文档

    1. 使用Admin API添加Service

    $ curl -i -X POST 
      --url http://localhost:8001/services/ 
      --data 'name=example-service-2' 
      --data 'url=http://mockbin.org'
    

    2. 为Service添加Route

    $ curl -i -X POST 
      --url http://localhost:8001/services/example-service-2/routes 
      --data 'name=test2-api-proxy' 
      --data 'hosts[]=test2.example.com' 
      --data 'paths[]=/request' 
      --data 'strip_path=false'
    

    3. 验证API 代理

    我们先查看一下service对应的route信息

    $ curl -i -X GET --url http://localhost:8001/services/example-service-2/routes
    # 返回数据
    {
      "updated_at": 1576119679,
      "created_at": 1576119679,
      "strip_path": false,
      "snis": null,
      "hosts": [
        "test2.example.com"
      ],
      "name": "test2-api-proxy",
      "methods": null,
      "sources": null,
      "preserve_host": false,
      "regex_priority": 0,
      "service": {
        "host": "mockbin.org",
        "created_at": 1576118600,
        "connect_timeout": 60000,
        "id": "23909fa2-04ae-4f45-ab33-184098dce8ac",
        "protocol": "http",
        "name": "example-service-2",
        "read_timeout": 60000,
        "port": 80,
        "path": null,
        "updated_at": 1576118600,
        "retries": 5,
        "write_timeout": 60000,
        "tags": null,
        "extras": {}
      },
      "paths": [
        "/request"
      ],
      "destinations": null,
      "id": "5906757c-a0c5-4a41-a1a5-723658bc93f1",
      "protocols": [
        "http",
        "https"
      ],
      "tags": null
    }
    

    验证Admin API 代理结果:

    $ curl -i -X GET 
      --url http://localhost:8000/request 
      --header 'Host: test2.example.com'
    

     
    [sleepy↓]

     

  • 相关阅读:
    springboot的整合篇-springmvc,mybatis,数据库等
    快速搭建springboot工程
    Git常用命令
    SpringBoot整合通用Mapper
    SpringBoot项目部署
    实例化调用和静态方式调用的区别
    CentOS系统安装PHP7.3
    CentOS7部署LNMP环境
    Apache和Nginx的区别
    Linux系统下卸载MySQL
  • 原文地址:https://www.cnblogs.com/sunhongleibibi/p/12024386.html
Copyright © 2020-2023  润新知