K8S内容分发网络之集群,nginx,负载均衡,防火墙

news2024/11/24 16:44:35

目录

第一章.实验架构需求

 第二章.实验环境准备

2.1.节点准备

2.2.环境准备

2.3.在master,node01,node02上操作安装docker

2.4.所有节点安装kubeadm,kubelet和kubectl

2.5.部署K8S集群

2.6.在master节点操作

2.7.所有节点部署网络插件flannel

第三章.创建两个自主式Pod资源

3.1.生成nginx的pod模板文件

3.2.两个node节点的存储卷,写入不同的html文件内容,验证访问网页

第四章.创建service资源

4.1.编写service对应的yaml文件  

4.2.查看service资源

4.3.测试使用nodeIP:nodePort访问nginx网页  

第五章.搭建负载均衡层

5.1.两台负载均衡器配置nginx

5.2.两台负载均衡器配置keepalived

5.3.关闭主调度器的nginx服务,模拟故障,测试keepalived

第六章.配置防火墙服务器

6.1.两台负载均衡器,将网关地址修改为防火墙服务器的内网IP地址  

6.2.配置iptables策略


第一章.实验架构需求

(1)Kubernetes 区域可采用 Kubeadm 方式进行安装。

(2)要求在 Kubernetes 环境中,通过yaml文件的方式,创建2个Nginx Pod分别放置在两个不同的节点上,Pod使用hostPath类型的存储卷挂载,节点本地目录共享使用 /data,2个Pod副本测试页面二者要不同,以做区分,测试页面可自己定义。

(3)编写service对应的yaml文件,使用NodePort类型和TCP 30000端口将Nginx服务发布出去。

(4)负载均衡区域配置Keepalived+Nginx,实现负载均衡高可用,通过VIP 192.168.10.100和自定义的端口号即可访问K8S发布出来的服务。

(5)iptables防火墙服务器,设置双网卡,并且配置SNAT和DNAT转换实现外网客户端可以通过12.0.0.1访问内网的Web服务。

 第二章.实验环境准备

2.1.节点准备

master192.168.233.100docker、kubeadm、kubelet、kubectl、flannel

node01

192.168.233.111docker、kubeadm、kubelet、kubectl、flannel
node02192.168.233.199docker、kubeadm、kubelet、kubectl、flannel

lb01

192.168.233.69nginx,keepalived
lb02192.168.233.177nginx,keepalived
vip,iptables

192.168.10.100,192.168.233.171,

12.0.0.1

iptables,ens33,ens36
client12.0.0.12ens33

2.2.环境准备

关闭防火墙


systemctl stop firewalld


systemctl disable firewalld


iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
 

#关闭selinux


setenforce 0


sed -i 's/enforcing/disabled/' /etc/selinux/config

关闭swap


swapoff -a


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

根据规划设置主机名


hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

hostnamectl set-hostname lb01

hostnamectl set-hostname lb02


#这里设置MASTER和node内存4G起步,2核2处理器起步,最优8G

在master添加hosts

cat >> /etc/hosts << EOF
192.168.233.100 master01
192.168.233.111 node01
192.168.233.199 node02

192.168.233.69 lb01

192.168.233.177 lb02
EOF

调整内核参数


cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF

sysctl --system

时间同步


yum install ntpdate -y


ntpdate time.windows.com

2.3.在master,node01,node02上操作安装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
 

mkdir /etc/docker

cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。  

#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。  ​  

#重新加载配置,将docker设置为开机自启

#查看Cgroup引擎是否已变更  

docker info | grep "Cgroup Driver"  

Cgroup Driver: systemd

2.4.所有节点安装kubeadm,kubelet和kubectl

定义kubernetes源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
 

yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11

开机自启kubelet
systemctl enable kubelet.service

 #K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

2.5.部署K8S集群

查看初始化需要的镜像

kubeadm config images list

在 master 节点上传 v1.20.11.zip 压缩包(压缩包中包含所需的镜像文件)至 /opt 目录 

 cd /opt/  

mkdir /opt/k8s  

unzip v1.20.11.zip -d /opt/k8s                            #解压  

cd /opt/k8s/v1.20.11  

for i in $(ls *.tar); do docker load -i $i; done               #载入镜像,将镜像文件导入到镜像库中 docker images                                        #查看本地镜像

复制镜像和脚本到 node 节点,并在 node 节点上执行脚本加载镜像文件

scp -r /opt/k8s root@node01:/opt  

scp -r /opt/k8s root@node02:/opt

cd /opt/k8s/v1.20.11  

for i in $(ls *.tar); do docker load -i $i; done

初始化kubeadm

#master节点,通过如下指令创建默认的kubeadm-config.yaml文件  

kubeadm config print init-defaults > /opt/kubeadm-config.yaml

修改文件  

cd /opt/  

vim kubeadm-config.yaml

.......

11 localAPIEndpoint:  

12   advertiseAddress: 192.168.233.100     #指定master节点的IP地址  

13   bindPort: 6443

.................

34 kubernetesVersion: v1.20.11    #指定kubernetes版本号  

35 networking:  

36   dnsDomain: cluster.local  

38   serviceSubnet: 10.96.0.0/16    #指定service网段  

37   podSubnet: "10.244.0.0/16" #指定pod网段,10.244.0.0/16用于匹配flannel默认网段  

39 scheduler: {}

#末尾再添加以下内容

---  

apiVersion: kubeproxy.config.k8s.io/v1alpha1  

kind: KubeProxyConfiguration  

mode: ipvs                                                    #把默认的kube-proxy调度方式改为ipvs模式

2.6.在master节点操作

在master节点操作,初始化kubeadm,搭建k8s控制平面节点。结尾会有几条命令分别在master和node上执行

kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log

#--experimental-upload-certs 参数可以在后续执行加入节点时自动分发证书文件,K8S V1.16版本开始替换为 --upload-certs  

#tee kubeadm-init.log 用以输出日志

#master节点执行以下命令:  

#kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 “$HOME/.kube/config” 的路径进行加载。

mkdir -p $HOME/.kube  

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  

sudo chown $(id -u):$(id -g) $HOME/.kube/config

#两个node节点执行以下命令,加入集群:  

kubeadm join 192.168.233.100:6443 --token abcdef.0123456789abcdef \      --discovery-token-ca-cert-hash sha256:b48d7bec33150c0f58bd04c17a6b994900fdef116b6ef355282909330b3a23cc  ​

#查看 kubeadm-init 日志  

less kubeadm-init.log

#kubernetes配置文件目录

ls /etc/kubernetes/

#存放ca等证书和密码的目录  

ls /etc/kubernetes/pki

master节点,修改yaml文件,进行健康检查

#初始化后,kubeadm本身没有健康检查方法,需要修改两个yaml文件,之后重启kubelet

kubectl get cs   #查看集群健康状态,有2个组件不健康,需要修改对应组件的yaml文件

 #如果 kubectl get cs 发现集群不健康,更改以下两个yaml文件  

vim /etc/kubernetes/manifests/kube-scheduler.yaml

......  

16     - --bind-address=192.168.233.100   #修改成k8s的控制节点master的ip  

......  

19     #- --port=0     # 搜索port=0,把这一行注释掉  

......  

24       httpGet:  

25         host: 192.168.233.100   #修改成k8s的控制节点master的ip  

......  

38       httpGet:  

39         host: 192.168.233.100   #修改成k8s的控制节点master的ip

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

17     - --bind-address=192.168.233.100           #修改成k8s的控制节点master的ip  

......  

26     #- --port=0                                            # 搜索port=0,把这一行注释掉  

......  

36       httpGet:  

37         host: 192.168.233.100                                #修改成k8s的控制节点master的ip  

......  

50       httpGet:  

51         host: 192.168.233.100                             #修改成k8s的控制节点master的ip

 #重启

kubelet  systemctl restart kubelet

#查看集群健康状态  

kubectl get cs

 

2.7.所有节点部署网络插件flannel

 #在master节点查看所有节点状态,由于网络插件还没有部署,节点没有准备就绪,所以显示NotReady

 kubectl get nodes

NAME     STATUS     ROLES                 AGE     VERSION  master   NotReady   control-plane,master   49m     v1.20.11  node01   NotReady   <none>                 11m     v1.20.11  node02   NotReady   <none>                 4m41s   v1.20.11

所有节点部署网络插件flannel

(1)方法一:  #所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件。

 #kube-flannel.yml 文件的下载地址https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

 cd /opt  

docker load -i flannel.tar                       #所有节点导入镜像

#在 master 节点创建 flannel 资源  

kubectl apply -f kube-flannel.yml

##(2)方法二:  kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#现在在master节点查看节点状态,都已是Ready状态  

kubectl get nodes  

NAME     STATUS   ROLES                 AGE   VERSION  

master   Ready   control-plane,master   136m   v1.20.11  

node01   Ready   <none>                 98m   v1.20.11  

node02   Ready   <none>                 92m   v1.20.11

 

#查看各组件,都是Running状态  

kubectl get pods -n kube-system  

NAME                             READY   STATUS   RESTARTS   AGE  

coredns-74ff55c5b-788pc          1/1     Running   0         137m  

coredns-74ff55c5b-9hfnv          1/1     Running   0         137m  

etcd-master                      1/1     Running   0         137m  

kube-apiserver-master            1/1     Running   0         137m  

kube-controller-manager-master   1/1     Running   0         45m  

kube-flannel-ds-8ck6r            1/1     Running   0         3m10s  

kube-flannel-ds-9svrq            1/1     Running   0         3m10s  

kube-flannel-ds-fxpwt            1/1     Running   0         3m10s  

kube-proxy-22mgq                 1/1     Running   0         137m  

kube-proxy-2lx25                 1/1     Running   0         93m  

kube-proxy-s5s75                 1/1     Running   0         99m  

kube-scheduler-master            1/1     Running   0         62m

 

第三章.创建两个自主式Pod资源

要求在 Kubernetes 环境中,通过yaml文件的方式,创建2个Nginx Pod分别放置在两个不同的节点上,Pod使用hostPath类型的存储卷挂载,节点本地目录共享使用 /data,2个Pod副本测试页面二者要不同,以做区分,测试页面可自己定义。

3.1.生成nginx的pod模板文件

kubectl run mynginx --image=nginx:1.14 --port=80 --dry-run=client -o yaml > mynginx.yaml

修改模板文件

vim mynginx.yaml

---  

apiVersion: v1  

kind: Pod  

metadata:  

labels:    

app: yuji-nginx                                       #pod的标签  

name: yuji-nginx01  

spec:  

nodeName: node01       #指定该pod调度到node01节点  

containers:    

- image: nginx:1.14    

name: mynginx    

ports:    

- containerPort: 80                               #定义容器的端口    

volumeMounts:                                    #挂载存储卷      

- name: page01                         #名称需要与下方定义的存储卷的名称一致      

mountPath: /usr/share/nginx/html        #容器中的挂载点,设置为nginx服务的网页根目录       readOnly: false                                 #可读可写  

volumes:                                      #定义一个存储卷    

- name: page01                         #存储卷的名称    

hostPath:                          #存储卷的类型为 hostPath      

path: /data                           #node节点的共享目录      

type: DirectoryOrCreate          #该类型表示如果共享目录不存在,则系统会自动创建该目录  

---  

apiVersion: v1  

kind: Pod  

metadata:  

labels:    

app: yuji-nginx                                  #pod的标签  

name: yuji-nginx02  

spec:  

nodeName: node02                             #指定该pod调度到node02节点  

containers:    

- name: mynginx    

image: nginx:1.14    

ports:    

 - containerPort: 80                                        #定义容器的端口    

volumeMounts:                                         #挂载存储卷      

- name: page02                           #名称需要与下方定义的存储卷的名称一致      

mountPath: /usr/share/nginx/html                              #容器中的挂载点      

readOnly: false  

volumes:                                               #定义一个存储卷  

 - name: page02                               #存储卷的名称    

hostPath:                                      #存储卷类型为 hostPath      

path: /data                     #node节点的共享目录      

type: DirectoryOrCreate       #该类型表示如果共享目录不存在,则系统会自动创建该目录

---
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: mynginx
  name: cxk-nginx01
spec:
  nodeName: node01
  containers:
  - image: nginx:1.14
    name: mynginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: page01
      mountPath: /usr/share/nginx/html
      readOnly: false
  volumes:
  - name: page01
    hostPath:
      path: /data

---
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: mynginx
  name: cxk-nginx02
spec:
  nodeName: node02
  containers:
  - image: nginx:1.14
    name: mynginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: page02
      mountPath: /usr/share/nginx/html
      readOnly: false
  volumes:
  - name: page02
    hostPath:
      path: /data

 

 

#使用yaml文件创建自主式Pod资源  

kubectl apply -f mynginx.yaml

 #查看创建的两个pod,被调度到了不同的node节点  

kubectl get pods -o wide  

NAME           READY   STATUS   RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES  

yuji-nginx01   1/1     Running   0         9m16s   10.244.1.2   node01   <none>           <none>  yuji-nginx02   1/1     Running   0         9m16s   10.244.2.4   node02   <none>           <none>

 

3.2.两个node节点的存储卷,写入不同的html文件内容,验证访问网页

 #node01节点  

echo "this is node01" > /data/index.html  ​  

#node02节点  

echo "this is node02 ~~" > /data/index.html

curl 10.244.1.5                        #访问Node01节点的Pod的IP

 curl 10.244.2.3                         访问Node02节点的Pod的IP

 

第四章.创建service资源

编写service对应的yaml文件,使用NodePort类型和TCP 30000端口将Nginx服务发布出去。

4.1.编写service对应的yaml文件  

vim myservice.yaml

apiVersion: v1  

kind: Service  

metadata:    

name: yuji-nginx-svc    

namespace: default    

spec:  

type: NodePort                       #service类型设置为NodePort  

ports:    

- port: 80                            #service使用的端口号,ClusterIP后面跟的端口号。    

targetPort: 80                           #需要转发到的后端Pod的端口号    

nodePort: 30000             #指定映射到物理机的端口号,k8s集群外部可以使用nodeIP:nodePort访问service  

selector:                

app: yuji-nginx                    #标签选择器要和上一步创建的pod的标签保持一致

apiVersion: v1
kind: Service
metadata:
  name: cxk-nginx
  namespace: default
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30000
  selector:
    app: mynginx

 

 #创建service资源      

kubectl apply -f myservice.yaml

4.2.查看service资源

kubectl get svc  

NAME             TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)       AGE  

kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP       27h  

yuji-nginx-svc   NodePort    10.96.100.164   <none>        80:30000/TCP   76s

 

#查看service资源的详细信息  

kubectl describe svc yuji-nginx-svc

 

4.3.测试使用nodeIP:nodePort访问nginx网页  

curl 192.168.233.111:30000                   #node01  ​  

curl 192.168.233.199:30000                  #node02

 

第五章.搭建负载均衡层

负载均衡区域配置Keepalived+Nginx,实现负载均衡高可用,通过VIP 192.168.10.100和自定义的端口号即可访问K8S发布出来的服务。

  • lb01:192.168.233.69
  • lb02:192.168.233.177
  • VIP:192.168.233.11

5.1.两台负载均衡器配置nginx

关闭防火墙和selinux  

systemctl stop firewalld  

systemctl disable firewalld  

setenforce 0  

sed -i 's/enforcing/disabled/' /etc/selinux/config

设置主机名  

hostnamectl set-hostname lb01  

su  

hostnamectl set-hostname lb02  

su

#配置nginx的官方在线yum源

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum install nginx -y  ​

#修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台node的节点ip和30000端口  

vim /etc/nginx/nginx.conf

 

events {
    worker_connections  1024;
}

#在http块上方,添加stream块

stream {
    log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';

    access_log  /var/log/nginx/k8s-access.log  main;

    upstream k8s-apiserver {
        server 192.168.233.111:30000;                          #node01+端口
        server 192.168.233.199:30000;                         #node02+端口
    }
    server {
        listen 3030;                             #自定义端口
        proxy_pass k8s-apiserver;
    }
}

http {

.......

#include /etc/nginx/conf.d/*.conf;   #建议将这一行注释掉,否则会同时加载/etc/nginx/conf.d/default.conf文件中的内容,nginx会同时监听80端口。  

}

 

#检查配置文件语法是否正确  

nginx -t

 

启动nginx服务,查看到已监听3344端口

systemctl start nginx  

systemctl enable nginx  

netstat -natp | grep nginx

 

 

5.2.两台负载均衡器配置keepalived

#安装keepalived服务  

yum install keepalived -y

#修改keepalived配置文件  

vim /etc/keepalived/keepalived.conf

 

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_MASTER
}
vrrp_script check_nginx {
    script "/etc/nginx/check_nginx.sh"
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.233.11
    }
    track_script {
        check_nginx
    }
}

 

#主调度器lb01创建nginx状态检查脚本  

vim /etc/nginx/check_nginx.sh

 

#!/bin/bash
#egrep -cv "grep|"用于过滤掉包含grep或者表示的当前Shell进程ID,即脚本运行的当前进程ID号
count=$(ps -ef | grep nginx | egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then
    systemctl stop keepalived
fi

 

chmod +x /etc/nginx/check_nginx.sh                   #为脚本增加执行权限

#启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务,否则keepalived检测到nginx没有启动,会杀死自己)  

systemctl start keepalived  

systemctl enable keepalived  

ip a                                                       #查看主节点的VIP是否生成

 

 

#测试使用VIP:3344访问web网页  

curl 192.168.233.11:3030

 

5.3.关闭主调度器的nginx服务,模拟故障,测试keepalived

 #关闭主调度器lb01的Nginx服务,模拟宕机,观察VIP是否漂移到备节点  

systemctl stop nginx  

ip a  

systemctl status keepalived   #此时keepalived被脚本杀掉了,这里不模拟了,上面vip在node02就是结果

#备节点查看是否生成了VIP  

ip addr                                                 #此时VIP漂移到备节点lb02

#恢复主节点  

systemctl start nginx        

#先启动nginx  

systemctl start keepalived    

#再启动keepalived

ip a

 

第六章.配置防火墙服务器

iptables防火墙服务器,设置双网卡,并且配置SNAT和DNAT转换实现外网客户端可以通过12.0.0.1访问内网的Web服务。

  • 内网网卡ens33:192.168.233.1
  • 外网网卡ens36:12.0.0.1

 

 

6.1.两台负载均衡器,将网关地址修改为防火墙服务器的内网IP地址  

vim /etc/sysconfig/network-scripts/ifcfg-ens33  

GATEWAY="192.168.233.1"  ​

 

systemctl restart network                             #重启网络  

systemctl restart keepalived             #如果VIP丢失,需要重启一下keepalived

配置防火墙服务器  

#-------------关闭防火墙和selinux-------------  

systemctl stop firewalld  

systemctl disable firewalld  

setenforce 0  

sed -i 's/enforcing/disabled/' /etc/selinux/config

开启路由转发功能

vim /etc/sysctl.conf  net.ipv4.ip_forward = 1     //在文件中增加这一行,开启路由转发功能

sysctl -p   //加载修改后的配置

6.2.配置iptables策略

#先将原有的规则清除  

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

#设置SNAT服务,解析源地址。修改nat表中的POSTROUTING链。  

#将源地址192.168.233.11转换为为12.0.0.1  

iptables -t nat -A POSTROUTING -s 192.168.233.0/24 -o ens36 -j SNAT --to 12.0.0.1

 

#-t nat                 //指定nat表  

#-A POSTROUTING         //在POSTROUTING链中添加规则   

#-s 192.168.233.11/24   //数据包的源地址  

#-o ens36               //出站网卡  

#-j SNAT --to 12.0.0.1   //使用SNAT服务,将源地址转换成公网IP地址。

注:这里需要把lb01,lb02的网卡地址改成防火墙服务器的IP地址192.168.233.171

iptables这里的网卡需要加物理网卡,需要修改ens36的地址12.0.0.1,注释掉ens33,ens36的网关。

 

 

#设置DNAT服务,解析目的地址。修改nat表中的PRETROUTING链。  

#将目的地址12.0.0.1:3030 转换成 192.168.233.11:3030 

iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.1 -p tcp --dport 3030 -j DNAT --to 192.168.233.11:3030   

#-A PREROUTING               //在PREROUTING链中添加规则          

#-i ens36             //入站网卡   

#-d 12.0.0.254         //数据包的目的地址   

#-p tcp --dport 3030  //数据包的目的端口   

#-j DNAT --to 192.168.233.11:3030   //使用DNAT功能,将目的地址和端口转换成192.168.233.11:3030

iptables -t nat -nL                                     #查看策略

 

##客户端修改网关配置文件,测试访问内网的Web服务  

客户端IP地址:12.0.0.12,将网关地址设置为防火墙服务器的外网网卡地址:12.0.0.1  

 

浏览器输入 http://12.0.0.1:3030 进行访问

 

 

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

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

相关文章

小白windows安装python(图文详解)

以下是在 Windows 操作系统上安装 Python 的详细步骤&#xff1a; 打开浏览器&#xff0c;进入 Python 官网&#xff08;https://www.python.org/&#xff09;。 点击“Downloads”&#xff0c;然后选择适合您的操作系统的 Python 版本。例如&#xff0c;如果您的操作系统是…

“Shell“firewall防火墙

文章目录 一.Firewalld防火墙1.1firewalld概述1.2Firewalld和iptables的关系1.3Firewalld和iptables的区别 二.Firewalld网络区域2.1区域介绍&#xff1a;2.2firewalld 区域的概念:2.3Firewalld数据处理流程2.4Firewalld检查数据包的源地址的规则&#xff1a; 三.Firewalld防火…

05 Android开机启动之SystemServer

Android开机启动之SystemServer(SS) 一、梳理SystemServer启动流程 从上面整个Android开机启动思维导图(android 5.0的启动组成图)中可以看到: SystemServer是从Zygote中启动的。 开机->bootloader->kernel->init->zygote->SystemServer 二、SystemServe…

【嵌入式烧录/刷写文件】-1.5-Fill填充Motorola S-record(S19/SREC/mot/SX)文件

案例背景(共8页精讲)&#xff1a;该篇将告诉你&#xff0c;如何对一个S19文件进行填充&#xff1a; 对“起始地址”和“结束地址”内的非连续的Block块&#xff0c;进行填充&#xff1b;自定义填充范围。 目录 1 为什么要“Fill填充” 2 使用Vector HexView工具“填充”S19…

阿里,变“小”了,也变强了

文 | 螳螂观察 作者 | 青月 小公司总想做大&#xff0c;但在如今快速变换的科技浪潮下&#xff0c;一些大企业却想“变小”。 3月28日&#xff0c;阿里巴巴宣布启动“16N”组织变革&#xff0c;这意味着未来具备条件的业务集团和业务公司&#xff0c;都可以独立融资和独立上…

一文带你了解MySQL之InnoDB 统计数据是如何收集的

前言 本文章收录在MySQL性能优化原理实战专栏&#xff0c;点击此处查看更多优质内容。 我们前边唠叨查询成本的时候经常用到一些统计数据&#xff0c;比如通过show table status可以看到关于表的统计数据&#xff0c;通过show index可以看到关于索引的统计数据&#xff0c;那…

分享国内可用的免费ChatGPT网站_测评by杂草小生

参考的文章1&#xff1a;ChatGPT套壳网站汇总-5月21日更新_QQVQQ...的博客-CSDN博客 参考文章2&#xff1a;分享一个国内可用的免费ChatGPT网站_Aaron_Plus的博客-CSDN博客 ChatGPT是基于自然语言处理技术的聊天机器人&#xff0c;可以进行对话和提供相关信息。由于chatGPT不…

导入/导出 Postcat 格式文件,打通数据不再难

导入 Postcat 插件。 使用 导入功能有多个入口&#xff0c;你可以在 API 分组处点击加号导入 API&#xff1a; 也可以在点击设置&#xff0c;然后选择导入选项 导出 Postcat 插件 支持导出 Postcat JSON 文件。 使用 进入空间页面&#xff0c;可以看到导出功能&#xff0c;点…

XXL-SSO简要说明

一、介绍 XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。 拥有”轻量级、分布式、跨域、CookieToken均支持、WebAPP均支持”等特性。现已开放源代码&#xff0c;开箱即用。 官方文档 二、集成 2.1、源码下载 下载地址 2.2、代码结构…

剪辑中如何保持画面连贯性,视频剪辑用什么软件比较好?

随着各种视频软件和平台的流行&#xff0c;越来越多的人更喜欢观看视频&#xff0c;还有很多人出于兴趣和爱好&#xff0c;想要制作自己的视频&#xff0c;那要如何剪辑才能制作更好的视频呢&#xff1f;有什么比较靠谱的视频剪辑软件呢&#xff1f; 视频剪辑中保持画面连贯性…

Redis分布式锁及Redisson的实现原理

Redis分布式锁 一。什么是分布式锁 在讨论分布式锁之前我们回顾一下一些单机锁&#xff0c;比如synchronized、Lock 等 锁的基本特性&#xff1a; 1.互斥性&#xff1a;同一时刻只能有一个节点访问共享资源&#xff0c;比如一个代码块&#xff0c;或者同一个订单同一时刻只…

python:将遥感数据使用matplotlib库绘制成图片

作者:CSDN @ _养乐多_ 本文将介绍使用matplotlib库绘制遥感数据成图片的代码。 文章目录 一、示例代码二、更换颜色条三、自定义颜色条四、分段离散颜色设置一、示例代码 要加载本地的TIFF数据并绘制图像,你可以使用Python中的rasterio库和matplotlib库。以下是一个示例代码…

【UE4】从零开始制作战斗机(中:飞机操控逻辑)

上一篇&#xff1a; 【UE4】从零开始制作战斗机&#xff08;上&#xff1a;准备模型、定义函数和变量&#xff09;_Zhichao_97的博客-CSDN博客 效果 步骤 1. 打开“BP_Jet”&#xff0c;在事件图表中添加如下节点 由于我们希望飞机一开始就是在空中飞行&#xff0c;所以一开…

数字孪生智慧路灯可视化系统 区域控制节能增效

前言 智慧灯杆是智慧城市建设的重要组成部分&#xff0c;可以完成照明、公安、市政、气象、环保、通信等行业数据信息的采集、发布和传输。同时&#xff0c;作为5g时代车联网、云网、通信网络建设的重要组成部分&#xff0c;智慧灯杆也将得到广泛应用。 建设背景 城市路灯存…

JVM常用参数和命令行工具

JVM参数类型 一&#xff1a;标准参数 - 所有的JVM实现都必须实现这些参数的功能&#xff0c;而且向后兼容 例&#xff1a; -help-server -client-version -showversion-cp -classpath 二&#xff1a;非标准参数 -X 非标准参数&#xff08;-X&#xff09;&#xff1a…

opencv缺陷检测

随着自动化生产设备的普及&#xff0c;工业机器人在各行各业的应用也越来越广泛&#xff0c;越来越多的生产线由自动化设备取代人工操作&#xff0c;实现自动化生产。在机器人分拣过程中&#xff0c;机器人不仅可以将不同规格和质量的产品准确地放入指定的托盘中&#xff0c;而…

MySQL 事物(w字)

目录 事物 首先我们来看一个简单的问题 什么是事务 为什么会出现事务 事务的版本支持 事务提交方式 事务常见操作方式 设置隔离级别 事物操作 事物结论 事务隔离级别 理解隔离性 隔离级别 查看与设置隔离性 注意可重复读【Repeatable Read】的可能问题&#xff…

Spring事务管理 -- Spring入门保姆级教程(五)

文章目录 前言六、Spring事务1.Spring事务简介2.入门案例--模拟银行间转账业务3.开启Spring事务的一般步骤4.Spring事务角色5.spring事务属性--rollbackfor6.入门案例进阶--转账业务追加日志7. Spring事务属性--事务传播行为 总结 前言 为了巩固所学的知识&#xff0c;作者尝试…

ZIP/RAR压缩包加密原理和解密方法

ZIP/RAR压缩包加密原理和解密方法 1、压缩包的概念 一般我们看到的压缩格式有.rar&#xff0c;.zip&#xff0c;等等有许多格式但主要压缩的作用就是让某一个文件占用空间小点。比如原来是50MB,可以压缩到30多MB。 压缩包的算法&#xff1a; 有许多不同的压缩格式例如&#…

【MySQL】-【数据库的设计规范】

文章目录 为什么需要数据库设计范式范式简介范式都包括哪些键和相关属性的概念 为什么需要数据库设计 范式 范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。可以理解为&#xff0c;一张数据表的设计结构需要满足的某种设计标准的 级别 。要…