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 和 path3) 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
Kong(四)Kong杂谈补充相关推荐
- Kong 发布 Kong Brain 和 Kong Immunity,可进行智能自动化和适应性监控
四个月前,在Kong Summit我们做了API管理已死的主题演讲,并表达了想做服务控制平台的愿景.今天,我们正朝着实现这一愿景迈出关键的一步,在Kong企业版平台上推出了人工智能和机器学习的新功能- ...
- kong笔记——kong/konga的搭建
kong笔记 目录导航 本篇及以后的此系列文章皆为实战篇 版本介绍(重点,重点,一定要观察版本,防止不兼容情况!!): kong 2.5.0 konga 0.14.9 pgsql 9.6 linux ...
- 云原生微服务网关 Kong 和Kong 管理UI Konga快速安装攻略
前言 在微服务架构中,由于系统和服务的细分,导致系统结构变得非常复杂, 为了跨平台,为了统一集中管理api,同时为了不暴露后置服务.甚至有时候需要对请求进行一些安全.负载均衡.限流.熔断.灰度等中间操 ...
- 云原生网关 Kong 和Kong 管理UI 的完全安装攻略
1. 前言 上一文我们对Kong网关的简单介绍,今天我们来搭建Kong的环境.以便于以后对Kong的进一步了解和学习. 2. Kong支持的环境 从上图来看Kong对Linux.MacOS.容器.云 ...
- kong笔记——kong的权限认证插件选择参考
kong笔记--目录导航 kong自身共提供了这么几个权限认证插件: basic auth; key auth; hmac auth; jwt auth; oauth2 auth 接下来来逐个介绍其特 ...
- kong笔记——kong、nginx性能压测对比
简述 kong笔记 目录导航 前面介绍了kong的基本使用以及相关原理,那么接下来,我们需要对kong的性能做一个简单的了解. 性能压测 测试环境 机器类别及IP地址 硬件配置 操作系统 软件配置 网 ...
- GB9706.1检测项目详解(四)-说明书补充解释
微信公众号:医械测试,欢迎关注,也可以查看专栏医疗器械,更多专业知识在其中. 上一篇文章我们介绍了导线.气瓶.指示灯颜色及随机文件说明,今天继续往下看,首先对上篇进行一个补充,上篇我们讲了随机文件(主 ...
- 设计新一代的网游——第四章(补充)
补充 史玉柱和他的抢钱游戏 史玉柱把他的保健品抢钱机制,用到了网络游戏中,开创了免费游戏盈利的风潮. 免费是羊头,抢钱才是狗肉.他的免费游戏,甚至成了中国最贵的网络游戏.这不是诈骗是什么?用免费大制作 ...
- 整理Silverlight资源列表(四)——Silverlight案例补充
在过去整理资料中,发现其中有一部分案例偏小 实用 适合于初学者开发.完全可以做参考,其中包含一些难的源码项目案例,今天整理出其中一部分发上来.因为过去资料时间有点长,可能其中有些连接的资源失效或无法访 ...
最新文章
- 【转】web 前端研发工程师编程能力飞升之路
- 李飞飞获全球最权威女性领导力奖 Athena Award,讲述推动AI多元化三大原因(视频)...
- 高效的密码攻击方法:彩虹表
- 讲解Guitar Pro打谱使用技巧
- Android Binder基本概念流程学习
- chrome session丢失_一文带你彻底读懂Cookie、Session、Token到底是什么
- 【数据结构与算法】之深入解析“最好买卖股票的时机含冷冻期”的求解思路与算法示例
- android 个推打开页面,个推android客户端点击跳到指定activity
- python中类似对象吗_关于性能:什么是Python中最快的(访问)类似结构的对象?
- ios html fixed,关于IOS的Safari浏览器fixed定位失效的那些坑
- 认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)
- JC-6、OpenCV+Tensorflow入门人工智能图像处理
- 【UE4 Cesium】加载离线地图
- GB2312 编码(转)
- HDI(高密度互联)PCB板
- 计算机毕业设计SSM电影售票管理系统【附源码数据库】
- 如何理解矩阵的「秩」?
- LVS的模式一:DR(直接路由)模式
- node更改html中的列表,HTMLCollection和NodeList
- Android Context 归因标记