当前位置: 首页 > news >正文

【Docker】数据库动态授权组件在Kubernetes集群下的测试过程记录

目录

背景

组件原理

测试设计

环境

测试脚本

脚本build为linux可执行文件

镜像构建

Dockerfile

Docker build

镜像有效性验证

总结

资料获取方法


背景

我们都知道出于安全性考虑,生产环境的权限一般都是要做最小化控制,尤其是数据库的操作授权,更是重中之重。

博主所在公司使用的是Kubernetes(k8s)进行的集群容器管理,因为容器发布时的IP都是动态分配的,而出于安全性考虑,数据库的授权又不能全部放开或者针对整个集群的IP,所以有了动态为节点进行数据库授权的需求,所以也就诞生我们今天的主角--数据库授权组件,Mysql-grant。

当然,我们今天介绍的不是这个组件的开发,而是相关的测试过程记录。

组件原理

这个数据库动态授权组件的原理不复杂,每次Kubernetes有节点变化(上线或者下线服务)时,调取Kubernetes相关的API接口获取已配置的服务改变的对应节点的IP,然后对其进行授权或者权限回收操作(IP+user)。相当于在获取到信息之后执行下面的命令:

grant select,insert,update on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;

测试设计

在了解了具体的需求之后,我很快的确定了测试思路。具体如下:

  • 拉起两个mysql数据库,每个库中新建两个DB,每个DB个新建一张表。
  • 写一个无限循环的脚本,每隔两秒访问一次数据库,插入一条数据,查询一次数据。
  • 把脚本打包到多个不同的镜像服务中,push到公司的镜像库中。
  • 然后根据设计的场景使用k8s(Kubernetes)发布、下线服务、做Mysql-grant相关的配置信息改变来完成相关验证;

环境

这次主要用的环境如下:

  • golang开发环境
  • docker环境
  • 镜像运行环境(centos)

测试脚本

考虑到镜像的大小及Dockerfile的复杂性,本次使用了golang来写这个脚本,直接编辑成二进制文件,可以不依赖环境执行,具体的脚本如下,把他保存为mysqlgrant-test.go即可:

package mainimport ("time""database/sql""fmt"_ "github.com/go-sql-driver/mysql"
)func main() {count := 0for{fmt.Println("====================")// fmt.Println(count)fmt.Println(time.Now().Format("2006-01-02 15:04:05"))time.Sleep(time.Second * 2)count++db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/easytest?charset=utf8")checkErr(err)//插入数据stmt, err := db.Prepare("INSERT base_case SET case_name=?,project_id=?,content=?,description=?")checkErr(err)res, err := stmt.Exec(count, "Golang", time.Now(),time.Now())checkErr(err)id, err := res.LastInsertId()checkErr(err)fmt.Println(id)//查询数据rows, err := db.Query("select * from base_case order by case_id desc limit 1")checkErr(err)for rows.Next() {var content stringvar case_id stringvar case_name stringvar project_id stringvar description stringerr = rows.Scan(&description, &case_id, &case_name, &project_id, &content)checkErr(err)fmt.Println(case_id +":"+ case_name +" "+ project_id +" "+ description +" "+ content)// fmt.Println(case_id)// fmt.Println(case_name)// fmt.Println(project_id)// fmt.Println(content)// fmt.Println(description)}db.Close()}
}func checkErr(err error) {if err != nil {panic(err)}
}

脚本build为linux可执行文件

golang脚本的编译命令如下:

go build 脚本名称

但是因为楼主使用的是windows,默认的会直接build成 .exe文件
所以我们要手动设置环境变量,具体命令如下:

SET CGO_ENABLED=0
SET GOOS=linux  
SET GOARCH=amd64
go build mysqlgrant-test.go

GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)
GOARCH:目标平台的体系架构(386、amd64、arm)
交叉编译不支持 CGO 所以要禁用它
上面的命令编译 64 位可执行程序,你当然应该也会使用 386 编译 32 位可执行程序

镜像构建

Dockerfile

上面的脚本准备好了之后,接下来要制作镜像,我们这次试用的是dockerfile,dockerfile内容如下:

FROM    centos:6.7
MAINTAINER     <"bingo@xxxx.com">
RUN mkdir -p /usr/local/user-web/mysqlgrant-test
ADD ./mysqlgrant-test /usr/local/user-web/mysqlgrant-test
#ADD ./conf /usr/local/usr-web/mysqlgrant-test/conf
WORKDIR /usr/local/user-web/mysqlgrant-test
CMD   ./mysqlgrant-test

Docker build

将上面的信息保存到dockerfile文件之后,切换到文件所在目录,执行下面命令来进行镜像的构建:

docker build -t mysqlgrant-test/centos:v1.0  . 

参数说明:

-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

注意后面的.不能遗漏,它表示在当前目录构建的意思

镜像构建成功之后我们可以通过下面的命令来查看:

root@msxxx:~$ docker images
REPOSITORY                   TAG                   IMAGE ID            CREATED             SIZE
mysqlgrant-test/centos       v1.0                  70bf1840fd7c        15 seconds ago      158.5 MB

镜像有效性验证

我们可以使用新的镜像来创建容器:

root@msxxx:~$ docker  run -it mysqlgrant-test/centos:v1.0  /bin/bash --name mysqlgrant

参数说明:
--name mysqlgrant表示为这个容器设置了一个叫mysqlgrant的别名
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。

执行上面的命令后会默认进入mysqlgrant-test目录,即我们上面在dockerfile中设置的WORKDIR。

当然我们也可以直接执行下面的命令来获取容器的标准输出:

docker logs mysqlgrant

这就是脚本输出的内容:

至此,所有的东西准备完毕,只需要根据准备好的测试用例,做相关业务场景的验证就可以了。

总结

在新技术应用的过程中难免会遇到一些问题,比如我们今天的介绍的容器化过程中解决数据库鉴权问题开发的组件。我的感触是,接触新的事物我们能学习到更多的东西。此前学习的docker、golang等等,都没有实战的基础,这一次虽然也只是简单的实践,但是还是有一种豁然开朗的感觉。


资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

相关文章:

【Docker】数据库动态授权组件在Kubernetes集群下的测试过程记录

目录 背景 组件原理 测试设计 环境 测试脚本 脚本build为linux可执行文件 镜像构建 Dockerfile Docker build 镜像有效性验证 总结 资料获取方法 背景 我们都知道出于安全性考虑&#xff0c;生产环境的权限一般都是要做最小化控制&#xff0c;尤其是数据库的操作授…...

数据结构【第3章】——线性表

线性表的定义 线性表&#xff1a;零个或多个数据元素的有限序列。 1&#xff09;线性表是一个序列。即元素之间是有顺序的&#xff0c;若元素存在多个&#xff0c;则第一个元素无前驱&#xff0c;最后一个元素无后继&#xff0c;其他每个元素都有且只有一个前驱和后继。 2&a…...

MySql之分库分表

数据库瓶颈 不管是IO瓶颈还是CPU瓶颈&#xff0c;最终都会导致数据库的活跃连接数增加&#xff0c;进而逼近甚至达到数据库可承载的活跃连接数的阈值。在业务service来看&#xff0c; 就是可用数据库连接少甚至无连接可用&#xff0c;接下来就可以想象了&#xff08;并发量、吞…...

数据结构—图的遍历

6.3图的遍历 遍历定义&#xff1a; ​ 从已给的连通图中某一顶点出发&#xff0c;沿着一些边访问遍历图中所有的顶点&#xff0c;且使每个顶点仅被访问一次&#xff0c;就叫作图的遍历&#xff0c;它是图的基本运算。 遍历实质&#xff1a;找每个顶点的邻接点的过程。 图的…...

MySQL主从复制基于二进制日志的高可用架构指南

前言 在现代数据库架构中&#xff0c;MySQL主从复制技术扮演着重要角色。它不仅可以提升数据库性能和可扩展性&#xff0c;还赋予系统卓越的高可用性和灾难恢复能力。本文将深入剖析MySQL主从复制的内部机制&#xff0c;同时通过一个实际案例&#xff0c;展示其在实际场景中的…...

RestTemplate HTTPS请求忽略SSL证书

问题描述 使用RestTemplate发送HTTPS请求的时候&#xff0c;出现了这样的一个问题&#xff1a; sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification …...

Jenkins触发器时间、次数设定

触发器触发条件介绍 触发器触发条件公式&#xff1a;由5颗星组成 * * * * * 分别代表&#xff1a;分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6) 企业项目中常用场景介绍 场景1&#xff1a;接口脚本部分测试通过&#xff0c;部分还在进行&#xff0c;回归测试脚本执行…...

kafka partition的数据文件(offffset,MessageSize,data)

partition中的每条Message包含了以下三个属性&#xff1a; offset&#xff0c;MessageSize&#xff0c;data&#xff0c;其中offset表示Message在这个partition中的偏移量&#xff0c;offset不是该Message在partition数据文件中的实际存储位置&#xff0c;而是逻辑上一个值&…...

htnl根据轮播图图片切换背景色

htnl根据轮播图图片切换背景色 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>轮播图示例</title><link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/swiper10/swiper-bundle.min.css&q…...

gpu-manager安装及测试

提示&#xff1a;GPU-manager安装为主部分内容做了升级开箱即用&#xff0c;有用请点收藏❤抱拳 文章目录 前言一、约束条件二、使用步骤1.下载镜像1.1 查看当前虚拟机的驱动类型&#xff1a; 2.部署gpu-manager3.部署gpu-admission4.修改kube-scheduler.yaml![在这里插入图片描…...

Go和Java实现享元模式

Go和Java实现享元模式 下面通过一个实例来说明享元模式的使用。 1、享元模式 享元模式主要用于减少创建对象的数量&#xff0c;以减少内存占用和提高性能。这种类型的设计模式属于结构型模式&#xff0c;它提 供了减少对象数量从而改善应用所需的对象结构的方式。 享元模式…...

Zookeeper特性与节点数据类型详解

CAP&Base理论 CAP理论 cap理论是指对于一个分布式计算系统来说&#xff0c;不可能满足以下三点: 一致性 &#xff1a; 在分布式环境中&#xff0c;一致性是指数据在多个副本之间是否能够保持一致的 特性&#xff0c;等同于所有节点访问同一份最新的数据副本。在一致性的需…...

函数的递归

1、什么是递归&#xff1f; 程序调用自身的编程技巧称为递归。 递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&#x…...

Android T 窗口层级其二 —— 层级结构树的构建(更新中)

如何通过dump中的内容找到对应的代码&#xff1f; 我们dump窗口层级发现会有很多信息&#xff0c;adb shell dumpsys activity containers 这里我们以其中的DefaultTaskDisplayArea为例 在源码的framework目录下查找该字符串&#xff0c;找到对应的代码就可以通过打印堆栈或者…...

ASIC芯片设计全流程项目实战课重磅上线 ,支持 65nm制程流片 !

全流程项目实战课学什么&#xff1f; 此次推出【 ASIC芯片设计全流程项目实战课】&#xff0c;基于IPA图像处理加速器&#xff0c;以企业级真实ASIC项目为案例&#xff0c;学员可参与全流程项目实践&#xff0c;以及65nm真实流片&#xff01; 众所周知&#xff0c;放眼整个IC硕…...

背上沉重的书包准备run之react篇

沉重&#xff0c;太沉重了。。。没理好捏&#xff0c;等我脑子歇歇再好好补充一下 react特性&#xff1f; React 是一个用于构建用户界面的 JavaScript 库&#xff0c;它具有以下特性&#xff1a; 组件化开发&#xff1a;React 基于组件化思想&#xff0c;将 UI 拆分为独立、…...

LAMP及论坛搭建

一、概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP&#xff08;或…...

php-cgi.exe - FastCGI 进程超过了配置的请求超时时限

解决方案一&#xff1a; 处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题 内容转载&#xff1a; 处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题_php技巧_脚本之家 【详细错误】&#xff1a; HTTP 错误 500.0 - Internal Server Error C:…...

linux系统虚拟主机开启支持SourceGuardian(sg11)加密组件

注意&#xff1a;sg11我司只支持linux系统虚拟主机自主安装。支持php5.3及以上版本。 1、登陆主机控制面板&#xff0c;找到【远程文件下载】这个功能。 2、远程下载文件填写http://download.myhostadmin.net/vps/sg11_for_linux.zip 下载保存的路径填写/others/ 3、点击控制…...

让我们一起探讨汽车充电桩控制主板的应用

你是否想过&#xff0c;你的汽车充电桩可以更智能?可以支持更多类型的电池&#xff0c;更多操作系统&#xff0c;更多协议和更多电源?让我们一起探讨汽车充电桩控制主板的应用。 控制主板是充电桩的大脑&#xff0c;它可以应用于各种充电桩&#xff0c;包括智能充电桩、电动汽…...

TLE94112EL十二通道半桥驱动芯片详解与Arduino电机控制实战

1. TLE94112EL驱动芯片与DC电机控制板技术综述TLE94112EL是英飞凌&#xff08;Infineon&#xff09;面向汽车电子和工业控制领域推出的高集成度十二通道半桥驱动芯片&#xff0c;专为多电机协同控制场景设计。其核心价值在于将传统MCU需大量GPIO、PWM资源和外部保护电路才能实现…...

深入STM32 HAL库启动流程:从HAL_Init()到Systick,一步步拆解时钟与中断初始化的那些事

深入STM32 HAL库启动流程&#xff1a;从HAL_Init()到Systick&#xff0c;一步步拆解时钟与中断初始化的那些事 在嵌入式开发领域&#xff0c;STM32系列微控制器因其强大的性能和丰富的生态而广受欢迎。对于希望深入理解底层机制的中级开发者来说&#xff0c;HAL库的启动流程是一…...

DDD难落地?就让AI干吧! - cleanddd-skills介绍窗

AI训练存储选型的演进路线 第一阶段&#xff1a;单机直连时代 早期的深度学习数据集较小&#xff0c;模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低&#xff0c;吞吐量极高&#xff0c;也就是“数据离…...

SparkFun MetaWatch Arduino库深度解析:蓝牙SPP嵌入式控制

1. SparkFun MetaWatch Arduino库深度解析&#xff1a;蓝牙智能手表的嵌入式控制实践1.1 项目背景与工程定位MetaWatch 是2013年前后推出的早期开源智能手表平台&#xff0c;其核心价值在于完全开放的硬件设计与通信协议。SparkFun 推出的SFE_MetaWatchArduino 库并非通用蓝牙协…...

diffusion model的基本概念

主要分为两个步骤&#xff1a;加密加噪声让原图变成模糊图&#xff08;Forward Process),将模糊图去噪声&#xff0c;让其变成清晰图&#xff08;Reverse Process) 先说Recerse Process的过程本质就是去除掉无用的像素&#xff0c;让有用的像素留下来&#xff08;类似加密与解密…...

解决VSCode远程SSH连接中的XHR错误

解决VSCode远程SSH连接中的XHR错误 在使用Visual Studio Code(以下简称VSCode)进行远程SSH连接时,开发者可能会遇到无法下载vscode-server的问题,导致连接失败并抛出XHR错误。以下是一些常见的问题分析和解决方案。 问题背景 假设你正在使用VSCode连接到一台远程服务器,…...

多租户下的系统业务开发过程探讨眯

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作&#xff0c;需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释&#xff08;因业务实际需要存储大数值关联字段&#xff09;。 表的核心特性为Java 多线程密集读写&#xff0c;业务请求持续高…...

接口测试——pytest框架续集怀

智能体时代的代码范式转移与 C# 的战略转型 传统的 C# 开发模式&#xff0c;即所谓的“工程导向型”开发&#xff0c;要求开发者创建一个复杂的项目结构&#xff0c;包括项目文件&#xff08;.csproj&#xff09;、解决方案文件&#xff08;.sln&#xff09;、属性设置以及依赖…...

bh3_login_simulation-memories:崩坏3多渠道服桌面端扫码登录完整指南

bh3_login_simulation-memories&#xff1a;崩坏3多渠道服桌面端扫码登录完整指南 【免费下载链接】bh3_login_simulation-memories 轻巧的崩坏3渠道服桌面端扫码登陆解决方案 项目地址: https://gitcode.com/gh_mirrors/bh/bh3_login_simulation-memories 崩坏3作为一款…...

Serilog:从结构化日志认知到 .NET 工程落地痛

1. 前言 本文详细介绍如何使用 kylin v10 iso 文件构建出 docker image&#xff0c;docker 版本为 20.10.7。 2. 构建 yum 离线源 2.1. 挂载 ISO 文件 mount Kylin-Server-V10-GFB-Release-030-ARM64.iso /media 2.2. 添加离线 repo 文件 在/etc/yum.repos.d/下创建kylin-local…...