Bat脚本获取当前目录下所有文件(包括所有子文件夹里的文件)

1.复制下面的脚本到记事本中

@echo off &setlocal enabledelayedexpansion
rem echo 当前目录:%~dp0
set DestPath=%~dp0
rem 查找的扩展名
set DestExt=*.*
rem 不提示删除之前生成的问题,不存在也不提示
del /Q /F /A list.csv 2>nul
rem 循环文件目录里所有的文件(包括子文件夹里的文件)
for /f "usebackq delims=" %%i in (`dir /b/a-d/s  "%DestPath%%DestExt%"`)  do (
   rem 输出文件路径及文件名到list.csv文件里
   echo %%i,%%~nxi>>list.csv
)

另存为getCurrentPath.bat文件。

2.将该文件复制到要获取的目录里,双击运行即可生成一个list.csv文件。文件里即可获取当前目录下所有文件(包括所有子文件夹里的文件)

如果觉得另存操作麻烦,也可以直接下载我制作好的文件,下载地址如下:

链接:https://pan.baidu.com/s/1xQTxQcMoD9Vj5CfWsb_2EA
提取码:upqg

k3s+traefik+cert-manager+letsencrypt实现web服务全https

1. 简介

随着 HTTPS 不断普及,越来越多的网站都在从 HTTP 升级到 HTTPS,使用 HTTPS 就需要向权威机构申请证书,需要付出一定的成本,如果需求数量多,也是一笔不小的开支。cert-manager 是 Kubernetes 上的全能证书管理工具,如果对安全级别和证书功能要求不高,可以利用 cert-manager 基于 ACME 协议与 Let’s Encrypt 来签发免费证书并自动续期,实现永久免费使用证书。

Cert-Manager 是一个云原生证书管理开源项目,用于在 Kubernetes 集群中提供 HTTPS 证书并自动续期,支持 Let’s Encrypt / HashiCorp / Vault 这些免费证书的签发。在 Kubernetes 中,可以通过 Kubernetes Ingress 和 Let’s Encrypt 实现外部服务的自动化 HTTPS。

架构原理图

 

解释下几个关键的资源:

Issuer/ClusterIssuer: 用于指示 cert-manager 用什么方式签发证书,本文主要讲解签发免费证书的 ACME 方式。ClusterIssuer 与 Issuer 的唯一区别就是 Issuer 只能用来签发自己所在 namespace 下的证书,ClusterIssuer 可以签发任意 namespace 下的证书。
Certificate: 用于告诉 cert-manager 我们想要什么域名的证书以及签发证书所需要的一些配置,包括对 Issuer/ClusterIssuer 的引用。

2.准备

k3s集群环境
有效的域名(如果是国内云服务器还需要备案)
一个可登录的邮箱

3.开始部署
3.1部署cert-manager
本文直接使用kubectl安装,未使用Helm.

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.yaml

 运行如下命令可看到创建了3个pod,并STATUS为:Running

kubectl get pods --namespace cert-manager

 

 

3.2 配置ClusterIssuer

创建clusterIssuer.yml,内容如下

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: 【此处修改为你的邮箱】
    privateKeySecretRef:
      name: letsencrypt-prod
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
      - http01:
          ingress:
            class: traefik

应用该配置

kubectl apply -f clusterIssuer.yml

至此,基本配置已完成,接下来我们建立一个deployment,service,traefik进行测试

4.测试
4.1创建nginx Deployment
创建一个Deployment资源,nginx.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

4.2创建Nginx Service
nginxservice.yml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: video-nginx
  name: video-nginx
  namespace: default
spec:
  ports:
    - port: 8888
      protocol: TCP
      name: nginx
      targetPort: 80
  type: ClusterIP
  selector:
    app: nginx

5.创建Ingress (重点)
workingress.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: work-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
    cert-manager.io/cluster-issuer: letsencrypt-prod  # letsencrypt-prod为ClusterIssuer名称 
spec:
  tls:
    - secretName: test-tls # 证书名
      hosts:
        - your domain # 域名
  rules:
    - host: your domain # 域名
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: video-nginx # 服务名
                port: 
                  number: 80 # 服务的端口号 service port,非pod port

 

至此,测试程序已经部署完成,接下来,在浏览器输入https://你的域名,即可看到你的网站已经使用HTTPS协议了。

6.Http自动重定向到Https

6.1创建一个Middleware

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: redirect-https
spec:
  redirectScheme:
    scheme: https
    permanent: true

6.2在Ingress中添加注解traefik.ingress.kubernetes.io/router.middlewares: default-redirect-https@kubernetescrd注意default是命名空间,redirect-https为Middleware的name

 

 

免费在线流程图、思维导图、专业强大的作图工具,支持多人实时在线协作,可用于原型图、UML、BPMN、网络拓扑图等多种图形绘制 感觉真不错推荐给大家!

 

MySQL数据库链接超时,报1129错误解决办法

说明:

MySQL 为了数据库的安全性默认在链接中断或者错误时记录错误链接的ip 等信息(host_cache),有点像系统的错误日志的一种机制。当同一个ip 异常链接数到达某一阈值(max_connect_errors)后就会对该ip的链接进行阻止。sql

解决办法:

首先连接服务器上执行以下

mysql -uroot -h192.168.0.1 -p输入

输入密码

 

一、清除当前产生的缓存:
#sql执行

flush hosts;

二、关闭对应的缓存机制:
#my.ini配置文件中关闭host-cache
skip-host-cache
#host_cache_size=0
#两种配置效果同样能够选一个安全

三、修改阈值(最大错误链接数 max_connect_errors)
#my.ini配置文件中更改容许的最大错误链接数
max_connect_errors = 8000服务器

或通过命令行修改

进入Mysql数据库查看max_connection_errors:show variables like ‘%max_connect_errors%’;

修改max_connection_errors的数量为8000: set global max_connect_errors = 8000;

查看是否修改成功:show variables like ‘%max_connect_errors%’;

 

ubuntu如何把22端口改成其他端口

1.打开终端。

2.输入以下命令打开sshd_config配置文件。

vim /etc/ssh/sshd_config

3.在文件内容中找到#Port 22,修改如下:

 

 

  注:修改端口不能和已有的服务端口相同。此处添加了一个50202端口

4.最后重启使修改生效即可。

/etc/init.d/ssh restart

 

注意:通过50202端口连上后再注释掉22端口,重启一下即可生效。

CentOS 8 添加SSH远程登录端口并禁用22端口

本次新加端口为:50202

0X01 备注:本段操作是在防火墙开启的状态下进行

一:修改SSH配置文件,目录为:vim /etc/ssh/sshd_config:

1.按 i 进入编辑状态,按上下键找到“#Port 22”这一行,然后把行前的“#”号即注释去掉,即修改成:;

提示:i 是进入编辑状态,

编辑完按esc键,在输入:wq 保存并退出,

cat sshd_config 命令直接查看内容是否编辑成功

2.新加一行为:Port 50202;

这样做的目的在与当前防火前处于开启状态,一旦禁用22端口,去过50202端口设置不成功就麻烦了。

二:如果你关闭了SELinux,可以忽略第二步

1.先查看SELinux开放给ssh使用的端口,50202是否被占用。

命令:semanage port -l|grep ssh

输出:ssh_port_t tcp 22

说明SELinux没有给SSH开放50202端口

2.添加端口。

命令:semanage port -a -t ssh_port_t -p tcp 50202

3.再次查看。

命令:semanage port -l|grep ssh

输出:ssh_port_t tcp 22,50202

说明50202端口添加成功。

三:本文由于防火墙处于开启状态,所以还需要在防火墙中开放50202端口。

查询开放了哪些端口:firewall-cmd –zone=public –list-ports

1.先查看防火墙是否开启了50202端口。

命令: firewall-cmd –permanent –query-port=50202/tcp

输出:FirewallD is not running说明防火墙没有开启。

2.开启防火墙命令:systemctl start firewalld

没有任何提示即开启成功

3.再次查看端口是否开启。

输出:no

说明没有开启。

4.添加 –permanent 参数表示重启不失效

命令:firewall-cmd –permanent –add-port=50202/tcp

或者 firewall-cmd –zone=public –add-port=50202/tcp –permanent

输出:success 表是成功。

删除端口的命令: firewall-cmd –zone=public –remove-port=80/tcp –permanent

5.重新加载防火墙

命令:firewall-cmd –reload

6.再次查看,执行成功后,查看50202端口是否被开启

命令:firewall-cmd –permanent –query-port=50202/tcp

输出:yes

四:重启SSH服务和防火墙

命令(SSH):systemctl restart sshd
命令(防火墙):systemctl restart firewalld.service

不行的话就重启服务器

命令:reboot

到这,防火墙和SSH添加端口成功,使用工具连接测试一下。

五:SSH与防火墙禁用22端口

1. 进入vim /etc/ssh/sshd_config文件,然后编辑状态

在Port 22前添加#号,保存退出

2.防火墙禁用22端口

命令:firewall-cmd –zone=public –remove-port=22/tcp –permanent

3.重复第四步。

测试一下是否成功。

 

0X02 备注:本段操作是在关闭的状态下进行的

一:修改SSH配置文件,目录为:

vim /etc/ssh/sshd_config

1.按 i 进入编辑状态,按上下键找到“#Port 22”这一行,然后把行前的“#”号即注释去掉,即修改成:;

提示:i 是进入编辑状态,

编辑完按esc键,在输入:wq 保存并退出,

cat sshd_config 命令直接查看内容是否编辑成功

2.新加一行为:Port 50202;

这样做的目的在与当前防火前处于开启状态,一旦禁用22端口,去过50202端口设置不成功就麻烦了。

二:重新启动sshd文件

systemctl restart sshd

测试一下是否成功。

 

SpringBoot Actuator未授权访问漏洞修复

1.写在前面
目前SpringBoot得框架,越来越广泛,大多数中小型企业,在开发新项目得时候。后端语言使用java得情况下,首选都会使用到SpringBoot。

在很多得一些开源得框架中,例如: ruoyi等。

不知道是出于什么原因?我们都会在这些框架中得pom文件中找到SpringBoot Actuator的依赖。

嘿,这Actuator估计很多人都没有真真实实使用过,但是就会出现在pom文件中;这样导致,在做一些安全漏洞测试的时候,会出现漏洞问题。

例如下面:

 

2.问题描述
Actuator是Springboot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看、统计等。

Actuator 的核心是端点 Endpoint,它用来监视应用程序及交互,spring-boot-actuator 中已经内置了非常多的Endpoint(health、info、beans、metrics、httptrace、shutdown等等),同时也允许我们自己扩展自己的Endpoints。每个 Endpoint 都可以启用和禁用。要远程访问 Endpoint,还必须通过 JMX 或 HTTP 进行暴露,大部分应用选择HTTP。

好了,Actuator看起来还是挺好的,可以用来监控。不过大部分企业,估计都没咋用过,也就享受不到Actuator的好处了。

Actuator在带来方便的同时,如果没有管理好,会导致一些敏感的信息泄露;可能会导致我们的服务器,被暴露到外网,服务器可能会沦陷。那我们来看一下,会出现什么安全的问题?

3.安全问题
例如,我们可以访问:

http://localhost:7200/actuator/env

 

 

 

 

看到上面的信息了吗?哇,我们居然能看到数据库连接地址,账号密码等信息。

这些地址如果不加以控制,对于一些有技术基础的人员来说,这不得是一个很严重的漏洞?估计是t0级别的漏洞了。

对于这些,我们要如何进行控制呢?

4.禁止方法

在 application-xxx.properties 增加配置如下

management:
  endpoints:
    enabled-by-default: false

然后我们再来访问一下比如:

 

 

 

 

好了,可以看到访问就出现404了,表示已经禁了。这样 env 就被禁止访问了。

5.完全禁用Actuator

对于上面的修改,其实已经可以实现禁止了env的方法,也就基本上都能控制到相应的接口信息,基本上也能做到了安全。

但是在做等保安全漏洞扫描的时候,还是会扫出来响应的漏洞,那其实,还是没有解决掉这个漏洞。那我们能不能完全禁止Actuator呢?

答案,肯定是可以的!!!

例如下面这个配置:

management:
  server:
    port: -1

 这样配,等保做安全漏洞扫描,就不会扫描出该漏洞了!

vue3+vite的项目如何将打包后的绝对路径改为相对路径,解决Nginx反向代理多个前端web网站,找不到静态资源js、css等,通过加不同的文件夹来路由到不同的前端

问题:vue3+vite的项目如何将打包后的绝对路径改为相对路径?
描述: 今天在打包Vue3+vite+typescript项目时,需要将打包后文件的路径由绝对路径改为相对路径;
解决: 其实挺简单的,在vue3+vite的项目中,配置文件名为 vite.config.js,如果没有就在根目录下新建一个,文件名固定为:vite.config.js,然后在里面加上base属性,设置值为 “./“,如下:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [vue()],
    base: './'
});如果

inde.html引入的这2处需要修改为相对路径,否则还是找不到。

 

 

有任何需要沟通交流的联系

秋秋群:276483863 

 

 

免费在线流程图、思维导图、专业强大的作图工具,支持多人实时在线协作,可用于原型图、UML、BPMN、网络拓扑图等多种图形绘制 感觉真不错推荐给大家!

 

Kubernetes Traefik 路由规则及中间件 Traefik Middlewares 的配置 (k3s)

系统环境:  

  • Traefik 版本:v2.2.0
  • Kubernetes 版本:K3s 1.23.6

一、什么是 Traefik

Traefik 是一款开源的边缘路由器,现在本人主要要作用于 kubernetes 中对外的网关,即 Ingress 路由器,可以很轻松的配置其路由规则,让 Kubernetes 外部流量涌入。并且,还支持如 Zipkin、Jaeger 等链路追踪功能,简单好用。

二、什么是 Traefik 路由规则

首先,当部署完后启动 Traefik 时,定义了入口点(端口号和对应的端口名称),然后 Kubernetes 集群外部就可以通过访问 Traefik 服务器地址和配置的入口点对 Traefik 服务进行访问,在访问时一般会带上 “域名” + “入口点端口”,然后 Traefik 会根据域名和入口点端口在 Traefik 路由规则表中进行匹配,如果匹配成功,则将流量发送到 Kubernetes 内部应用中与外界进行交互。这里面的域名与入口点与对应后台服务关联的规则,即是 Traefik 路由规则。

  

三、什么是 Traefik Middlewares 中间件

Traefik Middlewares 是一个处于路由和后端服务之前的中间件,在外部流量进入 Traefik,且路由规则匹配成功后,将流量发送到对应的后端服务前,先将其发给中间件进行一些列处理(类似于过滤器链 Filter,进行一系列处理),例如,添加 Header 头信息、鉴权、流量转发、处理访问路径前缀、IP 白名单等等,经过一个或者多个中间件处理完成后,再发送给后端服务,这个就是中间件的作用。

了解什么是 Traefik Middlewares 之前,最好先了解上面提到的 Traefik Ingress 路由规则。

四、如何配置 Traefik 路由规则

在 Kubernetes 中 Traefik 支持 CRD 和 Ingress 两种方式进行路由规则配置,这里配置 Http 和 Https 两种方式为例进行演示。

  • (1)、配置 Traefik Dashboard 的 HTTP 路由规则为例,使用域名 traefik.ziji.work 与其后端服务关联。
  • (2)、配置 Kubernetes Dashboard 的 HTTPS 路由规则为例,使用域名 cloud.ziji.work 与其后端服务关联。

注意:本人部署 Traefik 时候指定了 80 端口的进入点名称是 “web”,而 443 端口的进入点名称为 “websecure”,部署 traefik 时可能这个进入点名称不同,下面的路由规则中设置进入点也不一样,这点需要注意下。

1、方式一:使用 Traefik CRD 配置路由规则

基于 HTTP 路由路由规则:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-dashboard-route
spec:
  entryPoints:
  - web
  routes:
  - match: Host(`traefik.ziji.work`)
    kind: Rule
    services:
      - name: traefik
        port: 8080

基于 HTTPS 路由路由规则

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: kubernetes-dashboard-route
spec:
  entryPoints:
  - websecure
  tls:
    secretName: cloud-mydlq-tls
  routes:
  - match: Host(`cloud.ziji.work`) 
    kind: Rule
    services:
      - name: kubernetes-dashboard
        port: 443

2、方式二:使用 Kubernetes Ingress 配置路由规则

注意:使用该方式需要 Traefik 版本 ≥ 2.2

基于 HTTP 路由路由规则

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-dashboard-ingress
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik            
    traefik.ingress.kubernetes.io/router.entrypoints: web         ##指定 Traefik 中进入点
spec:
  rules:
  - host: traefik.ziji.work                                 
    http:
      paths:
      - path: /              
        backend:
          serviceName: traefik
          servicePort: 8080

基于 HTTPS 路由路由规则

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kubernetes-dashboard-ingress
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik                  
    traefik.ingress.kubernetes.io/router.tls: "true"              ##指定使用 tls 证书方式
    traefik.ingress.kubernetes.io/router.entrypoints: websecure   ##指定 Traefik 中进入点
spec:
  tls:
  - secretName: cloud-mydlq-tls
  rules:
  - host: cloud.ziji.work                               
    http:
      paths:
      - path: /                                     
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 443

五、如何配置 Traefik Middlewares

Traefik Middlewares 中间件是用于流量进入 Traefik 且通过定义的路由规则后,转发到对应后端服务前,在这期间对该流量进行加工的操作,它支持:

  • 重试、压缩、缓冲、断路器
  • header 管理、错误页、中间件链
  • 服务限流、同一主机并发请求限制
  • 基本认证、IP 白名单、摘要认证、转发鉴权验证
  • regex 请求重定向、scheme 请求重定向、请求 URL 替换、regex 请求 URL 替换、删除 URL 前缀、regex 删除 URL 前缀、添加 URL 前缀

这里使用常用 Middleware 来进行演示配置中间件,示例如下:

1、去除请求路径前缀中间件

例如,有一个路由规则中配置的域名路径为 “{host}/one”,traefik 进行路由规则进行流量转发时,也会带上这个前缀作为相对路径发送到后端服务中,而对后端服务来说,一般都是以 “/” 根路径作为相对路径的,如果带上这个路径到后端服务中,那么后端服务则变成以 “/one” 作为相对路径,显然,这样会导致状态码 404 错误。所以,很多时候我们需要去掉这个前缀。

使用去除前缀中间件去除前缀,方便配置一个域名多个二级路径这种需求,中间件写法如下:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: test-stripprefix
spec:
  stripPrefix:
    prefixes:
      - /one
  • prefixes:设置去除的 url 前缀。

2、正则表达式匹配去除请求路径前缀中间件

上面说了为什么去除前缀,也写了个去除前缀中间件,不过很多时候我们有这样一个需求,就是通过一个域名访问多个服务,这样易于统一服务的入口,而 traefik 中也提供了这种批量匹配去除前缀的功能,就是通过正则表达式方式批量匹配对应路径的前缀,然后去除,即 stripPrefixRegex 中间件。

使用正则表达式,只要正则表达式匹配成功就能将前缀去除,这样的好处就是可以多个路由规则使用该中间件进行去除前缀,方便配置通用的一个域名多个的二级路径这种需求,中间件写法如下:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: test-stripprefixregex
spec:
  stripPrefixRegex:
    regex:
      - "/foo/[a-z0-9]+/[0-9]+/"
  • prefixes:使用正则表达式匹配需要去除的 url 前缀。

3、转发鉴权验证中间件

在 traefik 中支持简单的第三方鉴权,当访问某个服务路由规则匹配后,则可以使用该转发鉴权验证中间件将请求转发到第三方服务进行鉴权。当第三方鉴权服务返回 Http 200 状态码 traeifk 则认为有权限访问后续服务,不拦截。如果鉴权服务返回非 200 状态码 traefik 认为无权访问,进行拦截。这种中间件的写法如下:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: test-auth
spec:
  forwardAuth:
    address: https://example.com/auth
    trustForwardHeader: true
  • address:将权限鉴定转发到第三方进行验证,设置转发的地址。
  • trustForwardHeader:信任全部 X-Forwarded-* headers 信息。

更多中间件的使用方法可也查看 Traefik 官方文档 Middlewares 部分:https://docs.traefik.io/middlewares/overview/

六、Traefik 路由规则中如何使用 Traefik Middleware

上面演示了如何简单的配置 Traefik Middlewares,这里我们在路由规则中使用这些中间件,同样也是基于 CRD 和 Ingress 两种路由规则进行演示。

1、使用去除前缀中间件

(1)、创建去除前缀中间件

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: stripprefix-middleware               ##设置中间件名称,要和路由规则中的名称一致 
  namespace: mydlqcloud                      ##指定 Namespace
spec:
  stripPrefix:
    prefixes:
      - /foo                                 ##设置要去除的前缀

(2)、创建路由规则并使用中间件

CRD 方式:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: test-route
  namespace: mydlqcloud                      ##指定 Namespace
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`www.ziji.work`) && PathPrefix(`/foo`)
      kind: Rule
      services:
        - name: test-service
          port: 80
      middlewares:
        - name: stripprefix-middleware       ##指定使用的中间件

 Ingress 方式:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: mydlqcloud                      ##指定 Namespace
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/router.entrypoints: web
    ##指定使用的 Middleware,规则是 {namespace名称}-{middleware名称}@{资源类型}
    traefik.ingress.kubernetes.io/router.middlewares: mydlqcloud-stripprefix-middleware@kubernetescrd
spec:
  rules:
  - host: www.ziji.work                                 
    http:
      paths:
      - path: /foo            
        backend:
          serviceName: test-service
          servicePort: 80

2、正则表达式去除前缀中间件

(1)、创建正则表达式去除中间件

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: regex-stripprefix-middleware
  namespace: mydlqcloud
spec:
  stripPrefixRegex:
    regex:
      - ^/[a-zA-Z0-9-]+                       ##设置正则表达式

(2)、创建路由规则并使用中间件

CRD 方式:

## IngressRoute
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: test-route1
  namespace: mydlqcloud
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`www.ziji.work`) && PathPrefix(`/one`)   ##路由规则1
      kind: Rule
      services:
        - name: test-service1
          port: 80
      middlewares:
        - name: regex-stripprefix-middleware
    - match: Host(`www.ziji.work`) && PathPrefix(`/two`)   ##路由规则2
      kind: Rule
      services:
        - name: test-service2
          port: 80
      middlewares:
        - name: regex-stripprefix-middleware

Ingress 方式:

## Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress1
  namespace: mydlqcloud
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/router.entrypoints: web
    traefik.ingress.kubernetes.io/router.middlewares: mydlqcloud-regex-stripprefix-middleware@kubernetescrd
spec:
  rules:
  - host: www.ziji.work                                 
    http:
      paths:
      - path: /one              ##路由规则1  
        backend:
          serviceName: test-service1
          servicePort: 80
      - path: /two              ##路由规则2
        backend:
          serviceName: test-service2
          servicePort: 80

3、转发鉴权验证中间件

(1)、创建转发鉴权中间件

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: authentication-middleware            ##设置中间件名称
  namespace: mydlqcloud                      ##指定 Namespace
spec:
  forwardAuth:
    address: "http://auth-service/auth"
    trustForwardHeader: true

(2)、创建路由规则并使用中间件

CRD 方式:

## IngressRoute
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: test-route
  namespace: mydlqcloud
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`www.ziji.work`) && PathPrefix(`/foo`)
      kind: Rule
      services:
        - name: test-service
          port: 80
      middlewares:
        - name: authentication-middleware

Ingress 方式:

## IngressRoute
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: mydlqcloud
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/router.entrypoints: web
    traefik.ingress.kubernetes.io/router.middlewares: mydlqcloud-authentication-middleware@kubernetescrd
spec:
  rules:
  - host: www.ziji.work                                 
    http:
      paths:
      - path: /foo            
        backend:
          serviceName: test-service
          servicePort: 80

七、Traefik 路由规则中使用多个 Traefik Middlewares

这里再演示一下使用一个路由中如何使用两个中间件,使用去除路径前缀与鉴权配合:

1、创建转发鉴权与去除前缀中间件

## Middleware1
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: authentication-middleware            ##设置中间件名称
  namespace: mydlqcloud                      ##指定 Namespace
spec:
  forwardAuth:
    address: "http://auth-service/auth"
    trustForwardHeader: true
---
## Middleware2
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: regex-stripprefix-middleware
  namespace: mydlqcloud
spec:
  stripPrefixRegex:
    regex:
      - ^/[a-zA-Z0-9-]+                       ##设置正则表达式

2、创建路由规则并使用中间件

CRD 方式:

## IngressRoute
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: test-route
  namespace: mydlqcloud                      ##指定 Namespace
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`www.ziji.work`) && PathPrefix(`/foo`)
      kind: Rule
      services:
        - name: test-service
          port: 80
      middlewares:
        - name: authentication-middleware    ##指定使用的中间件1
        - name: regex-stripprefix-middleware ##指定使用的中间件2

Ingress 方式:

## IngressRoute
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: mydlqcloud                      ##指定 Namespace
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/router.entrypoints: web
    ##指定使用的 Middleware,规则是 {namespace名称}-{middleware名称}@{资源类型},如果使用多个中间件,则逗号隔开
    traefik.ingress.kubernetes.io/router.middlewares: mydlqcloud-authentication-middleware@kubernetescrd,mydlqcloud-regex-stripprefix-middleware@kubernetescrd
spec:
  rules:
  - host: www.ziji.work                                 
    http:
      paths:
      - path: /foo            
        backend:
          serviceName: test-service
          servicePort: 80

 

参照:https://www.bookstack.cn/read/traefik-2.2-en/934244909017968f.md 

 

有任何需要沟通交流的联系

秋秋群:276483863 

 

 

免费在线流程图、思维导图、专业强大的作图工具,支持多人实时在线协作,可用于原型图、UML、BPMN、网络拓扑图等多种图形绘制 感觉真不错推荐给大家!

 

mysql慢日志开启以及设置

一、简介

开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。

二、参数说明

slow_query_log 慢查询开启状态

slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)

long_query_time 查询超过多少秒才记录

三、设置步骤

1.查看慢查询相关参数

复制代码

mysql> show variables like ‘slow_query%’;

+—————————+———————————-+

| Variable_name | Value |

+—————————+———————————-+

| slow_query_log | OFF |

| slow_query_log_file | /mysql/data/localhost-slow.log |

+—————————+———————————-+

mysql> show variables like ‘long_query_time’;

+—————–+———–+

| Variable_name | Value |

+—————–+———–+

| long_query_time | 10.000000 |

+—————–+———–+

复制代码

2.设置方法

方法一:全局变量设置

将 slow_query_log 全局变量设置为“ON”状态

mysql> set global slow_query_log=’ON’;

设置慢查询日志存放的位置

mysql> set global slow_query_log_file=’/usr/local/mysql/data/slow.log’;

查询超过1秒就记录

mysql> set global long_query_time=1;

或 设置非全局超时时间为2秒  

mysql> set long_query_time = 2;

方法二:配置文件设置

修改配置文件my.cnf,在[mysqld]下的下方加入

[mysqld]

slow_query_log = ON

slow_query_log_file = /usr/local/mysql/data/slow.log

long_query_time = 1

3.重启MySQL服务

service mysqld restart

4.查看设置后的参数

复制代码

mysql> show variables like ‘slow_query%’;

+———————+——————————–+

| Variable_name | Value |

+———————+——————————–+

| slow_query_log | ON |

| slow_query_log_file | /usr/local/mysql/data/slow.log |

+———————+——————————–+

mysql> show variables like ‘long_query_time’;

+—————–+———-+

| Variable_name | Value |

+—————–+———-+

| long_query_time | 1.000000 |

+—————–+———-+

复制代码

四、测试

1.执行一条慢查询SQL语句

mysql> select sleep(2);

2.查看是否生成慢查询日志

ls /usr/local/mysql/data/slow.log

如果日志存在,MySQL开启慢查询设置成功!

 

 

有任何需要沟通交流的联系

秋秋群:276483863 

 

  加好友备注【技术交流】

 

免费在线流程图、思维导图、专业强大的作图工具,支持多人实时在线协作,可用于原型图、UML、BPMN、网络拓扑图等多种图形绘制 感觉真不错推荐给大家!

 

【轻量应用服务器】k3s部署nginx

1.在轻应用服务器中安装好K3s

2.登录k3s及token

 

3.登录上k3s,如下图

4.按照图下图操作,打开部署界面

 

5.部署nginx,部署用的yaml如下 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wx-mp-nginx-deployment
  labels:
    app: wx-mp-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wx-mp-nginx
  template:
    metadata:
      labels:
        app: wx-mp-nginx
    spec:
      containers:
      - name: wx-mp-nginx
        image: nginx:1.23.1
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-data
          mountPath: /usr/share/nginx/html/
      volumes:
        - name: nginx-data
          hostPath:
            path: /root/data/wx-mp-nginx
            type: Directory

 注意:1.路径说明如下图

                    

 

 

             2.nginx的dockerhub镜像地址

nginx:1.23.1

 

 编辑完成后,点击‘Upload’即可部署成功。

 

 

 此时,无法通过外网和服务间无法调用,需要部署service来实现,部署yaml如下

apiVersion: v1
kind: Service
metadata:
  name: wx-mp-nginx-service
spec:
  type: NodePort
  selector:
    app: wx-mp-nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 31432

   

注意:通过NodePort方式,将服务开启在了31432端口。

 

 

 

编辑完成后,点击‘Upload’即可部署service成功。

 

 

 

 

  此时,在该应用的防火墙里添加【31432】端口,即可外网正常访问此时部署的Nginx服务了

 

有任何需要沟通交流的联系

QQ群:276483863 

微信扫码:

 

 加好友备注【技术交流】
 

免费在线流程图、思维导图、专业强大的作图工具,支持多人实时在线协作,可用于原型图、UML、BPMN、网络拓扑图等多种图形绘制 感觉真不错推荐给大家!