最近响应国家政策,在家实属无聊,尝试用k8s部署一下DNS系统,记录一下!
提前准备了三个docker镜像,根域名解析镜像,顶级域名解析镜像以及本地域名解析镜像
一、创建控制器,这里采用Deployment
1.根域名解析deployment.yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: bind-deployment #deployment名称
spec:
replicas: 1 #为了方便,副本数暂时设置为1
selector:
matchLabels: #下面引用两个标签,方便创建service微服务
app: bind
type: root
template:
metadata:
labels:
app: bind
type: root
spec:
containers:
- name: bind #容器名
image: www.jieyinglei.com/library/bind:latest
ports:
- containerPort: 53 #打开容器53端口
protocol: UDP #端口类型
securityContext:
privileged: true #打开privileged权限
2.顶级域名解析deployment.yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: com-bind-deployment
spec:
replicas: 3 #副本数量设置为3
selector:
matchLabels:
app: bind
type: com
template:
metadata:
labels:
app: bind
type: com
spec:
containers:
- name: bind
image: www.jieyinglei.com/library/com-dns:latest
ports:
- containerPort: 53
protocol: UDP
securityContext:
privileged: true
3.本地域名解析deployment.yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: local-bind-deployment
spec:
replicas: 1
selector:
matchLabels:
app: bind
type: local
template:
metadata:
labels:
app: bind
type: local
spec:
containers:
- name: local-bind
image: www.jieyinglei.com/library/local-dns:latest
ports:
- containerPort: 53
protocol: UDP
securityContext:
privileged: true
4.用kubectl create -f 来创建上面三个deployment
kubectl get deployment查看一下,看到下面这样就完成一小步啦
kubectl get pod 查看创建好的pod :
如果有哪些pod 的STATUS是没有Running的,表明该pod还没有准备好,可以用下面命令去查看一下详细信息:
kubectl describe pod podName(pod 也可以换成其他资源,如deployment、svc等)
5.最后用dig去查看一下bind是否正常返回
到这里就可以进一步创建svc啦
二、创建service
1.根域名解析svc.yaml文件:
apiVersion: v1
kind: Service
metadata:
name: bind #svc名称
namespace: default #默认名称空间
spec:
type: ClusterIP
selector: #这里选择哪些pod作为代理对象,通过访问svc,会将请求分发到每一个pod中
app: bind
type: root
ports:
- name: bind
port: 53
targetPort: 53
protocol: UDP
2.顶级域名解析svc.yaml文件:
apiVersion: v1
kind: Service
metadata:
name: com-bind
namespace: default
spec:
type: ClusterIP
selector:
app: bind
type: com
ports:
- name: bind
port: 53
targetPort: 53
protocol: UDP
3.本地域名解析svc.yaml文件:
apiVersion: v1
kind: Service
metadata:
name: local-bind
namespace: default
spec:
type: ClusterIP
selector:
app: bind
type: local
ports:
- name: bind
port: 53
targetPort: 53
protocol: UDP
4.用kubectl create -f 来创建上面三个svc
查看:kubectl get svc
三、修改根地名解析,顶级域名解析,本地域名解析配置文件,查看效果
这里我对k8s和bind都是初步了解而已,所以我选择进入pod里面一个个修改。。。。。
前面已经把顶级域名解析的pod副本数设置为3,所以这里可以让每一个pod对同一个域名做出不同的解析。
第二个解析到2.2.2.2 ,第三个解析到3.3.3.3
四、效果
第一次解析:
第二次解析:
第三次解析:
end!!!