Kong(四)Kong杂谈补充

一   术语

(1)Routes、Services、Upstreams、Targets关系

请求'流向':Route --> Service -->[Upstream] --> Target

注意: '对应'关系

Kong 的'六'大核心对象:Upstream、Target、Service、Route、Consumer、Plugins

Upstream健康检查机制

(2)Kong 网关对于一个请求的处理流程

​1) 客户端访问'kong网关ip地址' + '代理端口' + '请求路径'

备注: http默认为'8000',https默认为'8443'

2) 对于'client客户端'的请求,先由'Routes路由规则'匹配客户端的请求规则

3) 匹配'成功(success)'后分配相应的'Service层'

备注:一个'Route路由'指向一个'Service',但是一个Service可以被多个不同规则的'Routes'指向

4) Service服务是一个'抽象'服务层,可以用于指向具体的'target',也可以指向'upstream'

备注: Service指向upstream,upstream'指向多个target',相当于实现'负载均衡'的效果

补充: Target是'后端'服务,用'ip:port'表示

 kong的路由匹配规则  kong匹配优先级

(3)端口问题

​1)proxy_listen:kong网关用于'接收客户端'的流量入口,默认是'0.0.0.0:8000'

2)admin_listen:提供给'管理员'使用,默认值是'127.0.0.1:8001'

应用场景: 'konga的(管理)Resuful Api'的调用端口

Admin API 

(4)Service

注意: 哪些是'Required'? 哪些是'Optional可选的'?

1) 服务'实体'是每个'上游服务'的'抽象'

2) Service 的主要属性是其URL -->'Kong应该将流量代理到的地方'

 补充:可以设置为'单个字符串',也可以'单独指定'其protocol、 host、 port 和 path

3) Service 与 router '相关联',一个 Service 可以有许多'与之关联'的Router

 补充:

  [1]  Router 是Kong的'入口点',并定义匹配客户端请求的规则

  [2] 一旦 Router 匹配,Kong就会将请求'代理'到其'关联'的服务

备注: 一般'host'配置的是'upstream_name'或者'具体的target'

proxy_pass相关参考 

①  tags参数解读 

(5)Routes

github参考

Services和Routes的粗略解读

重点体会路由匹配规则

1) 路由实体定义规则以'匹配客户端请求';

2)每个Route与一个服务相关联,一个'服务(Service)'可能有'多个与之关联'的'路由(Route)';

3)匹配'给定路由'的'每个请求'都将'代理到'其关联的服务;

4)Routes 和 Services 的组合[以及它们之间的'关注点分离']提供了一种强大的路由机制

5)通过它可以在 Kong 中定义'细粒度的入口点',从而导致基础架构的'不同'上游服务

下面图示说明: '至少'必须指定其中的'一个'

+++++++++ "创建Routes" +++++++++

点击 'You can only create routes from a service page' -> 选择一个Servcie

参数核心: 从请求的'哪些维度'来匹配这条'Routes'

细节点: 可以'和路由route匹配'的有两类 -->'service'和'plugin'

实质: 拿'用户的相关请求信息'与'Routes信息'进行匹配

常用'字段': 

 1)'paths(用户的请求匹配匹配该路由的路径)'   --> "必设" -->类似'nginx的location'

 2)'hosts(匹配该路由的域名列表)'

 eg : curl  -H '域名' http://kong_ip:porxy_port/url

 细节: -d '{"hosts":["wzj.com", "shell.com"]}'

 解读: hosts属性可以接受'多个值',多个值采用","分隔;也支持'前或后通配符号*'

 3) 'name(该条路由的标识)'、

 4)'service(与这条Route关联的服务)'

重点: 多个'条件'同时满足,'用户的请求'才能匹配上该'Routes'

大白话: 要使传入请求与路由匹配,'必须满足所有'现有字段

+++++++++++ "不常用的"  +++++++++++

1)methods  '限制请求方法(GET、POST、DELETE、PATCH等)'

2)regex_priority 路由请求的'优先级','数字越大优先级越高',默认为0

strip_path字段和path_handling字段联动关系

​含义: 这'两个字段'设置是用来决定你访问的'真实路径'的

eg:paths =/myPath,strip_path=true,path_handling=v0,

最终: 你service配置的url是'http://www.baidu.com';

①  优先级的问题1

官方优先级的匹配解读  相关参考

1) kong之涉及'前缀(就是空)'和'正则(~)'匹配

 备注: kong不涉及'nginx 中location 复杂的 =和^~'等符号

2) kong 中也是'前缀路径'总是比'正则表达式'优先评估

3)regex_priority 属性从高到低'评估正则表达式'的优先级

补充: 掌握'优先级'是为了'避免多个Routes同时满足(但是其对应的Service不同)',导致'异常'

②  优先级问题2

假定: 路由的规则数'相同',都只有'paths'

[
    {
        "paths": ["/status/\d+"],
        "regex_priority": 0
    },
    {
        "paths": ["/version/\d+/status/\d+"],
        "regex_priority": 6
    },
    {
        "paths": ["/version"],
    },
    {
        "paths": ["/version/6"],
    }
]

+++++++++++++ "假定: 请求都能匹配这些路由, 则匹配顺序" +++++++++++++

客户端的'请求url': /version/6/status/10

/version/\d+/status/\d+
/status/\d+
/version/6
/version

说明: 最'常见'前缀的问题

③  优先级问题3

1)如果:'路由规则'数目不同

  出发点: '规则'越细,规则'越多',则越倾向于'匹配'

  匹配规则: kong将首先尝试匹配'具有最多规则'的路由

2)如果:'路由规则'数量相同,优先'选择A'的场景

  A只有"普通"主机报头,B有一个或多个"通配符"主机报头

  A的'非主机头信息'比B多

  A至少有一个"regex"路径,而B只有"plain"路径

  A的'路径'比B的路径长

  A.created_at < B.created_at

kong3.0+新的Routes表示 

(6)kong的日志

kong的日志插件

+++++++++++++ "修改日志格式"  +++++++++++++

/usr/local/share/lua/5.1/kong/templates/kong_defaults.lua

/usr/local/share/lua/5.1/kong/templates/nginx_kong.lua -->'修改的地方'

备注: 测试环境可以修改'日志级别(debug 看匹配的路由)'或者'日志格式'帮助我们定位问题

kong配置日志格式

①  默识

1)'无法'通过修改'/usr/local/kong/nginx.conf'来修改日志

2)kong网关启动时'通过模板渲染方式'生成的,每次'重启'都会'重新'生成

思考: '默认'的日志格式?->实际在这里'看'/usr/local/kong/nginx-kong.conf

②   修改日志格式 

# 添加log_format日志格式

log_format main 'remote_addr=[$remote_addr] http_x_forward=[$http_x_forwarded_for] time=[$time_local] request=[$request] '
        'status=[$status] byte=[$bytes_sent] elapsed=[$request_time] upstream_connect_time=[$upstream_connect_time] upstream_header_time=[$upstream_header_time] upstream_response_time=[$upstream_response_time] upstream_addr=[$upstream_addr] upstream_status=[$upstream_status] ' 'refer=[$http_referer] ua=[$http_user_agent] gzip=[$gzip_ratio] ' 'msec=[$msec] http_host=[$http_host] http_accept=[$http_accept|$http_accept_encoding|$http_accept_language]';

③  效果展示

ping ok,curl/telnet 访问 ip+port 报not route to host  一般是firewalld防火墙

④  admin的日志

(7)Kong自添加的Header 

说明: 所有'通过' kong 的请求,都会'添加'一定的 header

Key Authentication

(8)添加多个path路径

通过kong命令'Routes添加多个path路径'时,是这样的:

--data 'paths[]=/myPath&paths[]=/test'

注意: 而'不是加,'的方式

(9) 官方如何注入nginx指令

1) 可能通过'注入nginx指令',将'自定义的格式'添加到kong.conf文件中

2) 任何带有nginx_http_、nginx_proxy_、nginx_admin_'前缀'的配置

  说明:kong在'启动后'将通过'删除前缀'而转换为'等效的Nginx指令',添加到nginx配置的部分

3) kong.conf中常见'前缀'指令

 [1]  nginx_http_   -->  注入到'整个http块'指令中 

 说明: 在'kong.conf增加'如下配置: 

    nginx_proxy_large_client_header_buffers=16 128k

 启动kong后,在'nginx-kong.conf中'的server模块'增加'如下代码:

    large_client_header_buffers 16 128k;

 [2]  nginx_proxy_  -->  注入到kong'代理端口'的服务模块中

 [3]  nginx_admin_  -->  注入到kong的admin 'API接口'的服务模块中

方式2:自定义日志格式 

 自定义变量

 kong自带的kong响应头移除  headers = off

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值