首页 > 其他分享 >Kubernetes搭建Yearning与简单使用

Kubernetes搭建Yearning与简单使用

时间:2023-02-01 16:05:21浏览次数:63  
标签:kubectl name Kubernetes Yearning 创建 数据库 yearning 工单 搭建

背景:

数据库基本为myql,数量不是很多,过去一直默认开启了防火墙模式通过公司固定IP,远程访问操作mysql。疫情原因,一些小伙伴不喜欢远程通过公司的网络去连接mysql,频繁添加防火墙操作。并且对数据库的操作及其不规范,没有访问操作的日志,也没有各种审核。虽然每次操作数据库前会对数据库进行备份。但是这样的安全操作隐患还是很严重的。在此背景下发现还是需要一款mysql审计平台,规范化数据库的操作。常年混迹于github的我搜索关键词 mysql 审计找到了 Yearning,当然了可以更方便的在gitee的仓库去看! image.png 向下滑README.md找到官网or Install 安装及使用日志(貌似其实都跳转到官网了) image.png 跳转到官方页面点击指南有二进制包 and docker kubernetes的安装方式,个人是习惯all in kubernetes就选择kubernetes的安装方式了! image.png

Kubernetes搭建Yearning

注:参照官方文档操作:https://next.yearning.io/guide/cloud.html

前提:

mysql 版本必须为5.7及以上版本(8.0及以上请将sql_mode 设置为空)并已事先自行安装完毕且创建 Yearning 库,**字符集应为 UTF8mb4 **(仅 Yearning 所需 mysql 版本) image.png 咱的数据库直接用的腾讯云的cdb,创建了数据库,并完成了授权!

创建Namespace

创建一个单独的命名空间搭建yearning,当然了也可以在其他已有的命名空间搭建。完全可以根据个人需求喜好

kubectl create ns yearning

创建Secret

注:这里手贱点开了,来自知乎的连接,按照知乎的文档跑了一遍,顺便给大家加深一下印象image.png

对应配置使用base64加密

echo -n 'addr' | base64  #数据库地址包括端口
echo -n 'user' | base64  #数据库用户名
echo -n 'pass' | base64  #数据库密码
echo -n 'data' | base64  #yearning对应数据库名

创建secret.yaml并创建secret密钥

cat secret

apiVersion: v1
kind: Secret
metadata:
  name: db-conf
  namespace: yearning
type: Opaque  # 使用的是generic类型
data:   # 这里配置的是数据库的相关信息,使用base64加密输入: # echo -n 'xxxx' | base64
  addr: xxxxxxxxxxxxxx=
  user: exxxxxx=
  pass: xxxxxxx==
  data: xxxxxx=
kubectl apply -f secret.yaml
kubectl get secret -n yearning

image.png image.png

创建 yearning Deployment

apiVersion: apps/v1 # API版泵
kind: Deployment  # 资源类型
metadata: # 元数据
  labels: # 标签
    app: yearning
  name: yearning  # deployment的名字
  namespace: yearning  # 所属命名空间
spec: 
  replicas: 3 # 副本数
  selector: # 选择器,选择针对谁做
    matchLabels:
      app: yearning
  template: # 镜像的模板
    metadata: # 元数据
      labels: # 标签
        app: yearning
    spec:
      containers: # 容器信息
        - image: chaiyd/yearning # 容器镜像
          name: yearning # 容器的名字
          imagePullPolicy: IfNotPresent # 镜像的下载策略
          env:  # 容器中的变量
            - name: MYSQL_ADDR
              valueFrom:
                secretKeyRef: # 存储的变量信息
                  name: db-conf
                  key: addr
            - name: MYSQL_USER
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: user
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: pass
            - name: MYSQL_DB
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: data
          ports:    # 定义容器中的端口信息
            - containerPort: 8000
              name: web
              protocol: TCP
          readinessProbe:   # 就绪检查
            httpGet:
              path: /
              port: web
              scheme: HTTP
            initialDelaySeconds: 25
            periodSeconds: 2
          livenessProbe:    # 存活检查
            httpGet:
              path: /
              port: web
              scheme: HTTP
            initialDelaySeconds: 30
            periodSeconds: 2
          resources:    # 资源限制
            requests:
              cpu: 200m
              memory: 1Gi
            limits:
              cpu: 250m
              memory: 2Gi
kubectl apply -f deployment.yaml
kubectl get pods -n yearning

hrqPvnjOAc.png 等待三个pod running

创建Service

当然了,这里是看个人操作,我一般是deployment与service一起创建的。这里就按照这文档步骤一步一步来吧! cat service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: yearning
  name: yearning
  namespace: yearning
spec:
  ports:
    - port: 8000  # svc内部端口,通过clusterIP访问
      protocol: TCP
      targetPort: 8000  # 镜像内服务的端口
  selector: # 标签选择器,与deployment中的标签保持一致
    app: yearning

文档都喜欢将 svc内部端口搞成80?我是个人不喜欢这样 习惯port=targetPort。type也习惯cluserIP,这些东西都可以看个人的规划! image.png

kubectl apply -f service.yaml 
kubectl get svc -n yearning

EojGvXuiDa.png

创建Ingress对外暴露服务

业务ingress映射我的是traefik,参照:Kubernetes 1.20.5 安装traefik在腾讯云下的实践 cat ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/router.entrypoints: web
  name: yearning
  namespace: yearning
spec:
  rules:
  - host: master-yearning.xxxx.com
    http:
      paths:
      - backend:
          service:
            name: yearning
            port:
              number: 8000
        path: /
        pathType: Prefix

kubectl apply -f ingress.yaml
kubectl get ingress -n yearning

image.png

浏览器访问web与各种隐藏的问题:

数据库脚本问题

浏览器访问:master-yearning.xxxx.com。输入默认的账户密码admin/Yearning_admin.无法登陆?what?登陆数据库管理控制台**core_accounts **用户数据为空,杂搞? image.png 想不到好的方法,偷懒了一下采用一下二进制的方式搞一波:参照http://next.yearning.io/guide/install.html 下载release包并解压,修改conf.toml

ubuntu@ap-shanghai-k8s-master-1:~/mysqld/Yearning$ cat conf.toml
[Mysql]
Db = "Yearning"
Host = "xxx"
Port = "3306"
Password = "xxxxx"
User = "xxxxx"

执行Yearning install 完成数据库初始化

./Yearning install

登陆mysql管理控制台发现用户生成 image.png 浏览器继续登陆master-yearning.xxxx.com or delete 一下deployment and apply重新生成一下: 正常来说可以进入yearning控制台: image.png 接着问题又来了:貌似是在创建用户的时候?一直提示我:config.toml文件中SecretKey值必须为16位!没有办法搞? image.png 仔细看一眼文档:http://next.yearning.io/guide/cloud.html

secret有一个sk的 data!重新生成一下:

echo -n 'xxxx' | base64 #xxxx要16位
apiVersion: v1
kind: Secret
metadata:
  name: db-conf
  namespace: yearning
type: Opaque  # 使用的是generic类型
data:   # 这里配置的是数据库的相关信息,使用base64加密输入: # echo -n 'xxxx' | base64
  addr: xxxxxx=
  user: xxxxxx=
  pass: xxxxx==
  data: xxxxxx=
  sk: xxxxx==

kubectl apply -f secret.yaml
kubectl get secret -n yearning

deployment中也增加SECRET_KEY sk的相关配置

cat deployment.yaml

apiVersion: apps/v1 # API版泵
kind: Deployment  # 资源类型
metadata: # 元数据
  labels: # 标签
    app: yearning
  name: yearning  # deployment的名字
  namespace: yearning  # 所属命名空间
spec: 
  replicas: 3 # 副本数
  selector: # 选择器,选择针对谁做
    matchLabels:
      app: yearning
  template: # 镜像的模板
    metadata: # 元数据
      labels: # 标签
        app: yearning
    spec:
      containers: # 容器信息
        - image: chaiyd/yearning  # 容器镜像
          name: yearning # 容器的名字
          imagePullPolicy: IfNotPresent # 镜像的下载策略
          env:  # 容器中的变量
            - name: MYSQL_ADDR
              valueFrom:
                secretKeyRef: # 存储的变量信息
                  name: db-conf
                  key: addr
            - name: MYSQL_USER
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: user
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: pass
            - name: MYSQL_DB
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: data
            - name: SECRET_KEY
              valueFrom:
                secretKeyRef:
                  name: db-conf
                  key: sk
          ports:    # 定义容器中的端口信息
            - containerPort: 8000
              name: web
              protocol: TCP
          readinessProbe:   # 就绪检查
            httpGet:
              path: /
              port: web
              scheme: HTTP
            initialDelaySeconds: 25
            periodSeconds: 2
          livenessProbe:    # 存活检查
            httpGet:
              path: /
              port: web
              scheme: HTTP
            initialDelaySeconds: 30
            periodSeconds: 2
          resources:    # 资源限制
            requests:
              cpu: 200m
              memory: 1Gi
            limits:
              cpu: 250m
              memory: 2Gi
kubectl apply -f deployment.yaml
kubectl get pods -n yearning

到这里安装的流程就没有什么问题了。请尽量参照官方文档:http://next.yearning.io/guide/cloud.html。数据库问题,可参考一下二进制的方式,能减少入坑。

Yearning的初步使用

修改admin密码

处于安全方面考虑,第一步骤应该是修改管理员密码: image.png

创建新用户

image.png 单击编辑将zhangpeng设置为非审计人 image.png 还有权限?盲猜一下是权限组里面设置?后面再看 image.png

添加数据源

创建一个环境

竟然可以创建环境搜一下先创建个环境意思一下: image.png 左侧栏-自定义环境添加一下Tencent环境保存 image.png 环境具体什么用呢?我是不是可以区分正式 qa 开发环境?这里就只演示一下了....我也是第一次用......昨天跑了一遍,今天是重复了 稍微顺畅了一下!

添加数据源

添加数据源这里发现要先设置一个流程! image.png

创建流程

image.png

数据源

image.png 保存数据成功如下图: image.png

创建一个权限组并将用户加入用户组

创建一个权限组zhangpeng,DDL,DML,QUERY权限都先加入了.... image.png 将admin zhanpeng 用户加入zhangpeng用户组(这里的组是不是应该有其他用法?但是这里不添加后续工单申请看不到数据源) image.png image.png

登陆普通用户zhangpeng创建工单

登陆普通用户

开一个火狐浏览器,登陆zhangpeng用户 image.png

创建工单

一定记的普通用户也要加入权限组,否则DML DDL 查询这里无法显示数据源! image.png 关于DML DDL将真我都分不太清,数据库用的真心很少, 也没有太多触碰。基本应该是下面这样的定义的? DML(Data Manipulate Language):数据操作语言。对表中的数据进行增加、删除、修改 DDL(Data Define Languge):数据定义语言。对数据库和表进行管理,例如创建、修改、删除等。 注意:参照:SQL语言之DML & DDL 不管了玩一个简单的创建数据库的例子? 工单申请-DDL-工单申请 image.png 填写SQL这里右击鼠标进行SQL检测 image.png image.png image.png

审计人审批工单

zhangpeng用户的定义就是普通用户,admin用户这里就做审计人 登陆admin的控制台: 点击审核-工单-找到要审核工单点击详情 image.png 找到sql语句右击鼠标SQL检测 image.png 等待SQL检测通过点击右上角同意审批工单 image.png 等待工单运行完成 image.png image.png 当然了完成后zhangpeng用户下也可以看到工单审核完成 image.png

验证

查看一下是否创建成功? admin or zhangpeng用户工单申请这里 DML 或者DDL工单申请这里数据库选项栏可以看到zhangpeng数据库已经创建成功了 image.png 当然了也可以登陆数据库后台查看10.0.2.2进行确认一下: image.png 这里就只进行简单的数据库创建的操作流程了抛砖引玉!

总结:

  1. 安装搭建尽量按照官方最新文档来,数据库如果不能创建sql数据可以尝试二进制方式生成数据库数据。
  2. 第一次用还是不太习惯,比如权限组的定义还有所谓的审批流程,以及用户的角色定义。
  3. 希望Yearning实现的功能 能否导入云数据库?比如阿里云 腾讯云的 数据库?
  4. DDL DML这里 在CREATE database的时候要选择一个数据库?这个地方有点不合理,希望后面能改进。

标签:kubectl,name,Kubernetes,Yearning,创建,数据库,yearning,工单,搭建
From: https://blog.51cto.com/saynaihe/6031626

相关文章

  • K8S 使用Minikube快速搭建K8S集群v1.24.0+(单机版)+CRI-Docker
    参考文档:https://minikube.sigs.k8s.io/docs/start/系统版本:CentOSLinuxrelease7.6.1810(Core)软件版本:Docker-ce-18.06.0、Kubernetes-v1.24.0+硬件要求:建议最低2......
  • Windows server 2016 搭建DNS服务器
    Windowsserver2016搭建DNS服务器环境说明:1、Windowsserver2016标准版实操步骤:1、添加DNS服务器功能1.1、点击win图标打开菜单,点击打开服务器管理器。 1.2、点......
  • 基于k8s的zookeeper搭建
    1.官方文档  https://kubernetes.io/zh-cn/docs/tutorials/stateful-application/zookeeper/2.k8s部署2.1.部署文件zookeeper.yamlapiVersion:v1kind:Service......
  • hexo 搭建
    原文链接:https://my.oschina.net/u/5057806/blog/5602898一、安装Hexo此处只列出本次所需的关键步骤,更多说明详见官方文档:https://hexo.io/zh-cn/全局安装hexo-cli......
  • 浅析搭建校园在线教学视频汇聚平台的必要性及解决方案
    一、当前行业现状1)接入设备多,平台杂乱、管理难当前项目使用了多个平台及设备以实现视频直播、录播、存储、屏幕共享等教学功能,存在设备集中管理困难、视频资源无法统一汇聚......
  • ftp服务器搭建
     1.创建ftp用户useradd-d/data/nfs -s/sbin/nologinshuiwupasswdshuiwu 2.开启FTP服务yuminstall-yvsftpd修改配置文件,设定ftp上传家目录vim/etc/vsft......
  • 【Javaweb】JavaEE项目的三层架构 | 快速搭建
    逻辑类图  分层的目的是为了解耦。解耦就是为了降低代码的耦合度。方便项目后期的维护和升级。不同的层有不同的包web层com.stguigu.web/servlet/con......
  • kubernetes对接NFS动态存储
    存储PK根据不同的场景,可以考虑用Ceph、GlusterFS或NFS来存储Kubernetes数据。Ceph有较强的性能和容错能力,通常适用于中小规模的Kubernetes组件;GlusterFS具有可伸缩性,适用......
  • 浅析搭建高速公路视频监控平台的建设方案及必要性
    一、方案背景搭建高速公路视频监控平台的必要性有如下几点:1)用于高速收费站的收费流程监控、安全监察、智能收费等相关管理工作;2)用于交通卡口的测速、应急车道占用抓拍、违规......
  • react 高效高质量搭建后台系统 系列 —— 系统布局
    其他章节请看:react高效高质量搭建后台系统系列系统布局前面我们用脚手架搭建了项目,并实现了登录模块,登录模块所依赖的请求数据和antd(ui框架和样式)也已完成。本篇将......