piwriw_blog
Piwriw Blog
基于Gin的个人博客系统
一个后端使用了Gin、数据库ORM使用Sqlx,前端使用了Vue2.X的个人博客系统
探索本项目的文档 »
本篇README.md面向开发者
目录
项目概述
页面演示
用户端
管理端
快速启动
文件目录说明
作者
鸣谢
项目概述Piwriw_blog是一个博客系统,前端基于Vue2构建了用户端和管理员系统,后端基于Gin和Sqlx构建。
页面演示用户端
首页
详情
管理端
文章编辑
文章列表
评论管理
分类列表
用户列表
个人设置
快速启动
克隆项目到本地git clone git@github.com:Piwriw/piwriw_blog.git
下载后端依赖(前提:你已经开启了go modules 并且设置了国内镜像代理)cd piwriw_blog go mod tidy
下载前端依赖
...
Go-标准库日志Slog
Go的标准库日志Slog背景在Go1.21中,在Go的标准库函数中引入了Slog
据说使用的内存比Zap还要小
基础用法slog.Info("This is info log")slog.Warn("This is warning log")slog.Error("This is error log")日志输出:2024/07/23 15:26:01 INFO This is info log2024/07/23 15:26:01 WARN This is warning log2024/07/23 15:26:01 ERROR This is error log
输出参数的日志 name := "sss" slog.Info("msg", slog.String("name", name)) slog.Error("ERROR: value is empty", slog.Any("name", name)) 日志输出:20 ...
K8s-自动伸缩
K8s-自动伸缩Pod的横向伸缩(水平拓展HPA)Pod的横向伸缩是通过控制器管理Pod的副本数实现的,由Horizontal控制器负责,通过HPA资源管理,调整Pod的数量
自动伸缩过程
获取被伸缩的对象的Pod度量
计算需要达到的Pod数量
更新replicas字段
基于CPU使用率进行自动伸缩CPU需要进行CPU高峰使用,进行HPA
SHELL
# CPU使用率到30的时候 进行伸缩 kubectl autoscale deploymengt kubia --cpu-percent=30 --min=l --max=5
YAML
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: php-apachespec: # 指定的目标资源 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: php-apache minReplicas: 1 maxReplicas: 10 # 要求每个Po ...
K8s-集群内网络安全
K8s-集群内网络安全在Pod中使用宿主节点的Linux命名空间Pod中的容器一般都在分开的Linux命名空间中,他们通过不同IPC和PID命名空间,彼此隔离
Pod使用宿主机网络命名空间Pod需要使用主机网络,使用宿主机的网络适配器,而不是虚拟网络设备。
通过设置hostNetwork=true实现
绑定宿主机端口号而不是使用宿主机网络命名空间Pod映射到到主机上的端口,但是不设置共享主机的网络命名空间
设置Pod的spec.containers.ports的hostPort实现
hostPort的Pod流量转发过程:
到达宿主机的端口连接直接转发到Pod 的对应的端口
与NodePort不同,NodePort会给所有的节点绑定上端口,即使Node没有对应Pod
Pod hostPort案例:
使用宿主机的PID和IPC命名空间当使用spec中hostPID=true 和 hostIPC=true之后,pod容器就可以看到所有宿主机上的进程
配置节点的安全上下文通过 security Context 边项配置其他与安全性相关的特性
配置安全上下文 ...
K8s-认证机制:ServiceAccounts
K8s-认证机制:ServiceAccountsK8s的认证方式
客户端证书
传入HTTP头中的token
基础的HTTP认证
其他
用户和组用户就是通过单个的SA的认证
组别用户和SA可以属于一个或者多个组。
内置的用户组:
system unauthenticated 组用于所有认证插件都不会认证客户端身份的 请求
system authent cated 组会自动分配给一个成功通过认证的用户
system:serviceaccounts 组包含所有在系统中的 Serv iceAccount
system serviceaccounts <口 amespace >组包含了所有在特定命名空 间中的 Serv ceAccount
什么是SA一个SA的用户名格式如下:
system: serviceaccount:<namespace >:
Pod中sa的位置: /var/run/secrets/kube netes io/serv ceaccount/token
每一个Namespace都有一个默认的 ...
跨公网解决K8s组网
跨公网解决K8s组网需要开放安全组工作节点开放组
开放端口号
开放端口类型
备注
8472
UDP
Flannel vxlan 模式下的Overlay 网络通信
10250
TCP
kubelet log exec 等端口
控制面开放组
开放端口号
开放端口类型
备注
8472
UDP
Flannel vxlan 模式下的Overlay 网络通信
10250
TCP
kubelet log exec 等端口
6443
TCP
apiserver端口
2380
TCP
etcd端口
安装部署Master创建虚拟网卡# 公网ippublic_ip=xxxsudo ip link add dummy-pub type dummysudo ip addr add $public_ip/32 dev dummy-pub
公网IP启动apiserver参考:https://piwriw.github.io/2024/01/08/cloud/k8s/K8s%E5%85%AC%E7%BD%91%E9%83%A8%E7%BD%B2/
通过输出的master ...
计算机网络-虚拟专用网和网络地址转换
计算机网络-虚拟专用网和网络地址转换虚拟专用网(VPC)
因为这看起来像是点对点的通信,所以也称之为IP隧道技术。
网络地址转换(NAT)在NAT路由器上将其内部专用地址,转化为IP
基本的NAT方法
这种模式下,弊端是需要主机轮番使用转换器上的 全球地址
网络地址与端口号转换这种模式,全程为网络地址与端口号转换(Network Address and Port Translation/NAPT)
计算机网络-IP多播
计算机网络-IP多播多播(Muliticast),也称为组播,是实现了“一对多”通信技术。
IP多播地址和多播组IP多播地址依赖于IP多播地址,D类地址,一般称呼为多播地址。
前面固定为:1110
范围是:224.0.0.0-239.255.255.255
局域网的硬件多播局域网支持硬件多播:
实现:IPV4地址映射为硬件多播地址
但是多播MAC是25bit相同,而IPV4只有23bit,所以可能出现相同的
因特网上IP多播IP多播在因特网上实现, 就需要经过多个路由器的转发。多播路由器必须按照IP多播地址转发到多播组的局域网下。
所以出现了IGMP来实现IP的路由多播
网际组管理协议IGMPIGMP有三种报文类型:
成员报告报文
成员查询报文
离开组报文
工作原理1.加入多播组
IGMP成员报告报文中包含加入多播组的地址
IP多播数据报的目的地址也是加入IP多播组的地址
在这个过程中,多播路由器通过维护多播组列表,记录该路由器已知道的直连的各个网络中多播组成员的多播组地址,多播路由器只关心自己网络的多播地址
2.监视多播组的成员变化多播路由器默认125s发送查询IGMP成 ...
数据结构-队列
数据结构-队列队列(queue)是一种遵循先入先出规则的线性数据结构。顾名思义,队列模拟了排队现象,即新来的人不断加入队列尾部,而位于队列头部的人逐个离开
基于链表的队列package queueimport "container/list"type linkedQueue struct { data *list.List}func NewLinkedQueue() *linkedQueue { return &linkedQueue{ data: list.New(), }}func (q linkedQueue) push(value int) { q.data.PushBack(value)}func (q linkedQueue) pop(value int) any { if q.isEmpty() { return nil } e := q.data.Front() q.data.Remove(e) return e.Value ...
计算机网络-网际控制报文协议
计算机网络-网际控制报文协议主要是为了有效的转发IP数据报已经提高IP数据报交付成功
ICMP差错报文的种类
终点不可达
源点抑制
时间超时
参数问题
重定向
ICMP的应用1.分组网间探测(PING)使用ping来测试主机或者路由器的连通性
2.跟踪路由traceroute和tracert:探测IP数据报从源主机到目的主机需要经过哪些路由器
UNIX版中,具体使用traceroute,其在运输层使用UDP协议,在网际层使用ICMP。报文类型只有差错报告报文
Windows版中,具体使用tracert,其在应用层直接使用网际层ICMP,使用了回答请求和回答报文和差错报告报文