TLS握手过程
TLS通讯过程
ClientHello
客户端向服务器发出加密通讯请求,同时向服务器提供:
客户端支持的TLS版本
客户端生成的随机数,用于生成对话密钥
支持的加密方法
支持的压缩方法
ServerHello
服务器收到客户端请求后,向客户端响应如下内容:
确定使用的加密通信协议版本
确定使用的加密套件
下图的加密套件采用了ECDHE,如果采用的RSA或其他,那么过程会有差异
密钥交换算法:ECDHE
签名算法:RSA
加密算法:AES_128 GCM模式
摘要算法:SHA256
确定使用的压缩方式
服务器证书
当前时间
要求客户端提供证书(可选)
由于是采用的ECDHE进行密钥交换,因此服务器将采用椭圆曲线算法将这个公钥发送给客户端
服务端在第二次握手报文中包括:Server Hello, Certificate, ServerHelloDone共计三个报文。习惯将其称之为ServerHello
客户端回应
客户端收到服务器的三个响应报文后,会检测Server Hello中的协商结果是否是Client Hello中支持的,同时也检查收到的 ...
HTTP协议(部分)
HTTP1989年,就职于欧洲核子研究中心(CERN)的蒂姆·伯纳斯-李发表了一篇论文,提出了互联网上构建超链接文档系统的构想。这篇论文中确立了几项关键技术:
URL:统一资源标识符,作为互联网上资源的唯一身份
HTML:超文本标记语言,描述超文本文档
HTTP:超文本传输协议,用来传输超文本
一个用于提供访问文档的服务器,即http前身
这几个部分完成于1990年底,且第一批服务器已经在1991年初在CERN以外的地方运行了。HTTP在应用的早期阶段非常简单,后来被称为HTTP/0.9,有时候也叫做单行协议。
什么是HTTPHTTP是超文本传输协议:
协议:由两个或多个参与者组成并指定一种行为约定和规范。(好比几个不同国家的歪果仁都讲各自语言,大家都无法进行交流了,我们几个制定一份协议,大家下次交流都是使用普通话)
传输:HTTP是一个双向协议(两个最基本的参与者,请求方和应答方),HTTP是一个在计算机世界里专门用来在两点之间传输数据的约定和规范
超文本:文本(Text)是完整的、有意义的数据可以被浏览器和服务器这样的上层应用处理。在互联网早期文本就是简单的字符文字 ...
Linux60秒分析法
性能分析工具使用标准Linux工具,通过分析以下清单中的输出,可定位大部分常见的性能问题。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -h
sar -n DEV 1
sar -n TCP,ETCP 1
top
有关这些工具的更多信息,请参考man手册页
uptime通过使用uptime命令查看系统平均负载情况,平均负载指示要运行的任务或进程的数量。
12root@master:~# uptime 01:57:27 up 16 min, 1 user, load average: 0.04, 0.07, 0.09
load average后面的三个数字是指数衰减移动总和平均值,常数为1分钟、5分钟和15分钟。如果1分钟的值远低于15分钟的值,那么可能登录的过晚而错过了该问题。
如果1分钟的值大于15分钟,这将意味着CPU使用过高,可使用vmstat和mpstat命令进行确认
dmesg使用dmesg命令查询系统消息,查找可能导致性能问题的错误例如OOM-KILLER和TCP丢 ...
Docker网络与iptables
简述下图是TCP三次握手完成后在iptables中所有规则被匹配的次数
PREROUTING链
FORWARD链
通过上图和抓包的结果得出如下结论:
客户端访问有2个包
服务器响应有1个包
某些规则只匹配了1次,某些规则匹配了3次
第一次握手
本人在客户端通过使用Telnet工具对服务器192.168.66.100的80端口发起请求
123456789101112131415161718192021222324root@master:~# ip add1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host ...
Kubernetes-QoS
QoS概述QoS(Quality of Service,服务质量),最开始接触是在网络中。当网络发生拥塞的时候,所有数据包都可能被丢弃,为了满足用户对不同应用不同服务质量的要求,就需要网络根据用户的要求分配和调度资源,对不同的数据提供不同的服务质量,对实时性强且重要的数据优先处理;对于实时性不强的普通数据提供较低的处理优先级,网络拥塞时甚至丢弃。
而Kubernetes通过QoS通过为Pod中的容器指定资源约束(限制)为每个Pod设置QoS类。Kubernetes依赖这些分类来决定当Node上没有足够资源时要驱逐哪些Pod。
QoS类Kubernetes可选的QoS类有Guaranteed、Burstable和BestEffort。当一个Node耗尽资源时,Kubernetes将首先驱逐在该Node上运行的BestEffortPod,然后是Burstable,最后是GuaranteedPod。
所有超过资源限制limit的容器都将被kubelet杀死并重启,不会影响Pod其他的容器
容器超出自身资源的request且该容器运行的节点出现资源压力时,则该容器所在的Pod就会成为被驱逐 ...
Containerd环境&Buildkit构建镜像问题
BuildkitBuildKit 由buildkitd守护进程和buildctl客户端组成。虽然buildctl客户端可用于 Linux、macOS 和 Windows,但buildkitd守护程序目前仅适用于 Linux。
该buildkitd守护程序需要安装以下组件:
runc或crun
containerd(如果你想使用容器工作)
按照流程正确安装完containerd上述组件都有
安装Buildkit
GIthub: https://github.com/moby/buildkit
123root@master:~/app# wget https://github.com/moby/buildkit/releases/download/v0.12.4/buildkit-v0.12.4.linux-amd64.tar.gzroot@master:~/app# tar xf buildkit-v0.12.4.linux-amd64.tar.gzroot@master:~/app# mv bin/* /usr/local/sbin/
创建Systemd单元文件1root@ma ...
Kube-Prometheus
Kubernetes集群监控使用Prometheus Operator通过Prometheus提供易于操作的端到端Kubernetes集群监控
该软件包中包含的组件
The Prometheus Operator
Highly availavle Prometheus
Highly available Alertmanager
Prometheus node-exporter
Prometheus Adapter for Kubernetes
kube-state-metrics
Grafana
前提条件需要一个Kubernetes集群,kubelet配置必须包含以下标志:
--authentication-token-webhook=true此标志使ServiceAccount令牌可用于针对kubelet进行身份验证
--authorization-mode=Webhook此标志使kubelet将使用API执行RBAC请求,以确定是否允许请求实体访问资源,特别是对本项目的端点/metrics。也可以通过将kubelet配置值设置为authorization.mode webho ...
Dockerfile-格式
Dockerfile格式12345678910111213FROM openjdk:8-jdk-alpineWORKDIR /work-dirARG JAR_FILE=/path/app.jarCOPY ${JAR_FILE} app.jarEXPOSE 8080ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandomCMD sleep 3; java $JAVA_OPTS -jar app.jar
Nginx WS代理和跨域小记
Nginx WS代理和跨域小记WS代理默认情况下Nginx会把所有请求作为普通的HTTP请求,不会尝试升级到WebSocket协议。
在客户端发送WS(WebSocket)握手时,会携带Upgrade、Connection字段;如果没有在Nginx中配置相应的参数,那么在做代理请求时,Nginx把其当作普通HTTP请求,而不是WS请求,它可能不会保存这个两个字段或者可能修改这两个字段的值,从而导致请求到达被代理服务器时,服务器无法将连接升级为WS连接
1234567891011121314151617181920http { # map根据http_upgrade的值来设置connection_upgrade的值 # 如果http_upgrade的值为'websocket'则将connection_upgrade的值设置为upgrade,否则将设置为keep-alive map $http_upgrade $connection_upgrade { default keep-alive; # 默认为keep-ali ...
源码安装Redis
源码安装Reids
系统:Ubuntu 22.04
12345678root@redis01:~# wget wget https://download.redis.io/redis-stable.tar.gzroot@redis01:~# tar xf redis-stable.tar.gzroot@redis01:~# apt -y install build-essential automakeroot@redis01:~# cd redis-stable/root@redis01:~/redis-stable# makeroot@redis01:~/redis-stable# make installroot@redis01:~# redis-cli -vredis-cli 7.0.12
Redis单实例启动123456789101112131415161718192021222324252627282930313233root@redis01:~# echo "vm.overcommit_memory = 1" >> /etc/sysctl ...