Kubernetes 学习总结(37)—— Kubernetes 之 CoreDNS 企业级应用

news2025/1/8 5:06:09

前言

IP 地址会有变更,程序配置IP地址,所有涉及到此IP的地方都需要改变,对运维和研发都不友好。IP不容易被记住。引入域名来替换 IP,这样业务使用唯一标识域名,域名可以通过 DNS 服务器解析成 IP 供业务三层通信使用。通过域名解耦了业务和 IP,如果域名对应的 IP 有变动,修改域名解析即可,不用业务做调整。使用域名研发和运维的工作也解耦了,IP 有变动,运维不用求研发修改业务代码配置。可读性和可记忆性上,域名通常由有意义的字词或短语组成,更易于人们理解和记忆。相比之下,IP 地址是一串数字,不容易记忆。

DNS原理

1. 什么是DNS?

百度百科:域名和与之相对应的IP地址转换的服务器 DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

2. 分层结构

域名分层结构

DNS(Domain Name System)采用分层结构来组织域名,并实现域名解析的分布式系统。它将域名划分为多个层次,从根域到最具体的子域名。分层结构的主要组成如下:

层级作用例子
根域根域是DNS层次结构的最高级别,表示为单个点(.)。它是整个DNS命名空间的起点。根域下没有顶级域名,它的主要功能是指导DNS查询进一步向下到顶级域服务器。.
顶级域顶级域是紧随根域下的下一级域,通常是表示国家或通用类别的标识符。例如,.com、.org、.net 是常见的通用顶级域,而 .us、.uk、.cn 是表示国家的顶级域。顶级域是由顶级域管理员管理和分配的。.com
二级域二级域是顶级域名下的下一级域,由组织、企业或个人自行选择和注册。例如,在域名 example.com 中,"example" 是二级域。二级域名可以用于表示特定的组织、品牌或服务。example.com
子域子域是在二级域名之下的更低级别域名。子域名是通过在二级域名之前添加前缀来创建的。例如,"blog.example.com" 是 "example.com" 域名的一个子域。三级域名:www.example.com

四级域名:www.test.example.com

域名的层级风别对应层级的DNS服务器,下面我们来看下。

DNS分层结构
DNS作用备注
根域名服务器根域名服务器是DNS层次结构的最高级别,表示为单个点(.)。它是整个DNS系统的起点,负责存储和提供顶级域名服务器的地址。全球只有13个,迭代查询
顶级域名服务器顶级域名服务器位于DNS层次结构的下一级,负责管理特定顶级域名(例如.com、.org、.net等)的DNS信息。每个顶级域名都有自己的一组顶级域名服务器,由相应的管理机构负责维护。迭代查询
权威域名服务器权威域名服务器是负责存储和提供特定域名的DNS记录的服务器。每个域名都有至少一个权威域名服务器。迭代查询
本地域名服务器本地域名服务器也称为递归域名服务器或默认域名服务器。它是用户计算机或网络中的DNS服务器,负责处理来自用户设备的DNS查询请求。递归查询

3. DNS工作原理?

个人电脑

Q1:在个人电脑浏览器里输入www.example.com,dns client首先查个人电脑dns缓存里有没有对应的域名解析

A1:如果缓存里有则把结果返回,缓存没有返回空

Q2:当缓存没有时,查hosts文件

A2:如果有则返回,并缓存,没有则返回空

个人电脑到本地dns服务器查询

Q3:上述Q1,Q2都没有查到结果时,会向个人电脑上配置的本地dns发起dns域名解析查询

A3:本地dns服务器将查询结果返回

本地域名解析服务器工作过程

Q4:本地域名服务器查询本地dns缓存

A4:有结果则返回给本地域名服务器, 本地域名服务器 把结果返回给个人电脑即A3,没结果返回空

Q5:A4返回空,则查询dns解析配置,有结果则返回给本地域名服务器并缓存结果,本地域名服务器把结果返回给个人电脑即步骤A3,没结果则返回空

域名服务器 如果本地域名服务器缓存和db里都没有查到结果,则发起向根域名服务器查询,这部分的查询是迭代查询

Q6:本地域名服务器根域名服务器发起查询

A6:根域名服务器根据请求域名信息,返回.com顶级域名服务器IP地址

Q7:本地域名服务器根据根域名服务器返回的顶级域名服务器IP,向顶级域名服务器发起域名解析

A7:顶级域名服务器根据域名信息,返回example.com权威域名服务器IP

Q8:本地域名服务器根据顶级域名服务器返回的信息,向权威域名服务器发起域名解析

A8:权威域名服务器查询缓存和域名配置,把结果返回

最后本地域名服务器把结果返回给个人电脑,整个域名解析过程就是这样。我们来看下域名trace的过程,dig www.example.com +trace,trace的过程是域名服务器怎么找到域名解析的过程。

### 13个根域名服务器
; <<>> DiG 9.10.6 <<>> www.example.com +trace
;; global options: +cmd
.   450212 IN NS i.root-servers.net.
.   450212 IN NS h.root-servers.net.
.   450212 IN NS k.root-servers.net.
.   450212 IN NS m.root-servers.net.
.   450212 IN NS a.root-servers.net.
.   450212 IN NS f.root-servers.net.
.   450212 IN NS g.root-servers.net.
.   450212 IN NS j.root-servers.net.
.   450212 IN NS b.root-servers.net.
.   450212 IN NS d.root-servers.net.
.   450212 IN NS e.root-servers.net.
.   450212 IN NS l.root-servers.net.
.   450212 IN NS c.root-servers.net.
;; Received 492 bytes from 10.1.210.254#53(10.1.210.254) in 53 ms

### 顶级域名服务器
com.   172800 IN NS b.gtld-servers.net.
com.   172800 IN NS k.gtld-servers.net.
com.   172800 IN NS f.gtld-servers.net.
com.   172800 IN NS a.gtld-servers.net.
com.   172800 IN NS e.gtld-servers.net.
com.   172800 IN NS g.gtld-servers.net.
com.   172800 IN NS m.gtld-servers.net.
com.   172800 IN NS d.gtld-servers.net.
com.   172800 IN NS h.gtld-servers.net.
com.   172800 IN NS i.gtld-servers.net.
com.   172800 IN NS j.gtld-servers.net.
com.   172800 IN NS c.gtld-servers.net.
com.   172800 IN NS l.gtld-servers.net.
com.   86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.   86400 IN RRSIG DS 8 1 86400 20230723210000 20230710200000 11019 . eYYWsA8EHPJOEGhTFPZT0Dz4pvpZM+c5EHRLitOhjW1rX2ZP/zUE5mSs +ve23eY4NkMqZkEyYQf4FwxWMfDHcHU6FFgeFi7kSymwHf3OytZxctx8 gL2x+imyDxD/PYrgm8lr3j+q+cUOWD/KMcMerQfPpTkRl8iP6t0NG6o8 qAw9+77u3jGzo1XPnttU6s6m7Uhjv0FlhTHX3GVn3e2SOMTZ25GT4NMW i2MM/tRyoYPezwXca9/1o3owaUmHG9EwWRBymRxTzYwUVNQ0GUj42IK4 IYvQQ9fGK8+n+6JStKQ/zY6DNF1T/Bc+ncn1237nPdUr97ko8VgOdvTt BAJTlQ==
;; Received 1178 bytes from 192.5.5.241#53(f.root-servers.net) in 6 ms

### 权威域名服务器
example.com.  172800 IN NS a.iana-servers.net.
example.com.  172800 IN NS b.iana-servers.net.
example.com.  86400 IN DS 370 13 2 BE74359954660069D5C63D200C39F5603827D7DD02B56F120EE9F3A8 6764247C
example.com.  86400 IN RRSIG DS 8 2 86400 20230716061950 20230709050950 46551 com. N9fB0SSrFADxZEwXV4wPlH1qY8JEUVY6abdBPoaTB8IsWgJ4/BWJf0Tr 8+2ffU7fB0yAWViDZoUyV7yYa1gJvjssr0XjPDyB3VYYcyTlLgCzpNTX RLHcNAd7XU+/zmOBhTuNh6LNRXyaWT9cUTjhuTFENSt71xfm0bdThgb2 KB7ohKhn8JaDh5yPtExT+xs0TsFZtddSqtoLUnrxRLrBqQ==
;; Received 335 bytes from 192.35.51.30#53(f.gtld-servers.net) in 275 ms

### www.example.com 的解析记录,权威域名服务器199.43.135.53#53(a.iana-servers.net) 返回的结果

www.example.com. 86400 IN A 93.184.216.34
www.example.com. 86400 IN RRSIG A 13 3 86400 20230730082849 20230709062038 28328 example.com. hxwo2qMUYS/FKBwB6hQwzsne3IygLz2J9fq2GEfLJIsvmVsFefN0O+dd wnxXS4apxV/ZnOJbF1jqOiZUWbJy6Q==
;; Received 167 bytes from 199.43.135.53#53(a.iana-servers.net) in 294 ms

CoreDNS介绍

CoreDNS 是一个开源的、灵活的 DNS 服务器,旨在替代传统的 BIND 等 DNS 服务器。它是一个轻量级的、模块化的 DNS 服务器,具有插件化架构,使用户可以根据需要自定义和扩展功能。CoreDNS 是 CNCF(Cloud Native Computing Foundation)的一个孵化项目,广泛应用于云原生环境中。CoreDNS 特点:

  • 模块化设计:CoreDNS 的核心思想是将功能划分为可插拔的模块,每个模块都可以独立配置和扩展,使用户可以根据实际需求定制和构建自己的DNS解析服务器。
  • 支持多种 DNS 协议:CoreDNS支持多种DNS协议,包括常见的DNS协议(如UDP、TCP)以及较新的协议(如DNS over TLS、DNS over gRPC等)。
  • 灵活的插件机制:CoreDNS提供了丰富的插件集合,用户可以根据需要启用、禁用和组合这些插件,以实现各种功能,如缓存、负载均衡、日志记录、转发、DNSSEC等。
  • 易于配置:CoreDNS 使用简洁的配置文件语法,使用户能够轻松地配置和管理DNS解析规则,而无需深入了解底层的复杂性。
  • 适应云原生环境:CoreDNS 被广泛应用于云原生环境中,它与容器化技术(如Docker、Kubernetes)紧密集成,可以动态地适应容器和集群的变化,实现弹性和可伸缩性。
  • 高性能:CoreDNS 经过了优化,具有较高的并发处理能力和响应速度,能够处理大量的DNS查询请求。

可以说 CoreDNS 为提高技术生产力做了不少贡献,不用再维护复杂的 bind 配置,下面我们来看一下用 CoreDNS 来作为本地域名服务器的实战案例。

实战案例

1. 部署 CoreDNS 服务器

  • 部署超级简单,访问官网 CoreDNS 官网 点击下载最新版本即可,作者演示是 MAC 系统,下载是 coredns_1.10.1_darwin_amd64.tgz
  • 解压缩 coredns_1.10.1_darwin_amd64.tgz
  • 配置 CoreDNS ,配置参考 CoreDNS Manual

cat Corefile

coredns.io:5300 {
    file db.coredns.io
}

example.io:53 {
    log
    errors
    file db.example.io
}

example.net:53 {
    file db.example.net
}

.:53 {
    kubernetes
    forward . 8.8.8.8
    log
    errors
    cache
}

上述配置 CoreDNS 的工作流程如下

启动 CoreDNS

./coredns -conf Corefile

2. 多个A记录

配置 cat Corefile

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        1.1.1.1 test.com
        2.2.2.2 test.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}
  • 启动 coredns -conf Corefile
  • 测试 nslookup test.com 127.0.0.1
  • 测试配置中不存在的域名 nslookup www.baidu.com 127.0.0.1

3. CNAME 解析

k8s 中 pod 或 sevice ip 可能会变,如果配置 A 记录就不合适,这时域名 canme 到 pod 的网络标识或者 service 域名上就比较合适。配置 cat Corefile:

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #test.com cname 到www.baidu.com
        rewrite name test.com www.baidu.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}
  • 启动 coredns -conf Corefile
  • 测试 nslookup test.com 127.0.0.1

4. 正则匹配解析

在做活动落地页时,防止域名被封禁,我们希望N多个域名都能访问到活动页,这时正则就很好的解决这个问题。配置 cat Corefile:

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #*.test.com cname 到www.baidu.com
        rewrite name (.*).test.com www.baidu.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}
  • 启动 coredns -conf Corefile
  • 测试 nslookup w.test.com 127.0.0.1
  • nslookup test2.test.com 127.0.0.1
  • nslookup w666.test.com 127.0.0.1

5. 根据解析域名做DNS解析转发

当主机配置dns没有某个域名解析时,我们可以配置针对这个域名解析走其他dns帮我们做解析。这样我们不用修改本机dns配置,只用在微调dns配置即可。配置 cat Corefile:

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #*.test.com cname 到www.baidu.com
        rewrite name (.*).test.com www.baidu.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}

#example.com 相关域名的走114.114.114.114做解析
example.com:53 {
    errors
    cache 30
    forward . 114.114.114.114
    reload
}

#baidu.com 相关域名的走8.8.8.8做解析
bai.com:53 {
    errors
    cache 30
    forward . 8.8.8.8
    reload
}
  • 启动 coredns -conf Corefile
  • 测试 nslookup www.example.com 127.0.0.1
  • 测试 nslookup www.baidu.com 127.0.0.1

6. 禁止ipv6解析

业务不涉及ipv6 时可以禁用ipv6解析,提高dns解析性能。配置 cat Corefile:

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #*.test.com cname 到www.baidu.com
        rewrite name (.*).test.com www.baidu.com
        fallthrough
    }

    #禁用ipv6解析
    template IN AAAA .

    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}

7. 多 k8s 集群统一 dns 服务解析

  • 知道域名不确定资源在哪个集群,dns 我们想统一,通过统一的 dns 访问不通的 k8s 资源解析到不同的 k8s 集群的 ip
方式一 不同的 k8s 集群使用不同的域名
  • 比如A集群使用 acluster.local ,B 集群使用 bcluster.local,在安装 k8s 集群时可以修改默认的域名 cluster.local
  • 这样我们就可以使用 DNS 转发能力

配置 cat Corefile

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #*.test.com cname 到www.baidu.com
        rewrite name (.*).test.com www.baidu.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}

#acluster.local 相关域名的走A集群的coredns做解析
acluster.local:53 {
    errors
    cache 30
    forward . A集群corednsip
    reload
}

#bcluster.local 相关域名的走B集群的coredns做解析
bcluster.local:53 {
    errors
    cache 30
    forward . B集群corednsip
    reload
}
  • 启动 coredns -conf Corefile
  • 测试 nslookup servicename.namespace.svc.acluster.local 127.0.0.1
  • 测试 nslookup servicename.namespace.svc.bcluster.local 127.0.0.1
方式二 借助插件 alternate
  • A、B 两个 k8s 集群已经部署好域名都是 cluster.local,需要在集群外解析集群内资源,我们利用 alternate 间接实现 forward 的 fallthrough。即 servicename.namespace.svc.cluster.local A 集群 dns 查不到,查 B 集群的 dns

配置 cat Corefile

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #*.test.com cname 到www.baidu.com
        rewrite name (.*).test.com www.baidu.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}

#cluster.local 相关域名的先走A集群的coredns做解析,A集群dns没有解析走B集群dns查询
cluster.local:53 {
    errors
    cache 30
    forward . A集群corednsip
    alternate NXDOMAIN . B集群corednsip
    reload
}
  • 启动 coredns -conf Corefile
  • 测试 nslookup servicename.namespace.svc.cluster.local 127.0.0.1

8. 智能 DNS 不同网段同一个域名解析不同 ip

  • 如果我们需要机房的就近访问,可以针对不同机房设置不同网段,然后针对同一个域名不同机房的请求返回对应机房的解析ip结果。

配置 cat Corefile

:53 {
  view aaa {
    expr incidr(client_ip(), '127.0.0.0/24')
  }
  hosts {
    1.1.1.1 test.com
  }
}

.:53 {
  view bbb {
    expr incidr(client_ip(), '192.168.0.0/16')
  }
  hosts {
    2.2.2.2 test.com
  }
}

.:53 {
  hosts {
    3.3.3.3 test.com
  }
}
  • 启动 coredns -conf Corefile
  • #本机回环接口ip 127.0.0.1 测试 nslookup test.com 127.0.0.1, 返回结果1.1.1.1
  • #本机eth0网卡ip 192.168.1.10 测试 nslookup test.com 192.168.1.10 ,返回结果2.2.2.2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1037868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时间复杂度、空间复杂度

一、时间复杂度 1、概念 时间复杂度&#xff1a;计算的是当一个问题量级增加的时间&#xff0c;时间增长的趋势&#xff1b; O&#xff08;大O表示法&#xff09;&#xff1a;渐进的时间复杂度 2、举例 ① 以下 for 循环的时间复杂度&#xff1a;O(1 3n) O(n) 去掉常数…

rom修改----安卓系列机型如何内置app 如何选择so文件内置

系统内置app的需求 在与各工作室对接中操作单中&#xff0c;很多需要内置客户特定的有些app到系统里&#xff0c;这样方便客户刷入固件后直接调用。例如内置apk 去开机引导 去usb调试 默认开启usb安全设置等等。那么很多app内置有不同的反应。有的可以直接内置。有的需要加so…

(十三)VBA常用基础知识:编程时各种常用操作之设值,取值,活动窗口设定

cell里设置内容的两个写法 Sub test() Range("A1").Value "帅哥" Cells(1, 2).Value "帅哥 too" End Sub2.cell里内容的取得 Sub test() Range("A1").Value "帅哥" Cells(1, 2).Value "帅哥 too" a Range(…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C#)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切&#xff08;ROI&#xff09;功能&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的图像剪切&#xff08;ROI&#xff09;功能的技术背景CameraExplorer如何使用图像剪切&#xff08;ROI&#xff09;功…

[nodejs]NVM使用指南

安装 官网链接 使用 # 版本号 nvm version# 显示node是运行在32位还是64位。 nvm arch# 显示已安装的列表 nvm list nvm ls# 使用制定版本node。可指定32/64位 nvm use [version] [arch]# 显示可安装的所有版本 nvm list available# 安装最新版本 nvm install latest# 安装指…

【Linux】系统编程简单线程池(C++)

目录 【1】线程池概念 【1.1】线程池 【1.2】线程池的应用场景 【1.3】线程池的种类 【1.4】线程池示例 【2】线程池代码 【1】线程池概念 【1.1】线程池 一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&a…

【新书推荐】用户画像:了解用户,助力企业成长 ——《用户画像:平台构建与业务实践》

文章目录 〇、引子一、什么是用户画像二、用户画像的优势三、如何实现用户画像四、用户画像应用中的问题五、总结新书推荐 —— 《用户画像&#xff1a;平台构建与业务实践》内容简介目录 〇、引子 在当今市场竞争激烈的时代&#xff0c;了解用户需求、提高用户体验已成为企业…

WebGL 雾化

目录 前言 如何实现雾化 线性雾化公式 雾化因子关系图 根据雾化因子计算片元颜色公式 示例程序&#xff08;Fog.js&#xff09; 代码详解​编辑 详解如何计算雾化因子&#xff08;clamp()&#xff09; 详解如何计算最终片元颜色&#xff08;根据雾化因子计算片元颜色…

二、搭建Java环境

搭建Java环境 搭建Java环境1.1.下载JDK1.2.在Win10下配置JDK环境 —————————————————————————————————————————————————— ———————————————————————————————————————————————…

李航老师《统计学习方法》第1章阅读笔记

1.1 统计学习 统计学习的特点 统计学习&#xff1a;计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析 现在人们提及机器学习时&#xff0c;往往指统计机器学习&#xff0c;所以可以认为本书介绍的是机器学习方法 统计学习的对象 统计学习研究的对象是数据(data)…

IDEA优化import导报-删除无用的包

选择File--Settings--Editor-General-Auto Import&#xff0c;勾选上下面框起来的即可&#xff0c;这样没有用到的包就会自己动被优化掉了~

了解SQL注入的类型、原理、检测与预防方法

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 梦想从未散场&#xff0c;传奇永不落幕&#xff0c;博主会持续更新优质网络知识、Python知识、Linux知识以及各种小技巧&#xff0c;愿你我共同在CSDN进步 目录 一、了解SQL注入 1. SQL注入是什么&#xff1f…

【kohya】训练自己的LoRA模型

文章目录 序言准备环境准备图片处理图片下载kohya_ss代码修改pyvenv.cfg启动界面访问地址生成字幕准备训练的文件夹配置训练参数开始训练遇到的问题&#xff1a; 序言 在把玩stable diffusion的webUI和comfyUI后&#xff0c;思考着自己也微调一个个性化风格的checkpoint、LyCO…

2023蓝帽杯南部赛区半决赛取证复现

首先嗷&#xff0c;仅代表个人评价一下就是说赛委会在出题的时候不严谨&#xff0c;我一度怀疑我的语文阅读能力有问题&#xff0c;但是呢&#xff0c;这次的取证题目虽然不是很难&#xff0c;但是有些地方我也是依旧没有找到&#xff0c;说了这么多&#xff0c;接下来&#xf…

使用BeanCopier复制对象属性值,遇到NullPointerException?

文章目录 一、场景二、问题三、分析四、解决五、总结 一、场景 项目中&#xff0c;为了数据安全&#xff0c;由于身份证属于敏感信息&#xff0c;需要加密后返回给页面解密显示&#xff0c;但DTO中出现了一种骚操作&#xff0c;身份证的get方法&#xff0c;把身份证转成大写的…

【数据结构】C++实现哈希表

闭散列哈希表 哈希表的结构 在闭散列的哈希表中&#xff0c;哈希表每个位置除了存储所给数据之外&#xff0c;还应该存储该位置当前的状态&#xff0c;哈希表中每个位置的可能状态如下&#xff1a; EMPTY&#xff08;无数据的空位置&#xff09;。EXIST&#xff08;已存储数…

Zabbix介绍与安装

目录 一、概述 二、zabbix的主要功能 三、zabbix监控原理 四、Zabbix 监控模式 五、zabbix的架构 server-client server-proxy-client master-node-client 六、zabbix的安装 安装zabbix服务端 安装zabbix客户端 测试zabbix 1、在 Web 页面中添加 agent 主机点击左…

SystemC入门学习-第3章 数据类型

本章将详细的描述SystemC的数据类型&#xff0c;并介绍这些类型的数据可以进行哪些操作。比如值保持器&#xff08;value holder&#xff09;就是一种特殊的类型。在所有的类型中&#xff0c;最重要的是bool和sc_uint两种类型 3.1 值保持器 值保持器有三种&#xff1a; 变量…

如何管理销售团队?

本文将为大家讲解&#xff1a;如何管理销售团队&#xff1f; 销售团队的管理是企业成功的关键因素之一。一个高效、协同的销售团队可以推动企业的增长&#xff0c;增强市场竞争力。然而&#xff0c;销售团队的管理并不是一件容易的事情&#xff0c;它涉及多个方面的协调和优化…

Verilog开源项目——百兆以太网交换机(二)AES加解密模块设计

Verilog开源项目——百兆以太网交换机&#xff08;二&#xff09;AES加解密模块设计 &#x1f508;声明&#xff1a;未经作者允许&#xff0c;禁止转载 &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;全新原创以太网交换机项目&#xff0c;Blog内容将聚焦整…