4.DNS和负载均衡

文章目录

coreDNS

概念

  • coreDNS是kubernetes的默认DNS实现。可以为集群中的service资源创建一个资源名称与clusterIP的对应关系解析

  • kubernetes可以选择使用DNS来避免将服务器的集群IP地址硬编码到您的引用程序中

  • K8S的DNS实现

    • coreDNS
    • 根据xervice资源的名称解析出clusterip
    • 根据statfulset控制器创建的pod资源名称解析出pod IP

部署croeDNS

复制代码
##在所有的 node 节点上
#上传文件  coredns.tar  到 /opt/k8s

#加载 coredns的镜像
docker load -i coredns.tar

##在master01节点
##上传 coredns.yaml  到 /opt/k8s
##安装 coredns
kubectl apply -f coredns.yaml

###查看所有命名空间下的pod资源
kubectl get pods -A

测试

复制代码
###master01节点
###创建pods资源
kubectl create deployment ggl --image=nginx:latest --port=80

###查看pods
kubectl get pods -o wide
复制代码
##授权,给kubectl绑定默认cluster-admin管理源集群角色,授权集群操作权限
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

##查看deployment
kubectl get deployment

##创建service资源
kubectl expose deployment ggl --port=80 --name myapp-ggl --target-port=80

##查看service资源
kubectl get service
复制代码
###进入到pods中
kubectl exec -it pod名称 bash

##在pods中配置DNS域名解析
cat /etc/resolv.conf

##获取域名后缀
default.svc.cluster.local

##查看指定 service 绑定
nslookup myapp-ggl.default.svc.cluster.local
  • CoreDNS 是 K8S 的默认 DNS 实现
    • 根据 service 资源名称 解析出 Cluster IP

    • 根据 statefulset 控制器创建的 Pod 资源名称 解析出 Pod IP

      #DNS 解析测试
      kubectl run -it --rm dns-test --image=busybox:1.28.4 sh

      If you don't see a command prompt, try pressing enter.
      / # nslookup kubernetes
      Server: 10.0.0.2
      Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.local

      Name: kubernetes
      Address 1: 10.0.0.1 kubernetes.default.svc.cluster.local

kubernetes多master集群结构

复制代码
###master02:192.168.242.69

##使用同样的方式进行初始化操作
##要修改主机名

master节点部署

复制代码
##从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
scp -r /opt/etcd/ root@192.168.242.69:/opt/
scp -r /opt/kubernetes/ root@192.168.242.69:/opt
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.242.69:/usr/lib/systemd/system/
scp -r /root/.kube root@192.168.242.69:/root

###master02
##修改配置文件

cd /opt/kubernetes/cfg


vim kube-scheduler.kubeconfig
vim kube-controller-manager.kubeconfig
vim /root/.kube/config
修改为   server: https://192.168.242.69:6443

vim kube-apiserver
修改    --bind-address=192.168.242.69 \
       --secure-port=6443 \
       --advertise-address=192.168.242.69 \

##依次启动服务
systemctl enable --now kube-apiserver.service
systemctl enable --now kube-controller-manager.service
systemctl enable --now kube-scheduler.service

##为可执行文件创建软连接到系统目录中
ln -s /opt/kubernetes/bin/* /usr/local/bin/

###在  master02中也能够使用  kubectl 客户端
kubectl get pods

负载均衡配置

复制代码
###利用 nginx + keepalived  做负载均衡
192.168.242.70
192.168.242.71

##关闭防火墙
systemctl disable --now firewalld
setenforce 0 
vim /etc/selinx/config

部署nginx做四层反向代理

复制代码
###nginx  的 yum  源

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

##安装nginx
yum -y install nginx

##修改配置文件
cd /etc/nginx/
vim nginx.conf


use epoll;

stream {
	upstream k8s {
	   server 192.168.242.66:6443;
	   server 192.168.242.69:6443;
	}
	server {
	   listen 6443;
	   proxy_pass k8s;
	}
}

##启动nginx
nginx -t
systemctl enable --now nginx

netstat -lntp | grep nginx

安装高可用 keepalived

复制代码
##安装 keepalived

yum -y install keepalived

###修改配置文件

cd /etc/keepalived
cp keepalived.conf{,.bak}
vim keepalived.conf



global_defs {
	smtp_server 127.0.0.1
	router_id Nginx_01
}


vrrp_script chk_nginx {
    ###指定监控脚本的路径
    script "/etc/keepalived/nginx_check.sh"
    ###检测的间隔时间
    interval 2
    ###权重
    weight 2
}



vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight 2
}



vrrp_instance VI_1 {
    state MASTER
    interface ens32
    virtual_router_id 51	
    priority 100
    advert_int 1					
    authentication {				
		auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.242.100
    }
    track_script {                   ###加载追踪模块
        chk_nginx
    }
}

nginx监控脚本

复制代码
###创建监控脚本
vim /etc/keepalived/nginx_check.sh
shell 复制代码
###检测nginx是否启动的脚本
#!/bin/bash
if ! killall -0 nginx  &> /dev/null
then
    systemctl stop keepalived
fi
复制代码
vim nginx_check.sh
###给脚本添加执行权限
chmod +x nginx_check.sh

###启动  keepalived

systemctl enable --now keepalived

###查看VIP地址
ip a 

修改k8s中组件的配置文件

复制代码
###修改node节点的配置文件

cd /opt/kubernetes/cfg/

vim bootstrap.kubeconfig
vim kubelet.kubeconfig
vim kube-proxy.kubeconfig


修改为   server: https://192.168.242.100:6443

###重启服务
systemctl restart kubelet.service kube-proxy.service

###在负载均衡器中查看端口信息

netstat -natp | grep nginx
复制代码
###修改  kubectl 配置文件

vim /root/.kube/config
修改为   server: https://192.168.242.100:6443
相关推荐
longerxin20203 小时前
在 Linux 上使用 SCP 将文件传输到 Windows(已开启 SSH)
linux·运维·ssh
zhaotiannuo_19986 小时前
渗透测试之docker
运维·docker·容器
王正南7 小时前
kali-linux 虚拟机连接安卓模拟器
android·linux·运维·虚拟机连接模拟器·安卓模拟器,linux虚拟机
三不原则7 小时前
故障案例:容器启动失败排查(AI运维场景)——从日志分析到根因定位
运维·人工智能·kubernetes
吳所畏惧7 小时前
Linux环境/麒麟V10SP3下离线安装Redis、修改默认密码并设置Redis开机自启动
linux·运维·服务器·redis·中间件·架构·ssh
yueguangni7 小时前
sysstat 版本 10.1.5 是 CentOS 7 的默认版本,默认情况下确实不显示 %wait 字段。需要升级到新版sysstat
linux·运维·centos
funfan05178 小时前
【运维】MySQL数据库全量备份与恢复实战指南:从入门到精通
运维·数据库·mysql
-dcr8 小时前
49.python自动化
运维·python·自动化
萧曵 丶9 小时前
Linux 业务场景常用命令详解
linux·运维·服务器
乾元9 小时前
ISP 级别的异常洪泛检测与防护——大流量事件的 AI 自动识别与响应工程
运维·网络·人工智能·安全·web安全·架构