【K8S 二进制部署】部署单Master Kurbernetes集群

news2025/1/18 4:34:24

目录

一、基本架构和系统初始化

1、集群架构:

2、操作系统初始化配置:

2.1、关闭防火墙和安全机制:

2.2、关闭swap

2.3、根据规划设置主机名

2.4、三台主机全部互相映射

2.5、调整内核参数

3、时间同步(所有节点时间必须同步)

二、部署 docker引擎

三、部署 etcd 集群

1、准备签发证书环境

2、生成Etcd证书

3、证书复制到node节点

4、启动etcd服务

5、检查etcd群集状态

四、部署 Master 组件

1、二进制文件、token、证书

2、开启 apiserver 服务

3、启动 scheduler 服务

4、启动 controller-manager 服务

5、生成kubectl连接集群的kubeconfig文件

6、通过kubectl工具查看当前集群组件状态

五、部署 Worker Node 组件

1、部署kubelet和proxy


一、基本架构和系统初始化

二进制部署:源码包部署

1、集群架构:

K8S master01:20.0.0.61 kube-apiserver、kube-controller-manager、kube-scheduler、etcd
K8S master02:20.0.0.62 kube-apiserver、kube-controller-manager、kube-scheduler

node01:20.0.0.63 kubelet、kube-proxy、etcd
node02:20.0.0.64 kubelet、kube-proxy、etcd

负载均衡:nginx+keepalived:master:20.0.0.65
backup:20.0.0.66

etcd集群:
master01 20.0.0.61
node1 20.0.0.63
node2 20.0.0.64

2、操作系统初始化配置

2.1、关闭防火墙和安全机制:
systemctl stop firewalld
setenforce 0
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X


iptables -F:清除默认的 iptables 规则链(如 INPUT、FORWARD、OUTPUT)中的所有规则。

iptables -t nat -F:清除 "nat" 表中的所有规则,这通常包含用于网络地址转换(NAT)的规则。

iptables -t mangle -F:清除 "mangle" 表中的所有规则,这通常包含用于修改数据包头部的规则。

iptables -X:删除用户自定义的链。它将删除你可能在 iptables 中创建的任何自定义链。

2.2、关闭swap

关闭交换分区,提升性能

swap交换分区,如果机器内存不够,就会使用swap交换分区,但是swap交换分区的性能较低,

k8s设计的时候为了提升性能,默认是不允许使用交换分区的。kubeadm初始化的时候会检测swap是否关闭,

如果没关闭就会初始化失败。如果不想关闭交换分区,

安装k8s的时候可以指定-ignore-preflight-errors=Swap来解决。

swapoff -a

sed -ri 's/.*swap.*/#&/' /etc/fstab

2.3、根据规划设置主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

2.4、三台主机全部互相映射

vim /etc/hosts

20.0.0.61 master01
20.0.0.63 node01
20.0.0.64 node02

2.5、调整内核参数
vim /etc/sysctl.d/k8s.conf
#开启网桥模式
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#网桥的流量传给iptables的链,实现地址映射

#关闭ipv6的流量(可选项,看情况)
net.ipv6.conf.all.disable_ipv6=1
#根据工作中的实际情况,自定

net.ipv4.ip_forward=1
#开启转发功能


#加载配置:
sysctl --system

3、时间同步(所有节点时间必须同步

yum install ntpdate -y
ntpdate ntp.aliyun.com

二、部署 docker引擎

所有 node 节点部署docker引擎

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce docker-ce-cli containerd.io



systemctl start docker.service
systemctl enable docker.service

三、部署 etcd 集群

etcd是一个高可用-分布式键值存储数据库

采用raft算法保证节点的信息一致性。

etcd是基于go语言写的

etcd端口:

2379:API接口,对外为客户端提供通信

2380:内部服务的通信端口

etcd 在生产环境中一般推荐集群方式部署。由于etcd 的leader选举机制,要求至少为3台或以上的奇数台。

K8S内部通信依靠证书认证(秘钥认证)

1、准备签发证书环境

相关证书:

cfssl:证书签发的工具命令
cfssljson:将 cfssl 生成的证书(json格式)变为文件承载式证书
cfssl-certinfo:验证证书的信息


#查看证书的信息
cfssl-certinfo -cert <证书名称>

在 master01 节点上操作

将三个证书文件,放到/opt下

mv cfssl cfssl-certinfo cfssljson /usr/local/bin/
chmod 777 /usr/local/bin/cfssl*

2、生成Etcd证书

mkdir /opt/k8s

cd /opt/k8s/

上传 etcd-cert.sh 和 etcd.sh 到 /opt/k8s/ 目录中

chmod 777 etcd-cert.sh etcd.sh

脚本详解:

etcd配置文件创建:

etcd.sh:

在 /opt/etcd/cfg/etcd 路径下创建了一个配置文件,用于定义 etcd 节点的各种参数,

包括节点名称、数据目录、监听地址等。这个配置文件描述了etcd节点在集群中的角色和通信方式。

etcd服务管理文件创建:

在 /usr/lib/systemd/system/etcd.service 路径下创建了一个 systemd 服务管理文件。

这个文件定义了 etcd 服务的启动方式、环境变量以及其他配置,例如 TLS 证书的路径。

启动etcd服务:

使用 systemd 启动了 etcd 服务。systemd 是 Linux 系统的一个服务管理工具,它能够启动、停止和管理后台服务。

TLS证书配置:

etcd服务配置中包含了一些关于 TLS(传输层安全)证书的设置。

TLS用于在网络上安全地传输数据,这里的证书用于对集群内和客户端之间的通信进行加密和身份验证。

Flannel兼容性:

有一个注释指出当前版本的 flannel(一种网络解决方案)不支持 etcd v3 通信。

这表明该脚本可能用于配置 etcd v2 接口以便与 flannel 兼容。

总的来说,这个脚本用于设置一个安全的、分布式的 etcd 集群节点,

以便在集群中存储和管理键值对数据,通常用于分布式系统的配置和协调。

etcd-cert.sh:要进去改一下IP地址

CA配置文件 (ca-config.json):

配置了证书生成策略,定义了默认过期时间和一个名为 "www" 的配置模板,

该模板具有较长的过期时间和用途包括签名、密钥加密、服务器认证和客户端认证。

CA签名请求文件 (ca-csr.json):

用于生成根证书和私钥的签名请求文件。包括了Common Name(CN),密钥算法和一些组织信息。

生成根证书和私钥:

使用 cfssl 工具根据配置文件生成根证书 (ca.pem) 和私钥 (ca-key.pem),同时生成签名请求文件 (ca.csr)。

服务器证书签名请求文件 (server-csr.json):

用于生成 etcd 服务器证书和私钥的签名请求文件。包括了Common Name(CN),主机地址列表,密钥算法和一些组织信息。

生成etcd服务器证书和私钥:

使用 cfssl 工具根据根证书对服务器签名请求文件进行签名,生成 etcd 服务器证书 (server.pem) 和私钥 (server-key.pem)。

创建用于生成CA证书、etcd 服务器证书以及私钥的目录

mkdir /opt/k8s/etcd-cert
mv etcd-cert.sh etcd-cert/
cd /opt/k8s/etcd-cert/

./etcd-cert.sh
#生成CA证书、etcd 服务器证书以及私钥

秘钥、证书:

ca-config.json:证书颁发机构(CA)的配置文件,定义了证书生成策略,包括默认过期时间和用途模板。

ca-csr.json:用于生成根证书和私钥的签名请求文件。包括Common Name(CN)和一些组织信息。

ca.pem:根证书文件,用于签发其他组件的证书。

ca.csr:根证书签发请求文件。

ca-key.pem:根证书私钥文件。

server-csr.json:用于生成 etcd 服务器证书和私钥的签名请求文件。包括Common Name(CN)、主机地址列表和一些组织信息。

server.pem:etcd 服务器证书文件,用于加密和认证 etcd 节点之间的通信。

server.csr:etcd 服务器证书签发请求文件。

server-key.pem:etcd 服务器证书私钥文件。

上传 etcd-v3.4.9-linux-amd64.tar.gz 到 /opt/k8s 目录中,启动etcd服务

cd /opt/k8s/

tar zxvf etcd-v3.4.9-linux-amd64.tar.gz

ls etcd-v3.4.9-linux-amd64

文件详解:

Documentation(文档):

包含文档文件的目录。你可以参考这些文件以获取有关如何使用和配置etcd的信息。

etcd:

主要的etcd二进制文件。这是etcd服务器的可执行文件,它是一个分布式键值存储。

etcdctl:

etcd命令行实用程序。这是与etcd集群进行交互的客户端。你可以使用此实用程序在etcd存储中获取、设置和管理键。

README文件:

包含有关etcd、etcdctl和使用指南的各种README文件。这些文件通常包含有关软件的重要信息。

要使用etcd,你可以运行etcd二进制文件以启动etcd服务器。此外,你可以使用etcdctl二进制文件从命令行与etcd集群进行交互。

创建用于存放 etcd 配置文件,命令文件,证书的目录

mkdir -p /opt/etcd/{cfg,bin,ssl}

cd /opt/k8s/etcd-v3.4.9-linux-amd64/

mv etcd etcdctl /opt/etcd/bin/

cp /opt/k8s/etcd-cert/*.pem /opt/etcd/ssl/



cd /opt/k8s/

./etcd.sh etcd01 20.0.0.61 etcd02=https://20.0.0.63:2380,etcd03=https://20.0.0.64:2380
#进入卡住状态等待其他节点加入,这里需要三台etcd服务同时启动,如果只启动其中一台后,服务会卡在那里,直到集群中所有etcd节点都已启动,可忽略这个情况


#可另外打开一个窗口查看etcd进程是否正常
ps -ef | grep etcd

3、证书复制到node节点

把etcd相关证书文件、命令文件和服务管理文件全部拷贝到另外两个etcd集群节点

scp -r /opt/etcd/ root@20.0.0.63:/opt/

scp -r /opt/etcd/ root@20.0.0.64:/opt/

scp /usr/lib/systemd/system/etcd.service root@20.0.0.63:/usr/lib/systemd/system/

scp /usr/lib/systemd/system/etcd.service root@20.0.0.64:/usr/lib/systemd/system/

在 node01 节点上操作(node2同样的操作)

vim /opt/etcd/cfg/etcd


#[Member]
ETCD_NAME="etcd02" #修改
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.233.93:2380" #修改
ETCD_LISTEN_CLIENT_URLS="https://192.168.233.93:2379" #修改


#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.233.93:2380" #修改
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.233.93:2379" #修改
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.233.91:2380,etcd02=https://192.168.233.93:2380,etcd03=https://192.168.233.94:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

依次启动etcd,谁先启动谁是主,先启动master(貌似主先启动不了)

4、启动etcd服务

systemctl start etcd

systemctl enable etcd

systemctl status etcd

5、检查etcd群集状态

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://20.0.0.61:2379,https://20.0.0.63:2379,https://20.0.0.64:2379" endpoint health --write-out=table

--cert-file:识别HTTPS端使用SSL证书文件

--key-file:使用此SSL密钥文件标识HTTPS客户端

--ca-file:使用此CA证书验证启用https的服务器的证书

--endpoints:集群中以逗号分隔的机器地址列表

cluster-health:检查etcd集群的运行状况

查看etcd集群成员列表

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://20.0.0.61:2379,https://20.0.0.63:2379,https://20.0.0.64:2379" --write-out=table member list

ID: 节点的唯一标识符。

STATUS: 节点的状态,此处为"started",表示节点已启动。

NAME: 节点的名称,可能是 "etcd01"、"etcd02" 或 "etcd03"。

PEER ADDRS: 节点用于集群通信的对等地址(用于节点之间的通信)。

CLIENT ADDRS: 节点用于客户端通信的地址(用于 etcdctl 等工具与 etcd 通信)。

IS LEARNER: 标志指示节点是否是学习者,这里的值是 "false",表示不是学习者。

在 etcd 中,"学习者"(Learner)是指一个节点不参与 Raft 协议的投票过程,仅仅用于复制集群中的数据,

而不对集群的一致性达成做出投票。

学习者节点通常用于扩展集群的读取性能,因为它们不参与 Raft 的写操作,只负责复制数据。

四、部署 Master 组件

1、二进制文件、token、证书

在 master01 节点上操作

#上传 master.zip 和 k8s-cert.sh 到 /opt/k8s 目录中,解压 master.zip 压缩包

cd /opt/k8s/

unzip master.zip

chmod 777 *.sh

现将配置文件中的IP地址改了:

vim k8s-cert.sh

vim admin.sh

vim controller-manager.sh

vim scheduler.sh

创建kubernetes工作目录

mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

生成CA证书、相关组件的证书和私钥--k8s-cert.sh

创建用于生成CA证书、相关组件的证书和私钥的目录

mkdir /opt/k8s/k8s-cert
mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert
cd /opt/k8s/k8s-cert/

./k8s-cert.sh
#生成CA证书、相关组件的证书和私钥

k8s-cert.sh

这个脚本用于生成 Kubernetes 集群中各个组件所需的证书和私钥

复制CA证书、apiserver相关证书和私钥到 kubernetes工作目录的 ssl 子目录中

cp ca*pem apiserver*pem /opt/kubernetes/ssl/

上传 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目录中,解压 kubernetes 压缩包

cd /opt/k8s/

tar zxvf kubernetes-server-linux-amd64.tar.gz

复制master组件的关键命令文件到 kubernetes工作目录的 bin 子目录中

cd /opt/k8s/kubernetes/server/bin

cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/

ln -s /opt/kubernetes/bin/* /usr/local/bin/

创建 bootstrap token 认证文件,apiserver 启动时会调用,然后就相当于在集群内创建了一个这个用户

接下来就可以用 RBAC 进行授权

cd /opt/k8s/
vim token.sh



#!/bin/bash
#获取随机数前16个字节内容,以十六进制格式输出,并删除其中空格
BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
#生成 token.csv 文件,按照 Token序列号,用户名,UID,用户组 的格式生成
cat > /opt/kubernetes/cfg/token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF



chmod 777 token.sh
./token.sh
cat /opt/kubernetes/cfg/token.csv

二进制文件、token、证书都准备好后

2、开启 apiserver 服务

cd /opt/k8s/

./apiserver.sh 20.0.0.61 https://20.0.0.61:2379,https://20.0.0.63:2379,https://20.0.0.64:2379

检查进程是否启动成功

ps aux | grep kube-apiserver

netstat -natp | grep 6443   

#安全端口6443用于接收HTTPS请求,用于基于Token文件或客户端证书等认证

3、启动 scheduler 服务

cd /opt/k8s/

./scheduler.sh

ps aux | grep kube-scheduler

4、启动 controller-manager 服务

./controller-manager.sh

ps aux | grep kube-controller-manager

5、生成kubectl连接集群的kubeconfig文件

./admin.sh

6、通过kubectl工具查看当前集群组件状态

kubectl get cs

查看版本信息

kubectl version

五、部署 Worker Node 组件

1、部署kubelet和proxy

在所有 node 节点上操作

#创建kubernetes工作目录

mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

#上传 node.zip 到 /opt 目录中,解压 node.zip 压缩包,获得kubelet.sh、proxy.sh

cd /opt/

unzip node.zip

chmod 777 kubelet.sh proxy.sh

在 master01 节点上操作

#把 kubelet、kube-proxy 拷贝到 node 节点

cd /opt/k8s/kubernetes/server/bin

scp kubelet kube-proxy root@20.0.0.63:/opt/kubernetes/bin/

scp kubelet kube-proxy root@20.0.0.64:/opt/kubernetes/bin/

#上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中,生成kubelet初次加入集群引导kubeconfig文件和kube-proxy.kubeconfig文件

#kubeconfig 文件包含集群参数(CA 证书、API Server 地址),

客户端参数(上面生成的证书和私钥),集群 context 上下文参数(集群名称、用户名)。

Kubenetes 组件(如 kubelet、kube-proxy)通过启动时指定不同的 kubeconfig 文件可以切换到不同的集群,

连接到 apiserver。

#上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中

mkdir /opt/k8s/kubeconfig



cd /opt/k8s/kubeconfig

chmod 777 kubeconfig.sh

./kubeconfig.sh 20.0.0.61 /opt/k8s/k8s-cert/

把配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 拷贝到 node 节点

scp bootstrap.kubeconfig kube-proxy.kubeconfig root@20.0.0.63:/opt/kubernetes/cfg/

scp bootstrap.kubeconfig kube-proxy.kubeconfig root@20.0.0.64:/opt/kubernetes/cfg/

RBAC授权,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书

kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

若执行失败,可先给kubectl绑定默认cluster-admin管理员集群角色,授权对整个集群的管理员权限

kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

在 node01 节点上操作

#启动 kubelet 服务
cd /opt/
./kubelet.sh 20.0.0.63
./kubelet.sh 20.0.0.64


ps aux | grep kubelet

在 master01 节点上操作,通过 CSR 请求

#检查到 node01 节点的 kubelet 发起的 CSR 请求,Pending 表示等待集群给该节点签发证书

kubectl get csr

通过 CSR 请求

kubectl certificate approve node-csr-1C-Qomwben7_ekyyIMfuL6Of9UowclpR_qP4D1ln_K8

kubectl certificate approve node-csr-74T8yQ8QKj5y1KOm1GikQIPF9yXvQzWilKI2dM-4kjU

Approved,Issued 表示已授权 CSR 请求并签发证书

kubectl get csr

查看节点,由于网络插件还没有部署,节点会没有准备就绪 NotReady

kubectl get node

在 node01 节点上操作

#加载 ip_vs 模块

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

启动proxy服务

cd /opt/
./proxy.sh 20.0.0.63
./proxy.sh 20.0.0.64
ps aux | grep kube-proxy

后面的部署接下一篇博客......

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

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

相关文章

231227-9步在RHEL8.8配置本地yum源仓库

Seciton 1&#xff1a;参考视频 RHEL8配置本地yum源仓库-安徽迪浮_哔哩哔哩_bilibili Seciton 2&#xff1a;具体操作 &#x1f3af; 第1步&#xff1a;查看光驱文件/dev/sr0是否已经挂载&#xff1f;此处已挂在 [lgklocalhost ~]$ df -h &#x1f3af; 第1步&#xff1a;查看…

2022年全国职业院校技能大赛高职组云计算正式赛卷第三场-公有云

2022 年全国职业院校技能大赛高职组云计算赛项试卷 【赛程名称】云计算赛项第三场-公有云 目录 2022 年全国职业院校技能大赛高职组云计算赛项试卷 【赛程名称】云计算赛项第三场-公有云 【任务 1】公有云服务搭建[10 分] 【任务 2】公有云服务运维[10 分] 【任务 3】公有云运维…

使用克魔助手查看IOS游戏FPS的方法详解

查看IOS游戏FPS 摘要 本篇技术博客将介绍如何使用克魔助手工具来查看iOS游戏的帧率&#xff08;FPS&#xff09;。通过克魔助手&#xff0c;开发者可以轻松监测游戏性能&#xff0c;以提升用户体验和游戏质量。 引言 在iOS游戏开发过程中&#xff0c;了解游戏的帧率对于优化…

C++ DAY2作业

1.课堂struct练习&#xff0c;用class&#xff1b; #include <iostream>using namespace std;class Stu { private:int age;char sex;int high; public:double score;void set_values(int a,char b,int c,double d);int get_age();char get_sex();int get_high(); }; vo…

windTerm 连接一段时间之后自动断开

默认是关闭会话空闲保活功能的&#xff0c;如所连接的SSH服务没做连接保活&#xff0c; 就很可能超时自动断开 开启会话保活 在 会话 -> 首选项 -> Default Session Settings -> SSH -> 连接 -> 发送空包以保持会话活动 设置15&#xff0c;即15秒自动发空包保…

华天动力OA TemplateService 任意文件读取漏洞复现

0x01 产品简介 华天动力OA是一款将先进的管理思想、 管理模式和软件技术、网络技术相结合&#xff0c;为用户提供了低成本、 高效能的协同办公和管理平台。 0x02 漏洞概述 华天动力OA TemplateService接口处存在任意文件读取漏洞&#xff0c;未经身份认证的攻击者可利用此漏洞…

JavaFX:控件Group。

group组件是一个容器组件&#xff0c;它不对其子组件应用特殊布局。所有子组件&#xff08;节点&#xff09;都位于0,0处。JavaFX组组件通常用于将一些效果或转换应用于一组控件&#xff08;作为一个组&#xff09;。如果需要对组内的子级进行一些布局&#xff0c;请将它们嵌套…

docker学习(十八、network介绍)

文章目录 熟悉的ifconfigDocker 网络的使用方式Docker 网络的作用Docker 网络模式注意事项 首先&#xff0c;我们要知道什么是 Docker 网络。简单来说&#xff0c;它就是 Docker 中用于实现容器间通信的一个东西。 network相关内容&#xff1a; docker学习&#xff08;十八、ne…

linux cat命令增加-f显示文件名功能

在使用cat命令配合grep批量搜索文件内容时&#xff0c;我仅仅能知道是否搜索到&#xff0c;不知道是在哪个文件里找到的。比如cat ./src/*.c | grep full_write,在src目录下的所有.c文件里找full_write,能匹配到所有的full_write&#xff0c;但是不知道它们分别在哪些文件里。于…

金睛云华斩获ISC2023数字安全创新能力百强 五项殊荣!

昨日&#xff0c;由北京市通州区人民政府指导&#xff1b;中关村科技园区通州园管理委员会、ISC平台主办的ISC2023数字安全创新能力百强颁奖典礼在京举行。金睛云华以卓越的产品创新实力&#xff0c;一举斩获网络与流量安全、威胁检测与响应、AI驱动安全、创新力十强、年度十强…

如何实现无公网ip环境访问vscode远程开发【内网穿透】

文章目录 前言1、安装 OpenSSH2、vscode 配置 ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu 安装 cpolar 内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定 TCP 端口地址5.1 保留一个固定 TCP 端口地址5.2 配置固定 TCP 端口地址5.3 测试固定公网地址远…

树莓派安装Nginx搭建web服务器结合内网穿透实现无公网IP远程访问本地站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

docker学习(十九、network使用示例bridge)

文章目录 一、容器网络分配情况1.启动容器2.查看容器的network3.容器网络分配 二、bridge1.bridge详细介绍2.实践bridge两两匹配3.创建network&#xff0c;默认bridge network相关内容&#xff1a; docker学习&#xff08;十八、network介绍&#xff09; docker学习&#xff08…

CentOS 7 lvm 裸盘的扩容和缩容减盘 —— 筑梦之路

背景介绍 之前写过比较多的关于lvm的文章&#xff1a; CentOS 7 lvm 更换坏盘操作步骤小记 —— 筑梦之路_centos更换硬盘操作-CSDN博客 xfs ext4 结合lvm 扩容、缩容 —— 筑梦之路_ext4扩盘-CSDN博客 LVM逻辑卷元数据丢失恢复案例 —— 筑梦之路_pve lvm数据恢复-CSDN博客…

Java多线程技术8——并发集合框架

1 集合框架结构 Java中的集合框架父接口是Iterable,从这个接口向下一一继承就可以得到完整的Java集合框架结构。集合框架的继承与实现关系相当复杂&#xff0c;简化的集合框架接口结构如下图&#xff1a; 可以发现&#xff0c;出现了3个继承分支&#xff08;List,Set,Queue&…

NR Scell上能收common search space dci吗?

答案肯定是能的&#xff0c;先看下common search space都有哪些。 1 Type0-PDCCH CSS set&#xff1a;在 MCG的primary cell上设置&#xff0c;主要包含MIB 中的pdcch-ConfigSIB1 或 PDCCH-ConfigCommon 中的 searchSpaceSIB1 或searchSpaceZero &#xff0c;用于接收由SI-RNTI…

Jupyter Notebook 开启远程登录

Jupyter Notebook可以说是非常好用的小工具&#xff0c;但是不经过配置只能够在本机访问 安装jupyter notebook conda install jupyter notebook 生成默认配置文件 jupyter notebook --generate-config 将会在用户主目录下生成.jupyter文件夹&#xff0c;其中jupyter_noteb…

Spring漏洞合集

目录 什么是spring区分Spring与Struts2框架的几种新方法CVE-2016-4977&#xff1a;Spring Security OAuth2 远程命令执行漏洞漏洞介绍 & 环境准备漏洞发现漏洞验证 & 利用1利用2 CVE-2017-4971&#xff1a;Pivotal Spring Web Flow 远程代码执行漏洞漏洞介绍 & 环境…

国产化软硬件升级之路:πDataCS 赋能工业软件创新与实践

在国产化浪潮的推动下&#xff0c;基础设施软硬件替换和升级的需求日益增长。全栈国产化软硬件升级替换已成为许多领域中的必选项&#xff0c;也引起了数据库和存储领域的广泛关注。近年来&#xff0c;虽然涌现了许多成功的替换案例&#xff0c;但仍然面临着一些问题。 数据库…

SpringBoot系列---【过滤器Filter和拦截器HandlerInterceptor的区别和用法】

1.作用时机 1.1 过滤器 过滤器(Filter)主要作用在请求到达Servlet或JSP之前&#xff0c;对请求进行预处理&#xff0c;可以对HTTP请求进行过滤、修改。过滤器是基于回调函数实现的&#xff0c;开发人员通过重写doFilter()方法实现过滤逻辑&#xff0c;其主要功能有&#xff1a;…