在完整Kubernetes集群上部署微服务
写在前面接下来我们尝试在完整集群上部署微服务,首先来复习之前的一些命令以及学习一个新的命令,了解这些对于学习和熟悉Kubernetes有非常大的帮助。
新的命令首先查看一下当前其他节点的运行状态信息,可以看到它们都是Ready状态:
1234[root@server02 ~]# kubectl get nodeNAME STATUS ROLES AGE VERSION192.168.51.121 Ready <none> 4h v1.9.0192.168.51.123 Ready <none> 4h v1.9.0
再来查看一下services,可以看到这里有一个Kubernetes默认的services:
123[root@server02 ~]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP ...
Kubernetes完整集群搭建
完整集群部署本篇尝试对之前使用的基础集群进行改造和升级,使其成为一个比较完整的Kubernetes集群。
理解认证授权为什么要认证想理解认证,我们得从认证用于解决什么问题、防止什么问题的发生入手?防止什么问题呢?是防止有人入侵你的集群,root你的机器后我们集群依然安全吗?不是吧,root都到手了,那就为所欲为,防不胜防了。
其实网络安全本身就是为了解决在某些假设成立的条件下如何防范的问题。比如一个非常重要的假设就是两个节点或者ip之间的通讯网络是不可信任的,可能会被第三方窃取,也可能会被第三方篡改。就像我们上学时候给心仪的女孩传纸条,传送的过程可能会被别的同学偷看,甚至内容可能会从我喜欢你修改成我不喜欢你了。当然这种假设不是随便想出来的,而是从网络技术现状和实际发生的问题中发现、总结出来的。kubernetes的认证也是从这个问题出发来实现的。
概念梳理为了解决上面说的问题,kubernetes并不需要自己想办法,毕竟是网络安全层面的问题,是每个服务都会遇到的问题,业内也有成熟的方案来解决。这里我们一起了解一下业内方案和相关的概念。(1)对称加密/非对称加密。(2)SSL/TLS。
...
Kubernetes简易环境使用
写在前面接下来我们开始在Kubernetes简易环境中,来练习和使用一些常用的kubectl的命令,了解这些对于后续熟练和使用kubernetes有非常大的帮助。笔者将kubectl命令安装在了主节点上,因此接下来就在主节点上执行对应的kubectl命令。
(1)使用kubectl version命令查看k8s的版本信息:
123[root@server02 target]# ·Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T21:07:38Z", GoVersion:"go1.9.2", Compiler:"gc", Platfo ...
Kubernetes基础知识
Kubernetes简介Kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理,用于管理云平台中多个主机上的容器化的应用。Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。
在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
Kubernetes集群Kubernetes 协调一个高可用计算机集群,每个计算机作为独立单元互相连接工作。Kubernetes 以更高效的方式跨集群自动分发和调度应用容器。一个Kubernetes集群包含两种类型的资源:Master(调度整个集群)和Nodes(负责运行应用)。
Master调度整个集群Master协调集群中的所有活动 ...
Kubernetes基础知识
Kubernetes简介Kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理,用于管理云平台中多个主机上的容器化的应用。Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。
在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
Kubernetes集群Kubernetes 协调一个高可用计算机集群,每个计算机作为独立单元互相连接工作。Kubernetes 以更高效的方式跨集群自动分发和调度应用容器。一个Kubernetes集群包含两种类型的资源:Master(调度整个集群)和Nodes(负责运行应用)。
Master调度整个集群Master协调集群中的所有活动 ...
SpringBoot轻松实现接口加解密
写在前面最近负责一个前后端分离架构下新项目的搭建工作,需要考虑到后台接口的加密与解密工作。其实接口的加密与解密是一个很常见的需求,开发者可以自定义过滤器,将请求和响应分别拦截并进行相应的解密与加密操作。可以看到这种方式简单粗暴,灵活度高,适应性强。不过呢,本篇决定使用另一种思录,即使用SpringMVC提供的@RequestBodyAdvice和@ResponseBodyAdvice注解来对请求和响应进行增强处理(预处理)。
本篇尝试利用@RequestBodyAdvice和@ResponseBodyAdvice注解来对请求和响应进行增强处理,并在此基础上对请求和响应进行解密和加密操作,接着将其制作成一个starter并发布到jitPack中,最后新建一个项目来尝试使用该starter。
编写加解密场景启动器第一步,新建一个名为encrypt-spring-boot-starter的SpringBoot项目,在其POM文件中新增如下依赖:
1234567891011121314151617<dependencies> <dependency> ...
SpringBoot实现图形验证码
写在前面在实际生活中,我们经常会遇到在登陆的时候,需要输入图形验证码这样的场景,验证码不仅可以防止爬虫的抓取,还可以限制接口短时间内被访问的次数,可以说也是一种限流措施。本篇来学习如何在前后端分离架构下,基于SpringBoot实现图形验证码这一功能。
实战项目初始化第一步,新建一个名为verify-code的SpringBoot项目,并在其POM文件中添加如下依赖:
12345678910111213141516171819202122<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</gr ...
SpringBoot实现JSON数据重复读取
写在前面最近遇到一个很尴尬的问题,前端传给后端的JSON数据,如果开发者对此进行了拦截并进行了消费,那么后续在controller中就无法再次获取对应数据。原因在于服务端是通过IO流来解析JSON数据,而流是一种特殊的结构,只要读完就没有了,而在某些场景下往往希望可以多次读取。
举一个非常简单的例子,接口幂等性实现,即同一个接口在规定时间内多次接收到相同参数的请求,那么此时需要拒绝这些相同请求。我们在具体实现的时候,可能会先将请求中的参数提取出来,如果参数是JOSN数据,那么由于流已经读取了,因此后续在接口是无法再次获取JSON数据的。
问题再现第一步,新建一个名为many-json的SpringBoot项目,并在其中新增Web依赖。
第二步,新建一个interceptor包,并在该包内新建一个RequestInterceptor类,这个类需要实现HandlerInterceptor接口并重写其中的preHandle方法:
123456789public class RequestInterceptor implements HandlerInterceptor { p ...
SpringBoot实现定时任务
写在前面在实际工作中,定时任务是一个很常见的功能,如定时统计订单数、数据库备份、定时发送短信和邮件、定时统计博客访客等等,简单的定时任务可以直接通过Spring提供的@Scheduled注解来实现,复杂一点的定时任务则可以通过集成Quartz([kwɔːts])来实现,本篇将分别介绍如何使用这两种方式实现定时任务。
项目初始化新建一个名为time-task的SpringBoot项目,后续将在该项目中进行定时任务的实现。
@Scheduled注解方式小试牛刀第一步,添加依赖。在项目的POM文件中新增Web依赖:
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
第二步,开启定时任务。在项目启动类上添加@EnableScheduling注解,相应的代码为:
1234567@EnableScheduling@Spri ...
SpringBoot+Vue实现一个代码生成器
写在前面在前面我们学习了SpringBoot+Vue这一套前后端分离的优秀架构,接下来我们尝试基于此实现一个代码生成器。在平时工作中,可能我们使用比较多的还是Mybatis Generate生成器,以此来根据数据表逆向生成对应的Dao层和Mapper层代码。其实生成器的核心,是使用JDBC来获取数据库中的各种元数据信息,并基于此来实现各种功能。本篇要实现的代码生成器不仅可以生成Dao层和Mapper层代码,还可以生成Service和Controller层代码,涵盖了一些基本操作,开发者要是实现一个简单的项目,几乎可以做到不写任何一行代码。
用法介绍
用户在序号1/2/3分别输入数据库用户名,密码、连接地址,然后点击序号4,如果数据库可以连接得上,那么序号5就会展示连接成功的提示信息,否则展示连接失败;如果成功接着在序号6中输入要生成的包的名称,也就是${groupId}.${artifactId},接着点击序号7来生成配置,如果成功那么序号8处就会生成对应的数据表名称、实体类名称、mapper文件名称、service名称和controller名称 ...