部署需求

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

(2)要求在 Kubernetes 环境中,通过yaml文件的方式,创建Deployment控制器和4个Nginx Pod副本,并进入容器中修改index.html文件内容,以做区分,页面内容可自己定义。

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

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

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

 

 

 

 

 解题思路以及部署注意点

 (1)初始化化环境,利用kubeadm搭建出一个master两个node节点的k8s集群

【云原生】kubeadm部署k8s集群_站在这别动,我去给你买橘子的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/qq_62462797/article/details/128291497?spm=1001.2014.3001.5501

 (2)搭建好一主二节点的k8s集群后,通过yaml的资源模板来创建pod和相关service资源

创建pod: 

 

 kubectl expose deployment nginx-exam   --name=exam-service --type=NodePort --dry-run=client -o yaml >nginx-svc.yaml

vim nginx.yaml

kubectl apply -f nginx.yaml

 

 

创建相关的资源:

 

#资源只要模板就行,后面可以通过编辑器进行修改
kubectl expose deployment nginx-exam --port=8000 --target-port=80 --name=exam-service --type=NodePort --dry-run=client -o yaml > nginx-svc.yaml 

vim nginx-svc.yaml

kubectl apply -f nginx-svc.yaml

 

 (3)为pod创建不同的web测试页面

 

 

kubectl exec -it nginx-exam-7f987d55dd-f75zg bash
echo "<h1>this is web4</h1>" > /usr/share/nginx/html/index.html

kubectl exec -it nginx-exam-7f987d55dd-sj6nw bash
 echo "<h1>this is web4</h1>" > /usr/share/nginx/html/index.html

kubectl exec -it nginx-exam-7f987d55dd-tg6r7 bash
 echo "<h1>this is web4</h1>" > /usr/share/nginx/html/index.html

kubectl exec -it nginx-exam-7f987d55dd-z9j96 bash
echo "<h1>this is web4</h1>" > /usr/share/nginx/html/index.html

 通过pod 的clusterIP加上映射出的端口进行访问测试:

 

 

 (4)使用keepalived+nginx实现负载均衡的实现,期间需要写出心跳检测脚本,配置好nginx的负载均衡设置,nginx的主配置文件利用四层代理转发,添加好转发池,在后面的转发模块中指定的

转发池中的listen监听端口,就为VIP的监听端口。

 

主keepalived配置:

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id nginx_backup
}

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.73.66
    }
    track_script {
       check_nginx
    }
}

 

 

备keepalived配置:

 

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id nginx_backup
}

vrrp_script check_nginx {
   script "/etc/nginx/check_nginx.sh"
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.73.66
    }
    track_script {
       check_nginx
    }
}

 

 

心跳检测脚本:

# 两个负载均衡调度器都要设置
vim /etc/nginx/check_nginx.sh

#!/bin/bash
killall -0 nginx &>/dev/null
if [ $? -ne 0 ];then
  systemctl stop keepalived
fi

 

 

 

设置完成后就行nginx和keepalived的重启(先启nginx) 

 

 

进行vip访问端口测试:

 

 

 

 (4)进行网关服务器的映射

 按照要求两张网卡:ens33 指向内网,ens36  指定外网(充当网关服务器)

将所有的服务器的网关都指向网关服务器的IP

进行DNAT和SNAT的设置:

#打开路由转发
vim /etc/sysctl.conf
 net.ipv4.ip_forward=1
 
sysctl -p


#做SNAT和DNAT做网关映射

iptables -t nat -A POSTROUTING -s 192.168.73.0/24 -o ens36 -j SNAT --to 12.0.0.1
iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.73.66:6443

 

(5)使用外网的客户机进行访问(网关指向外网网卡IP) 

 

 

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐