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

2023-10-30

目录

第一章.实验架构需求

 第二章.实验环境准备

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.节点准备

master 192.168.233.100 docker、kubeadm、kubelet、kubectl、flannel

node01

192.168.233.111 docker、kubeadm、kubelet、kubectl、flannel
node02 192.168.233.199 docker、kubeadm、kubelet、kubectl、flannel

lb01

192.168.233.69 nginx,keepalived
lb02 192.168.233.177 nginx,keepalived
vip,iptables

192.168.10.100,192.168.233.171,

12.0.0.1

iptables,ens33,ens36
client 12.0.0.12 ens33

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 进行访问

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K8S内容分发网络之集群,nginx,负载均衡,防火墙 的相关文章

随机推荐

  • 【C++】到底什么是链接,它起到了什么作用

    当程序包含了数百万行的代码 以至于人们无法维护这个程序了 于是人们开始寻找新的方法 迫切地希望将程序源代码分散到多个文件中 一个文件一个模块 以便更好地阅读和维护 这个时候 链接器就粉墨登场了 变量名 函数名等仅仅是地址的一种助记符 目的是
  • python里面的pip是什么意思_python中pip是什么

    python中pip是什么 pip是一个以Python计算机程序语言写成的软件包管理系统 他可以安装和管理软件包 另外不少的软件包也可以在 Python软件包索引 英语 Python Package Index 简称PyPI 中找到 命令行
  • 傅里叶描述子欧氏距离_基于旋转轮廓的点云局部浮点型和二值化特征描述(RCS)...

    作者 小毛 Date 2020 05 19 来源 基于旋转轮廓的点云局部浮点型和二值化特征描述 RCS 本次介绍一个发表于Computer Vision and Image Understanding的经典三维点云描述子RCS 论文地址 J
  • 第10节-函数三(高阶函数/匿名函数/闭包/装饰器)

    第10节 函数三 高阶函数 匿名函数 闭包 装饰器 一 高阶函数 二 匿名函数 1 过滤器 2 匿名函数 lambda函数 三 闭包 四 装饰器 一 高阶函数 满足下列特点之一的函数称之为高阶函数 特点1 接收一个或者多个函数作为参数 特点
  • node-formidable源码:原生javascript解析前端传输的FormData

    本系列文章是本人学习相关知识时所积累的笔记 以记录自己的学习历程 也为了方便回顾知识 故文章内容较为随意简练 抱着学习目的来的同学务必转移他处 以免我误人子弟 参考资料 酷勤网 在Koa和Express中 已经通过node formidab
  • css 实现三角形阴影

    平时工作中 设计给出的类似于对话框的样式 基本上都会有阴影 这个时候一般都是有两种方式实现 一是用背景图 二是用代码实现 如图样式 这里只说使用代码来实现
  • kmeans算法实现及获取anchors

    kmeans算法网上资料很多 其原理简单来说就选取k个聚类中心 然后把剩余的点归类到与其相距最近的聚类中心 是一种无监督算法 缺点和不足有两个 第一个是k需要指定 第二个是对于聚类中心种子点的选取很敏感 本文将以yolov4算法使用kmea
  • Python 基础教程——语法

    前言 Python 语言与 Perl C 和 Java 等语言有许多相似之处 但是 也存在一些差异 这次我们将来学习 Python 的基础语法 让你快速学会 Python 编程 第一个 Python 程序 交互式编程 交互式编程不需要创建脚
  • RocketMQ第四节(部署模式、监控面板等)

    1 mq的部署模式 部署方式 RocketMQ 参考官网 单机模式 抗风险能力差 单机挂机没服务 单机硬盘损坏 丢失数据 多机 多master没有Slave副本 多个master采用RAID10磁盘 不会丢失数据 但是某一个master关闭
  • Unity - BRP - PP后效导致 Camera.targetTexture 被换掉,graphicsFormat 不对问题

    文章目录 环境 目的 原因 问题 解决方法 环境 Unity 国际版2020 3 37f1 Pipeline BRP Packages Post Processing 3 0 3 目的 BRP 虽然是 官方放弃更新的 渲染管线 但是有些项目
  • java--基础--17.8--线程--wait方法与sleep方法区别

    java 基础 17 8 线程 wait方法与sleep方法区别 1 介绍 wait 线程间的通讯的问题 需要等待别的线程唤醒 sleep 自己控制线程的运行状态 隔了一段时间自动醒过来 wait 方法释放了锁 sleep 方法没有释放锁
  • 高斯分布(正态分布)详解

    高斯分布 一 概念 二 详解和例子说明 三 判断数据是否服从高斯分布 四 高斯分布实际应用 一 概念 定义 随机变量X服从一个数学期望 mu 方差为 sigma 的高斯分布 又名正态分布 当 0 1时的正
  • c, cs, vala 性能简单测试

    分别用c cs 和 vala 完成同样的运算 Code include
  • matlab sum函数_Matlab: 如何对矩阵的部分行/列求和

    Matlab里的sum函数可以用于求和 先简单来介绍一下sum函数 对一个矩阵A而言 1 sum A all 对矩阵A的所有元素进行求和 返回的是一个标量 2 sum A 1 对矩阵A的每一列进行求和 返回的是一个行向量 3 sum A 2
  • 哈工大2020软件构造Lab4实验报告

    为了鄙视代写 抄袭 伸手党 删除了一些 容易抄袭 的部分 有问题 询问省略部分 欢迎QQ交流 本项目于5 19日实验课完成 该更新的 更新完成 如果有所参考 请点点关注 点点赞GitHub Follow一下谢谢 2020春计算机学院 软件构
  • Python安装教程

    本文主要介绍Windows下Python的安装步骤 1 打开官网www python org 选择Downloads 进入下载界面 2 选择需要下载的Python版本号 点击Download 我选择的Python版本为3 9 6 3 点击D
  • 计算机考研复试操作系统题库

    文章目录 1 什么是操作系统 操作系统的主要功能是 它的主要特征是什么 重点 2 进程与线程的关系以及区别 重点 3 Windows下的内存是如何管理的 简单了解即可 4 中断和轮询的特点 5 什么是临界区 如何解决冲突 什么叫临界资源 6
  • JDBC基础

    1 JDBC概述 在开发中我们使用的是java语言 那么势必要通过java语言操作数据库中的数据 1 1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称 Java DataBase Connectivity
  • 踏浪点神:新手该如何避免频繁重仓交易?

    期货市场中最忌讳的就是让情绪影响交易 但很多人却又很难避免这一点 其中表现最为突出的就是频繁操作了 自信地以为 多劳多得 近乎疯狂地买卖 满脑子的愤怒都急切地想要通过 自杀 的方式得以宣泄 这就是所谓的 交易失控 大多数人在事后冷静下来了都
  • K8S内容分发网络之集群,nginx,负载均衡,防火墙

    目录 第一章 实验架构需求 第二章 实验环境准备 2 1 节点准备 2 2 环境准备 2 3 在master node01 node02上操作安装docker 2 4 所有节点安装kubeadm kubelet和kubectl 2 5 部署