k8s实践 - 如何优雅地给kong网关配置证书和插件。
前言
从去年上半年微服务项目上线以来,一直使用kong作为微服务API网关,整个项目完全部署于k8s,一路走来,对于k8s,对于kong,经历了一个从无到有,从0到1的过程,也遇到过了一些坎坷,今天准备分享一些实际的小心得和经验,本篇将尽量做到短小精干,希望能让大家一目了然。
在开始部署kong到k8s环境中时,作者就思考过一些运维问题,如下:
kong作为一个杰出的高性能微服务API网关,可以使用lua脚本编写强大的插件来扩展它的功能,在这种情况下,插件可能会随着版本而变动,如何优雅地升级它呢?- 为了让
kong支持https,需要给它配置SSL 证书,那么当证书到期后,如何优雅地升级它呢?
备注:当然还有很多其他的问题,不过与今天的主题不符,后面再继续分享。
如果部署的时候都能预先考虑好这些问题,那么当问题来临的时候,就可以得心应手地处理好它。
讨论方案
方案1
将插件和证书直接打包进镜像里
当需要升级时,制作新镜像,然后使用新镜像替换掉旧镜像即可。
方案2
将插件和证书放置到k8s的配置字典中
当需要升级时,只需更新ConfigMap的配置信息,然后重启kong即可。
从上面可以看到,方案一通过升级整个网关的方式达到升级插件或证书的目的,不满足最小化升级风险的要求,粒度偏大,生产环境一般不会采用这种方式;而方案二将插件和证书作为配置信息,真正做到最小化升级,所以采用方案二进行实践。
备注:方案一大家可以下去自己实践。
实践方案
实践此方案前,请确保已经将kong完整地部署到k8s中,这不是本篇的重点。
一、准备工作
将插件拷贝了k8s的master机器的/root/api-supported-versions目录下:

备注:这个插件返回后端目前支持的版本列表。
将证书拷贝了k8s的master机器的/root/certs目录下:

二、在k8s中创建配置信息
创建证书
由于证书属于机密信息,故创建为
secret,命令如下:kubectl -n [命名空间] delete secret kong-certs;
kubectl -n [命名空间] create secret generic kong-certs --from-file=/root/certs;
浏览结果:

创建插件
插件信息创建为
ConfigMap,命令如下:kubectl -n [命名空间] delete configmap kong-api-supported-versions;
kubectl -n [命名空间] create configmap kong-api-supported-versions \
--from-file=/root/api-supported-versions
浏览结果:

三、给kong.deployment.yml打补丁
apiVersion: apps/v1
kind: Deployment
spec:
template:
metadata:
labels:
app: kong
release: gateway
spec:
containers:
- env:
# 证书名称与文件夹名称保持一直即可。
- name: KONG_SSL_CERT
value: /certs/[证书名称].crt
- name: KONG_SSL_CERT_KEY
value: /certs/[密钥名称].key
- name: KONG_PLUGINS
# 这里很重要:不要忘记添加插件名称。
value: bundled,api-supported-versions
image: kong:0.14.0
imagePullPolicy: IfNotPresent
name: kong
ports:
- containerPort: 80
name: proxy
protocol: TCP
- containerPort: 443
name: proxy-ssl
protocol: TCP
volumeMounts:
- mountPath: /certs
name: kong-certs
# 插件目录为/usr/local/share/lua/5.1/kong/plugins,这个也是kong规定的目录。
- mountPath: /usr/local/share/lua/5.1/kong/plugins/api-supported-versions/handler.lua
name: handler-lua
subPath: handler.lua
- mountPath: /usr/local/share/lua/5.1/kong/plugins/api-supported-versions/schema.lua
name: schema-lua
subPath: schema.lua
volumes:
- name: kong-certs
secret:
defaultMode: 420
secretName: kong-certs
- configMap:
defaultMode: 420
items:
- key: handler.lua
path: handler.lua
name: api-supported-versions
name: handler-lua
- configMap:
defaultMode: 420
items:
- key: schema.lua
path: schema.lua
name: api-supported-versions
name: schema-lua
请注意,为了简要,并且说明主题,上面仅为补丁部分脚本,你需要参考它,然后修改kong的部署资源文件,最后执行kubectl -n [命名空间] apply -f [kong部署资源文件名称.yml]才能完成打补丁。
四、如何升级证书和插件
重新创建k8s的配置信息,然后重启kong就行了,完美满足方案二所诉远景。
总结
本篇先讨论了,如何优雅地给k8s环境的kong部署插件和证书的方案,然后一步步实践整个方案,如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】,也可以【关注我】,我会定期的在博客分关于k8s的运维实践。
下一篇,作者会分享《k8s实践,如何给kong自定义nginx模块》,请继续关注。
最后
如果有什么疑问和见解,欢迎评论区交流。
转载请告知作者授权,并在明显位置给出出处及链接。
k8s实践 - 如何优雅地给kong网关配置证书和插件。的更多相关文章
- k8s运维记 - 如何让部署到k8s的kong网关托管自定义静态资源?
目的 使用kong作为目录/data/reports的静态资源服务器,为了测试,已于目录/data/reports下创建文件report.html,如下: <html> <head& ...
- 在K3s上使用Kong网关插件,开启K3s的无限可能!
我的工作中很重要的一部分是参加各种各样的技术会议.最近参加的是去年11月的北美KubeCon,在会议的最后一天,所有人都焦头烂额,我也一直机械地向不同的人重复我的自我介绍.后来,我已经十分烦躁,决定逃 ...
- API网关之Kong网关简介
1. Kong简介 那么,Kong是一个什么东东呢?它是一个开源的API网关,或者你可以认为它是一个针对API的一个管理工具.你可以在那些上游service之上,额外去实现一些功能.Kong是开源的, ...
- 02 | 健康之路 kubernetes(k8s) 实践之路 : 生产可用环境及验证
上一篇< 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况 >我们介绍了我们的大体情况,也算迈出了第一步.今天我们主要介绍下我们生产可用的集群架设方案.涉及了整 ...
- 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况
近几年容器相关的技术大行其道,容器.docker.k8s.mesos.service mesh.serverless等名词相信大家多少都有听过,国内互联网公司无一不接触和使用相关技术. 健康之路早在2 ...
- 使用KONG网关实现接口迁移的灰度验证
在我们对一个API站点进行微服务化的过程中,使用KONG网关可以实现以下几个效果: 1. 业务线无感知,其实内部已经被Kong转到其他站点上执行了,这对业务线特别友好. 2. 可以实现租户级/接口级灰 ...
- kong网关: service+route+upstream
对于刚开始学习kong网关,总是一脑子浆糊迷迷糊糊.虽然已经安装好,但却不知道接下来如何下手, 因为包含项太多:service.routes.upstream.consumer.plugins等等.一 ...
- kong网关命令(一)
上次在虚拟机里安装kong网关后,因为版本(1.4)太高,目前Kong Dashboard无法支持, 后续发现Git上有个开源工具Kong admin ui,下载源码并部署到NGINX. 但是发现使用 ...
- MacOs下安装Kong网关
写在前面: 持续记录一下自己在解决api网关kong上的各种问题. 1.关于Kong网关 这是官网地址:https://konghq.com/ 2.通过brew安装postgres 因为kong的数据 ...
随机推荐
- Open Source BI Platform List
资源入口: awesome-business-intelligence https://github.com/thenaturalist/awesome-business-intelligence h ...
- Java永久代去哪儿了
http://www.infoq.com/cn/articles/Java-PERMGEN-Removed 在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法 ...
- Hibernate JPA 动态criteria语句针对null查询条件的特殊处理
最近原Hibernate项目需要添加一个条件,结构有点类似下面的格式,学生和房间是多对一的关系,现在要查询所有没有房间的学生. Class Student{ @ManyToOne Room room; ...
- (七):C++分布式实时应用框架 2.0
C++分布式实时应用框架 2.0 技术交流合作QQ群:436466587 欢迎讨论交流 上一篇:(六):大型项目容器化改造 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同 ...
- Python 30分钟入门指南
Python 30分钟入门指南 为什么 OIer 要学 Python? Python 语言特性简洁明了,使用 Python 写测试数据生成器和对拍器,比编写 C++ 事半功倍. Python 学习成本 ...
- 洛谷 P1054 解题报告
P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...
- 使用C++实现图形的旋转、缩放、平移
编译环境:VS2017 编译框架:MFC 实验内容:显示一个三角形,并将其绕中心进行旋转.缩放以及平移等操作 实验步骤: 1.打开VS2017,并创建MFC项目,具体方法参见:http://www.c ...
- PAT1082:Read Number in Chinese
1082. Read Number in Chinese (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...
- 静态代码扫描工具PMD定制xml的规则(一)操作篇
0.前言 PMD作为开源的静态代码扫描工具有很强的扩展能力,可使用java或xpath定制rule.第一篇从操作上讲解如何定制一个用于扫描xml是否规范的规则.首先我们知道xml格式的文件在java工 ...
- Extjs 上传文件 IE不兼容的问题[提示下载保存]
我最不喜欢的浏览器的是IE,但无奈很多项目的客户使用的是IE. 在使用Extjs做文件上传时,其他浏览器没有问题,但IE却一个劲提示保存文件,看服务端运行,它其实是运行成功了已经,但客户端的进度条却一 ...