三、创建service资源
编写service对应的yaml文件,使用NodePort类型和TCP 30000端口将Nginx服务发布出去。
#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的标签保持一致 #创建service资源 kubectl apply -f myservice.yaml #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 Name: yuji-nginx-svc Namespace: default Labels: <none> Annotations: <none> Selector: app=yuji-nginx Type: NodePort IP Families: <none> IP: 10.96.100.164 IPs: 10.96.100.164 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 30000/TCP Endpoints: 10.244.1.2:80,10.244.2.4:80 #service资源管理的2个pod Session Affinity: None External Traffic Policy: Cluster Events: <none> #3、测试使用nodeIP:nodePort访问nginx网页 curl 192.168.10.20:30000 #node01 curl 192.168.10.30:30000 #node02 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
四、搭建负载均衡层
负载均衡区域配置Keepalived+Nginx,实现负载均衡高可用,通过VIP 192.168.10.100和自定义的端口号即可访问K8S发布出来的服务。
- lb01:192.168.10.40
- lb02:192.168.10.50
- VIP:192.168.10.100
#---------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源 cat > /etc/yum.repos.d/nginx.repo << 'EOF' [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 EOF yum install nginx -y #修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台node的节点ip和30000端口 vim /etc/nginx/nginx.conf events { worker_connections 1024; } #在http块上方,添加stream块 stream { upstream k8s-nodes { server 192.168.10.20:30000; #node01IP:nodePort server 192.168.10.30:30000; #node02IP:nodePort } server { listen 3344; #自定义监听端口 proxy_pass k8s-nodes; } } 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 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 48395/nginx: master tcp 0 0 0.0.0.0:3344 0.0.0.0:* LISTEN 48395/nginx: master #------------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 LB01 #lb01节点的为LB01,lb02节点的为LB02 } #添加一个周期性执行的脚本 vrrp_script check_nginx { script "/etc/nginx/check_nginx.sh" #指定检查nginx存活的脚本路径 } vrrp_instance VI_1 { state MASTER #lb01节点的为 MASTER,lb02节点的为 BACKUP interface ens33 #指定网卡名称 ens33 virtual_router_id 51 #指定组ID,两个节点要一致 priority 100 #设置优先级,lb01节点设置为 100,lb02节点设置为 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.100 #指定VIP地址 } track_script { #追踪脚本 check_nginx #指定vrrp_script配置的脚本 } } #将配置文件中剩余的内容全都删除 #主调度器lb01创建nginx状态检查脚本 vim /etc/nginx/check_nginx.sh #!/bin/bash #egrep -cv "grep|$$" 用于过滤掉包含grep 或者 $$ 表示的当前Shell进程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 addr #查看主节点的VIP是否生成 #测试使用VIP:3344访问web网页 curl 192.168.10.100:3344 #----------3、关闭主调度器的nginx服务,模拟故障,测试keepalived------- #关闭主调度器lb01的Nginx服务,模拟宕机,观察VIP是否漂移到备节点 systemctl stop nginx ip addr systemctl status keepalived #此时keepalived被脚本杀掉了 #备节点查看是否生成了VIP ip addr #此时VIP漂移到备节点lb02 #恢复主节点 systemctl start nginx #先启动nginx systemctl start keepalived #再启动keepalived ip addr 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
五、配置防火墙服务器
iptables防火墙服务器,设置双网卡,并且配置SNAT和DNAT转换实现外网客户端可以通过12.0.0.1访问内网的Web服务。
- 内网网卡ens33:192.168.10.1
- 外网网卡ens36:12.0.0.1
##两台负载均衡器,将网关地址修改为防火墙服务器的内网IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 GATEWAY="192.168.10.1" systemctl restart network #重启网络 systemctl restart keepalived #如果VIP丢失,需要重启一下keepalived ##配置防火墙服务器 #-------------1、关闭防火墙和selinux------------- systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config #------------2、开启路由转发功能---------------- vim /etc/sysctl.conf net.ipv4.ip_forward = 1 //在文件中增加这一行,开启路由转发功能 sysctl -p //加载修改后的配置 #------------3、配置iptables策略--------------- #先将原有的规则清除 iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X #设置SNAT服务,解析源地址。修改nat表中的POSTROUTING链。 #将源地址192.168.10.100转换为为12.0.0.1 iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens36 -j SNAT --to 12.0.0.1 #-t nat //指定nat表 #-A POSTROUTING //在POSTROUTING链中添加规则 #-s 192.168.10.100/24 //数据包的源地址 #-o ens36 //出站网卡 #-j SNAT --to 12.0.0.1 //使用SNAT服务,将源地址转换成公网IP地址。 #设置DNAT服务,解析目的地址。修改nat表中的PRETROUTING链。 #将目的地址12.0.0.1:3344 转换成 192.168.10.100:3344 iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.1 -p tcp --dport 3344 -j DNAT --to 192.168.10.100:3344 #-A PREROUTING //在PREROUTING链中添加规则 #-i ens36 //入站网卡 #-d 12.0.0.254 //数据包的目的地址 #-p tcp --dport 3344 //数据包的目的端口 #-j DNAT --to 192.168.10.100:3344 //使用DNAT功能,将目的地址和端口转换成192.168.10.100:3344 iptables -t nat -nL #查看策略 Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- 0.0.0.0/0 12.0.0.1 tcp dpt:3344 to:192.168.10.100:3344 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.10.0/24 0.0.0.0/0 to:12.0.0.1 ##客户端修改网关配置文件,测试访问内网的Web服务 客户端IP地址:12.0.0.12,将网关地址设置为防火墙服务器的外网网卡地址:12.0.0.1 浏览器输入 http://12.0.0.1:3344 进行访问 复制代码
两台负载均衡器,将网关地址修改为防火墙服务器的内网IP地址,之后需要重启网络:
网络异常,图片无法展示
|
网络异常,图片无法展示
|
配置防火墙服务器:
网络异常,图片无法展示
|
网络异常,图片无法展示
|
客户端修改网关地址,测试访问内网的Web服务:
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|