附028.Kubernetes_v1.20.0高可用部署架构二

kubeadm介绍

kubeadm概述

参考附003.Kubeadm部署Kubernetes

kubeadm功能

参考附003.Kubeadm部署Kubernetes

本方案描述

  • 本方案采用kubeadm部署Kubernetes 1.20.0版本;
  • etcd采用混部方式;
  • Keepalived:实现VIP高可用;
  • Nginx:以Pod形式运行与Kubernetes之上,即in Kubernetes模式,提供反向代理至3个master 6443端口;
  • 其他主要部署组件包括:
  • Metrics:度量;
  • Dashboard:Kubernetes 图形UI界面;
  • Helm:Kubernetes Helm包管理工具;
  • Ingress:Kubernetes 服务暴露;
  • Longhorn:Kubernetes 动态存储组件。

部署规划

节点规划

节点主机名 IP 类型 运行服务 master01 172.24.8.71 Kubernetes master节点 docker、etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kubectl、kubelet、metrics、calico master02 172.24.8.72 Kubernetes master节点 docker、etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kubectl、kubelet、metrics、calico master03 172.24.8.73 Kubernetes master节点 docker、etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kubectl、kubelet、metrics、calico worker01 172.24.8.74 Kubernetes worker节点 docker、kubelet、proxy、calico worker02 172.24.8.75 Kubernetes worker节点 docker、kubelet、proxy、calico worker03 172.24.8.76 Kubernetes worker节点 docker、kubelet、proxy、calico

Kubernetes的高可用主要指的是控制平面的高可用,即指多套Master节点组件和Etcd组件,工作节点通过负载均衡连接到各Master。

附028.Kubernetes_v1.20.0高可用部署架构二

Kubernetes高可用架构中etcd与Master节点组件混布方式特点:

  • 所需机器资源少
  • 部署简单,利于管理
  • 容易进行横向扩展
  • 风险大,一台宿主机挂了,master和etcd就都少了一套,集群冗余度受到的影响比较大

提示:本实验使用Keepalived+Nginx架构实现Kubernetes的高可用。

初始准备

[root@master01 ~]# hostnamectl set-hostname master01        #其他节点依次修改
[root@master01 ~]# cat >> /etc/hosts << EOF
172.24.8.71 master01
172.24.8.72 master02
172.24.8.73 master03
172.24.8.74 worker01
172.24.8.75 worker02
172.24.8.76 worker03
EOF

[root@master01 ~]# wget http://down.linuxsb.com/k8sinit.sh

提示:此操作仅需要在master01节点操作。
对于某些特性,可能需要升级内核,内核升级操作见《018.Linux升级内核》。4.19版及以上内核nf_conntrack_ipv4已经改为nf_conntrack。

互信配置

为了更方便远程分发文件和执行命令,本实验配置master01节点到其它节点的 ssh 信任关系。

[root@master01 ~]# ssh-keygen -f ~/.ssh/id_rsa -N ''
[root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@master01
[root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@master02
[root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@master03
[root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@worker01
[root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@worker02
[root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@worker03

提示:此操作仅需要在master01节点操作。

其他准备

[root@master01 ~]# vi environment.sh

#!/bin/sh
#****************************************************************#
ScriptName: environment.sh
Author: xhy
Create Date: 2020-05-30 16:30
Modify Author: xhy
Modify Date: 2020-05-30 16:30
Version:
#***************************************************************#
&#x96C6;&#x7FA4; MASTER &#x673A;&#x5668; IP &#x6570;&#x7EC4;
export MASTER_IPS=(172.24.8.71 172.24.8.72 172.24.8.73)

&#x96C6;&#x7FA4; MASTER IP &#x5BF9;&#x5E94;&#x7684;&#x4E3B;&#x673A;&#x540D;&#x6570;&#x7EC4;
export MASTER_NAMES=(master01 master02 master03)

&#x96C6;&#x7FA4; NODE &#x673A;&#x5668; IP &#x6570;&#x7EC4;
export NODE_IPS=(172.24.8.74 172.24.8.75 172.24.8.76)

&#x96C6;&#x7FA4; NODE IP &#x5BF9;&#x5E94;&#x7684;&#x4E3B;&#x673A;&#x540D;&#x6570;&#x7EC4;
export NODE_NAMES=(worker01 worker02 worker03)

&#x96C6;&#x7FA4;&#x6240;&#x6709;&#x673A;&#x5668; IP &#x6570;&#x7EC4;
export ALL_IPS=(172.24.8.71 172.24.8.72 172.24.8.73 172.24.8.74 172.24.8.75 172.24.8.76)

&#x96C6;&#x7FA4;&#x6240;&#x6709;IP &#x5BF9;&#x5E94;&#x7684;&#x4E3B;&#x673A;&#x540D;&#x6570;&#x7EC4;
export ALL_NAMES=(master01 master02 master03 worker01 worker02 worker03)
[root@master01 ~]# source environment.sh
[root@master01 ~]# chmod +x *.sh
[root@master01 ~]# for all_ip in ${ALL_IPS[@]}
  do
    echo ">>> ${all_ip}"
    scp -rp /etc/hosts root@${all_ip}:/etc/hosts
    scp -rp k8sinit.sh root@${all_ip}:/root/
    ssh root@${all_ip} "bash /root/k8sinit.sh"
  done

提示:Kubernetes 1.20.0可兼容的docker版本最新为19.03。

集群部署

相关组件包

需要在每台机器上都安装以下的软件包:

  • kubeadm: 用来初始化集群的指令;
  • kubelet: 在集群中的每个节点上用来启动 pod 和 container 等;
  • kubectl: 用来与集群通信的命令行工具。

kubeadm不能安装或管理 kubelet 或 kubectl ,所以得保证他们满足通过 kubeadm 安装的 Kubernetes控制层对版本的要求。如果版本没有满足要求,可能导致一些意外错误或问题。
具体相关组件安装见;附001.kubectl介绍及使用书

提示:Kubernetes 1.20版本所有兼容相应组件的版本参考:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md。

正式安装

[root@master01 ~]# for all_ip in ${ALL_IPS[@]}
  do
    echo ">>> ${all_ip}"
    ssh root@${all_ip} "cat <<eof> /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF"
    ssh root@${all_ip} "yum install -y kubeadm-1.20.0-0.x86_64 kubelet-1.20.0-0.x86_64 kubectl-1.20.0-0.x86_64 --disableexcludes=kubernetes"
    ssh root@${all_ip} "systemctl enable kubelet"
done

[root@master01 ~]# yum search -y kubelet --showduplicates             #&#x67E5;&#x770B;&#x76F8;&#x5E94;&#x7248;&#x672C;
</eof>

提示:如上仅需Master01节点操作,从而实现所有节点自动化安装,同时此时不需要启动kubelet,初始化的过程中会自动启动的,如果此时启动了会出现报错,忽略即可。

说明:同时安装了cri-tools, kubernetes-cni, socat三个依赖:
socat:kubelet的依赖;
cri-tools:即CRI(Container Runtime Interface)容器运行时接口的命令行工具。

部署高可用组件I

Keepalived安装

[root@master01 ~]# for master_ip in ${MASTER_IPS[@]}
  do
    echo ">>> ${master_ip}"
    ssh root@${master_ip} "yum -y install curl gcc gcc-c++ make libnl libnl-devel libnl3-devel libnfnetlink-devel openssl-devel"
    ssh root@${master_ip} "wget http://down.linuxsb.com/software/keepalived-2.1.5.tar.gz"
    ssh root@${master_ip} "tar -zxvf keepalived-2.1.5.tar.gz"
    ssh root@${master_ip} "cd keepalived-2.1.5/ && LDFLAGS=\"$LDFAGS -L /usr/local/openssl/lib/\" ./configure --sysconf=/etc --prefix=/usr/local/keepalived && make && make install"
    ssh root@${master_ip} "systemctl enable keepalived && systemctl start keepalived"
  done

提示:如上仅需Master01节点操作,从而实现所有节点自动化安装。若出现如下报错:undefined reference to OPENSSL_init_ssl',可带上openssl lib路径:</strong></em></p> <p><em><strong><code>LDFLAGS="$LDFAGS -L /usr/local/openssl/lib/" ./configure --sysconf=/etc --prefix=/usr/local/keepalived</code></strong></em></p> <h4>创建配置文件</h4> <pre><code>[root@master01 ~]# wget http://down.linuxsb.com/ngkek8s.sh #拉取自动部署脚本 [root@master01 ~]# chmod u+x ngkek8s.sh </code></pre> <pre><code>[root@master01 ~]# vi ngkek8s.sh #其他保持默认 #!/bin/sh #****************************************************************# ScriptName: k8s_ha.sh Author: xhy Create Date: 2020-05-13 16:32 Modify Author: xhy Modify Date: 2020-06-12 12:53 Version: v2 #***************************************************************# ####################################### set variables below to create the config files, all files will create at ./config directory ####################################### master keepalived virtual ip address export K8SHA_VIP=172.24.8.254 master01 ip address export K8SHA_IP1=172.24.8.71 master02 ip address export K8SHA_IP2=172.24.8.72 master03 ip address export K8SHA_IP3=172.24.8.73 master01 hostname export K8SHA_HOST1=master01 master02 hostname export K8SHA_HOST2=master02 master03 hostname export K8SHA_HOST3=master03 master01 network interface name export K8SHA_NETINF1=eth0 master02 network interface name export K8SHA_NETINF2=eth0 master03 network interface name export K8SHA_NETINF3=eth0 keepalived auth_pass config export K8SHA_KEEPALIVED_AUTH=412f7dc3bfed32194d1600c483e10ad1d kubernetes CIDR pod subnet export K8SHA_PODCIDR=10.10.0.0 kubernetes CIDR svc subnet export K8SHA_SVCCIDR=10.20.0.0 </code></pre> <p><code>[root@master01 ~]# ./ngkek8s.sh</code></p> <p><strong>解释:如上仅需Master01节点操作。执行ngkek8s.sh脚本后,会自动生成以下配置文件:</strong></p> <ul> <li><strong>kubeadm-config.yaml:kubeadm初始化配置文件,位于当前目录</strong></li> <li><strong>keepalived:keepalived配置文件,位于各个master节点的/etc/keepalived目录</strong></li> <li><strong>nginx-lb:nginx-lb负载均衡配置文件,位于各个master节点的/etc/kubernetes/nginx-lb/目录</strong></li> <li>*<em>calico.yaml:calico网络组件部署文件,位于config/calico/目录</em></li> </ul> <pre><code>[root@master01 ~]# cat kubeadm-config.yaml #检查集群初始化配置 apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration networking: serviceSubnet: "10.20.0.0/16" #设置svc网段 podSubnet: "10.10.0.0/16" #设置Pod网段 dnsDomain: "cluster.local" kubernetesVersion: "v1.20.0" #设置安装版本 controlPlaneEndpoint: "172.24.11.254:16443" #设置相关API VIP地址 apiServer: certSANs: - master01 - master02 - master03 - 127.0.0.1 - 172.24.8.71 - 172.24.8.72 - 172.24.8.73 - 172.24.8.254 timeoutForControlPlane: 4m0s certificatesDir: "/etc/kubernetes/pki" imageRepository: "k8s.gcr.io" …… #如下全部注释 #apiVersion: v1 #kind: Secret #metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard-certs namespace: kubernetes-dashboard #type: Opaque …… kind: Deployment …… replicas: 3 #适当调整为3副本 …… spec: containers: - name: kubernetes-dashboard image: kubernetesui/dashboard:v2.1.0 imagePullPolicy: IfNotPresent #修改镜像下载策略 ports: - containerPort: 8443 protocol: TCP args: - --auto-generate-certificates - --namespace=kubernetes-dashboard - --tls-key-file=tls.key - --tls-cert-file=tls.crt - --token-ttl=3600 #追加如上args …… nodeSelector: "kubernetes.io/os": linux "dashboard": "yes" #部署在master节点 …… kind: Service apiVersion: v1 metadata: labels: k8s-app: dashboard-metrics-scraper name: dashboard-metrics-scraper namespace: kubernetes-dashboard spec: type: NodePort #新增 ports: - port: 8000 nodePort: 30000 #新增 targetPort: 8000 selector: k8s-app: dashboard-metrics-scraper …… replicas: 3 #适当调整为3副本 …… nodeSelector: "beta.kubernetes.io/os": linux "dashboard": "yes" #部署在master节点 …… </code></pre> <h4>正式部署</h4> <pre><code>[root@master01 dashboard]# kubectl apply -f recommended.yaml [root@master01 dashboard]# kubectl get deployment kubernetes-dashboard -n kubernetes-dashboard [root@master01 dashboard]# kubectl get services -n kubernetes-dashboard [root@master01 dashboard]# kubectl get pods -o wide -n kubernetes-dashboard </code></pre> <p><img alt="" src="https://bed01.oss-cn-hangzhou.aliyuncs.com/study/kubernetes/f028/009.png" /></p> <p><em><strong>提示:master01 NodePort 30001/TCP映射到 dashboard pod 443 端口。</strong></em></p> <h4>创建管理员账户</h4> <p><em><strong>提示:dashboard v2版本默认没有创建具有管理员权限的账户,可如下操作创建。</strong></em></p> <pre><code>[root@master01 dashboard]# vi dashboard-admin.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard </code></pre> <p><code>[root@master01 dashboard]# kubectl apply -f dashboard-admin.yaml</code></p> <h3>ingress暴露dashboard</h3> <h4>创建ingress tls</h4> <pre><code>[root@master01 ~]# cd /root/dashboard/certs [root@master01 certs]# kubectl -n kubernetes-dashboard create secret tls kubernetes-dashboard-tls --cert=tls.crt --key=tls.key [root@master01 certs]# kubectl -n kubernetes-dashboard describe secrets kubernetes-dashboard-tls </code></pre> <p><img alt="" src="https://bed01.oss-cn-hangzhou.aliyuncs.com/study/kubernetes/f028/010.png" /></p> <h4>创建ingress策略</h4> <pre><code>[root@master01 ~]# cd /root/dashboard/ [root@master01 dashboard]# vi dashboard-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kubernetes-dashboard-ingress namespace: kubernetes-dashboard annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/ssl-passthrough: "true" nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/ssl-redirect: "true" #nginx.ingress.kubernetes.io/secure-backends: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingress.kubernetes.io/proxy-connect-timeout: "600" nginx.ingress.kubernetes.io/proxy-read-timeout: "600" nginx.ingress.kubernetes.io/proxy-send-timeout: "600" nginx.ingress.kubernetes.io/configuration-snippet: | proxy_ssl_session_reuse off; spec: rules: - host: kubernetes.linuxsb.com http: paths: - path: / pathType: Prefix backend: service: name: kubernetes-dashboard port: number: 443 tls: - hosts: - kubernetes.linuxsb.com secretName: kubernetes-dashboard-tls </code></pre> <pre><code>[root@master01 dashboard]# kubectl apply -f dashboard-ingress.yaml [root@master01 dashboard]# kubectl -n kubernetes-dashboard get ingress </code></pre> <p><img alt="" src="https://bed01.oss-cn-hangzhou.aliyuncs.com/study/kubernetes/f028/011.png" /></p> <h3>访问dashboard</h3> <h4>导入证书</h4> <p>将kubernetes.linuxsb.com证书导入浏览器,并设置为信任,导入操作略。</p> <h4>创建kubeconfig文件</h4> <p>使用token相对复杂,可将token添加至kubeconfig文件中,使用KubeConfig文件访问dashboard。</p> <pre><code>[root@master01 dashboard]# ADMIN_SECRET=$(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') [root@master01 dashboard]# DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kubernetes-dashboard ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}') [root@master01 dashboard]# kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/pki/ca.crt \ --embed-certs=true \ --server=172.24.8.254:16443 \ --kubeconfig=ucloud-ngkek8s-dashboard-admin.kubeconfig # 设置集群参数 [root@master01 dashboard]# kubectl config set-credentials dashboard_user \ --token=${DASHBOARD_LOGIN_TOKEN} \ --kubeconfig=ucloud-ngkek8s-dashboard-admin.kubeconfig # 设置客户端认证参数,使用上面创建的 Token [root@master01 dashboard]# kubectl config set-context default \ --cluster=kubernetes \ --user=dashboard_user \ --kubeconfig=ucloud-ngkek8s-dashboard-admin.kubeconfig # 设置上下文参数 [root@master01 dashboard]# kubectl config use-context default --kubeconfig=ucloud-ngkek8s-dashboard-admin.kubeconfig # 设置默认上下文 </code></pre> <p>将ucloud-ngkek8s-dashboard-admin.kubeconfig文件导入,以便于浏览器使用该文件登录。</p> <h4>测试访问dashboard</h4> <p>本实验采用ingress所暴露的域名:<a href="https://kubernetes.linuxsb.xn--com-vb3f670azq3do5o">https://kubernetes.linuxsb.com方式访问</a>。使用ucloud-ngkek8s-dashboard-admin.kubeconfig文件访问。</p> <p><img alt="" src="https://bed01.oss-cn-hangzhou.aliyuncs.com/study/kubernetes/f028/012.png" /></p> <p><em><strong>提示:<br> 更多dashboard访问方式及认证可参考<a href="https://www.cnblogs.com/itzgr/p/11082342.html">附004.Kubernetes Dashboard简介及使用</a> 。<br>dashboard登录整个流程可参考:<a href="https://www.cnadn.net/post/2613.html">https://www.cnadn.net/post/2613.html</a></strong></em></p> <h3>Longhorn存储部署</h3> <h4>Longhorn概述</h4> <p>Longhorn是用于Kubernetes的开源分布式块存储系统。 <em><strong>提示:更多介绍参考:<a href="https://github.com/longhorn/longhorn%E3%80%82">https://github.com/longhorn/longhorn。</a></strong></em></p> <h4>Longhorn部署</h4> <pre><code>[root@master01 ~]# source environment.sh [root@master01 ~]# for all_ip in ${ALL_IPS[@]} do echo ">>> ${all_ip}" ssh root@${all_ip} "yum -y install iscsi-initiator-utils &" done </code></pre> <p><em><strong>提示:所有节点都需要安装。</strong></em></p> <pre><code>[root@master01 ~]# mkdir longhorn [root@master01 ~]# cd longhorn/ [root@master01 longhorn]# wget \ https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml </code></pre> <pre><code>[root@master01 longhorn]# vi longhorn.yaml #…… …… kind: DaemonSet …… imagePullPolicy: IfNotPresent …… #…… </code></pre> <pre><code>[root@master01 longhorn]# kubectl apply -f longhorn.yaml [root@master01 longhorn]# kubectl -n longhorn-system get pods -o wide </code></pre> <p><img alt="" src="https://bed01.oss-cn-hangzhou.aliyuncs.com/study/kubernetes/f028/013.png" /></p> <p><em><strong>提示:若部署异常可删除重建,若出现无法删除namespace,可通过如下操作进行删除:</strong></em></p> <pre><code>wget https://github.com/longhorn/longhorn/blob/master/uninstall/uninstall.yaml rm -rf /var/lib/longhorn/ kubectl apply -f uninstall.yaml kubectl delete -f longhorn.yaml </code></pre> <h4>动态sc创建</h4> <p><em><strong>提示:默认longhorn部署完成已创建一个sc,也可通过如下手动编写yaml创建。</strong></em></p> <pre><code> [root@master01 longhorn]# kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE …… longhorn driver.longhorn.io Delete Immediate true 15m </code></pre> <pre><code>[root@master01 longhorn]# vi longhornsc.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: longhornsc provisioner: rancher.io/longhorn parameters: numberOfReplicas: "3" staleReplicaTimeout: "30" fromBackup: "" </code></pre> <p><code>[root@master01 longhorn]# kubectl create -f longhornsc.yaml</code></p> <h4>测试PV及PVC</h4> <p>
[root@master01 longhorn]# vi longhornpod.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: longhorn-pvc
spec:
accessModes:
– ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 2Gi

Original: https://www.cnblogs.com/itzgr/p/14173665.html
Author: 木二
Title: 附028.Kubernetes_v1.20.0高可用部署架构二

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607233/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JAVA环境变量配置

    java环境配置 下载jdk地址如下: http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载安…

    Linux 2023年6月7日
    0120
  • Redis安装及HA(High Availability)配置

    Redis是一种内存数据库,以KEY-VALUE(即键值对)的形式存储数据。这篇文章主要介绍的是Redis安装及配置,所以不对Redis本身作详细介绍了。 下 载: 解 压: 以r…

    Linux 2023年5月28日
    093
  • win11下配置vue3版本

    安装node.js PS:全局需要使用管理员权限打开CMD** 下载nodejs的地址 选择左边就好 下载安装后,选择自己需要安装的盘符,即可,不再叙述。 打开CMD查看node是…

    Linux 2023年6月14日
    0107
  • 安卓投屏助手(ARDC)最新版

    近几年安卓多屏协同非常火爆,以华为小米为首的各大手机厂商都推出了各自的多屏协同软件,打破手机、平板和VR等安卓设备与电脑的边界,通过多屏融合提高办公的生产力。国内安卓投屏软件有To…

    Linux 2023年6月7日
    0330
  • Mac Mini 安装Ubuntu20.04 KVM

    在一台 Mac Mini mid 2011上安装Ubuntu20.04并配置KVM环境, 过程也适用于其他版本的Mac主机. I5 2415, 内存8G*2, 硬盘 SSD 500…

    Linux 2023年5月27日
    0110
  • [ Skill ] 如何获取库中的 top cell

    https://www.cnblogs.com/yeungchie/ top cell 的一个特点就是没有被其他的单元所调用,下面举例获取某个库中的 top cell。 1. 获取…

    Linux 2023年6月7日
    0104
  • Docker 安装 Redis

    docker 启动 redis 命令 docker run -p 6379:6379 –name redis -v /usr/local/docker/redis.conf:/e…

    Linux 2023年5月28日
    0101
  • 目录遍历漏洞

    一.目录遍历漏洞原理目录遍历(路径遍历)是由于Web服务器或者Web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器…

    Linux 2023年6月14日
    0106
  • 爱前端公开课学习笔记——JS03 运算符

    运算符的概述和加减运算课程丢失 乘法* 除法/ 直接在控制台中演示 主要是不要省略乘号 字符串不能进行乘除法运算 布尔型可以进行乘除法运算 false: 0 true: 1 乘除法…

    Linux 2023年6月14日
    088
  • 字符串

    20、【剑指Offer学习】【面试题20:表示数值的字符串】 38、【剑指Offer学习】【面试题38:字符串的排列】 46、【剑指Offer学习】【面试题46:把数字翻译成字符串…

    Linux 2023年6月13日
    0120
  • FinalShell—一体化服务器管理软件(SSH客户端)

    下面附上一些截图和官方连接: 官网:http://www.hostbuf.com/ FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运…

    Linux 2023年5月28日
    086
  • WEB自动化-02-Cypress 安装

    2 Cypress 安装 2.1 安装要求 2.1.1 系统要求 在操作系统满足以下要求时,才能进行安装,具体要求如下所示: MacOS 10.9+(仅支持64位版本) Linux…

    Linux 2023年6月7日
    0109
  • Linux文本处理相关命令

    一、文本处理命令 Linux sort命令用于将文本文件内容加以排序。 sort 可针对文本文件的内容,以行为单位来排序。 语法格式如下: sort [参数]…[文件] 相关参…

    Linux 2023年5月27日
    0100
  • 搭建redis集群

    这里总结性给出搭建步骤: 1、 至少6个节点,三主三从 2、 编译redis源码 3、放置集群的配置文件redis.conf 创建工作目录: 每个文件夹下新建redis.conf …

    Linux 2023年5月28日
    098
  • MySQL8主从复制

    环境介绍 主服务器配置 修改my.cnf配置文件 在/etc/my.cnf 添加如下信息 登录主服务器给从服务器授权 登陆mysql 创建user授权 备注:rootslave就是…

    Linux 2023年6月14日
    0146
  • Spring事务(二)-事务传播行为

    在Spring里,一个事务方法被另外一个事务方法调用时,两个方法的事务应该如何进行,说白话一点,就是说当出现异常需要回滚时,各个方法的数据操作是否要全部回滚,事务传播行为就是决定了…

    Linux 2023年6月6日
    089
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球