Loading

k8s内网实践

问题:

因为kubelet有自动垃圾收集机制,当我们在内网使用k8s时,镜像被回收之后,将无法自动拉取相关镜像,从而导致容器无法正常运行。

解决方案:

1、搭建本地镜像仓库,并且创建对应的ingress规则
2、创建自定义CoreDNS解析,并将CoreDNS配置到宿主机上去
3、将镜像上传到本地仓库

每台k8s节点上添加CoreDNS

# cat /etc/resolv.conf
nameserver 10.96.0.10 # CoreDNS IP地址
nameserver 223.5.5.5  # 公网DNS
search svc.cluster.local cluster.local
# 如果服务器使用 NetworkManager 管理网络连接,那么需要使用`nmcli`命令进行配置,否则重启服务器之后配置会被 NetworkManager 自动覆盖
nmcli connection modify "Wired Connection 1" ipv4.dns "10.96.0.10 223.5.5.5"

这样配置之后,本地服务器即可直接访问svc。
将镜像仓库的ingress地址添加到CoreDNS,使宿主机可以解析到本地仓库的域名。
参考:

自定义DNS服务
CoreDNS hosts 插件说明
CoreDNS rewrite 插件说明

实践(没有搭建harbor,以rancher为例):
配置dns

kubectl -n kube-system edit configmap coredns

查看解析结果

安装nslookup

yum  provides  */nslookup
yum install bind-utils.x86_64 -y

验证

[root@centos7 kube]# nslookup kube-dns.kube-system
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   kube-dns.kube-system.svc.cluster.local
Address: 10.96.0.10
posted @ 2022-06-30 22:20  小维江湖  阅读(224)  评论(0编辑  收藏  举报