关于kubernetes:Kubernetes搭建Yearning与简单使用

33次阅读

共计 6214 个字符,预计需要花费 16 分钟才能阅读完成。

背景:

数据库根本为 myql, 数量不是很多,过来始终默认开启了防火墙模式通过公司固定 IP, 近程拜访操作 mysql。疫情起因,一些小伙伴不喜爱近程通过公司的网络去连贯 mysql,频繁增加防火墙操作。并且对数据库的操作及其不标准,没有拜访操作的日志,也没有各种审核。尽管每次操作数据库前会对数据库进行备份。然而这样的平安操作隐患还是很重大的。在此背景下发现还是须要一款 mysql 审计平台,规范化数据库的操作。长年混迹于 github 的我搜寻关键词 mysql 审计找到了 Yearning,当然了能够更不便的在 gitee 的仓库去看!

向下滑 README.md 找到官网 or Install 装置及应用日志(貌似其实都跳转到官网了)

跳转到官网页面点击指南有二进制包 and docker kubernetes 的装置形式,集体是习惯 all in kubernetes 就抉择 kubernetes 的装置形式了!

Kubernetes 搭建 Yearning

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

前提:

mysql 版本必须为 5.7 及以上版本 (8.0 及以上请将 sql_mode 设置为空) 并已当时自行装置结束且 创立 Yearning 库 , 字符集应为 UTF8mb4 (仅 Yearning 所需 mysql 版本)

咱的数据库间接用的腾讯云的 cdb, 创立了数据库,并实现了受权!

创立 Namespace

创立一个独自的命名空间搭建 yearning, 当然了也能够在其余已有的命名空间搭建。齐全能够依据集体需要爱好

kubectl create ns yearning

创立 Secret

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

对应配置应用 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

创立 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

期待三个 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,这些货色都能够看集体的布局!

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

创立 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

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

数据库脚本问题

浏览器拜访:master-yearning.xxxx.com。输出默认的账户明码 admin/Yearning_admin. 无奈登陆?what? 登陆数据库治理控制台 core_accounts 用户数据为空,杂搞?

想不到好的办法,偷懒了一下采纳一下二进制的形式搞一波:参照 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 治理控制台发现用户生成

浏览器持续登陆 master-yearning.xxxx.com or delete 一下 deployment and apply 从新生成一下:
失常来说能够进入 yearning 控制台:

接着问题又来了:貌似是在创立用户的时候?始终提醒我:config.toml 文件中 SecretKey 值必须为 16 位! 没有方法搞?

认真看一眼文档: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 明码

处于平安方面思考,第一步骤应该是批改管理员明码:

创立新用户

单击编辑将 zhangpeng 设置为非审计人

还有权限?盲猜一下是权限组外面设置?前面再看

增加数据源

创立一个环境

居然能够创立环境搜一下先创立个环境意思一下:

左侧栏 - 自定义环境增加一下 Tencent 环境保留

环境具体什么用呢?我是不是能够辨别正式 qa 开发环境?这里就只演示一下了 …. 我也是第一次用 …… 昨天跑了一遍,明天是反复了 略微顺畅了一下!

增加数据源

增加数据源这里发现要先设置一个流程!

创立流程

数据源

保留数据胜利如下图:

创立一个权限组并将用户退出用户组

创立一个权限组 zhangpeng,DDL,DML,QUERY 权限都先退出了 ….

将 admin zhanpeng 用户退出 zhangpeng 用户组(这里的组是不是应该有其余用法?然而这里不增加后续工单申请看不到数据源)

登陆普通用户 zhangpeng 创立工单

登陆普通用户

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

创立工单

肯定记的普通用户也要退出权限组, 否则 DML DDL 查问这里无奈显示数据源!

对于 DML DDL 将真我都分不太清,数据库用的真心很少,也没有太多触碰。根本应该是上面这样的定义的?
DML(Data Manipulate Language):数据操作语言。对表中的数据进行减少、删除、批改
DDL(Data Define Languge):数据定义语言。对数据库和表进行治理,例如创立、批改、删除等。
留神:参照:SQL 语言之 DML & DDL
不论了玩一个简略的创立数据库的例子?
工单申请 -DDL- 工单申请

填写 SQL 这里右击鼠标进行 SQL 检测

审计人审批工单

zhangpeng 用户的定义就是普通用户,admin 用户这里就做审计人
登陆 admin 的控制台:
点击审核 - 工单 - 找到要审核工单点击详情

找到 sql 语句右击鼠标 SQL 检测

期待 SQL 检测通过点击右上角批准审批工单

期待工单运行实现

当然了实现后 zhangpeng 用户下也能够看到工单审核实现

验证

查看一下是否创立胜利?
admin or zhangpeng 用户工单申请这里 DML 或者 DDL 工单申请这里数据库选项栏能够看到 zhangpeng 数据库曾经创立胜利了

当然了也能够登陆数据库后盾查看 10.0.2.2 进行确认一下:

这里就只进行简略的数据库创立的操作流程了抛砖引玉!

总结:

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

正文完
 0