您当前的位置:首页 > 电脑百科 > 网络技术 > 网络知识

k8s之DNS服务器搭建

时间:2021-01-04 12:26:58  来源:  作者:

一、导读

在使用k8s部署springboot+redis简单应用这篇文章中,spring boot连接redis是直接使用的IP连接,那么可不可以直接使用服务名称进行连接呢?答案是可以的,这就是k8s集群范围内的DNS服务来完成服务名到ClusterIP的解析,接下来就一起看一下如何搭建DNS服务器。

 

二、搭建DNS服务器

(1)简介

k8s提供的DNS服务是skydns,由四个组件组成

  • etcd:DNS信息存储
  • kube2sky:监控k8s中Service资源的变化,根据Service的名称的IP地址信息生成DNS记录,并将其保存到etcd中
  • skyDNS:从etcd中读取DNS信息,并提供DNS查询服务
  • healthz:提供对skydns服务的健康检查功能
k8s之DNS服务器搭建

 

(2)skydns配置文件说明

skydns服务有一个RC和一个Service组成,分别由配置文件skydns-rc.yaml和skydns-svc.yaml定义。

skydns-rc.yaml包含了四个容器的定义:

apiVersion: v1
kind: ReplicationController
metadata:
  name: kube-dns-v8
  namespace: kube-system
  labels:
    k8s-App: kube-dns
    version: v8
    kubernetes.io/cluster-service: "true"
spec:
  replicas: 1
  selector:
    k8s-app: kube-dns
    version: v8
  template:
    metadata:
      labels:
        k8s-app: kube-dns
        version: v8
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: etcd
        image: empiregeneral/etcd-amd64:latest
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
        command:
        - /usr/local/bin/etcd
        - -data-dir
        - /var/etcd/data
        - -listen-client-urls
        - http://127.0.0.1:2379,http://127.0.0.1:4001
        - -advertise-client-urls
        - http://127.0.0.1:2379,http://127.0.0.1:4001
        - -initial-cluster-token
        - skydns-etcd
        volumeMounts:
        - name: etcd-storage
          mountPath: /var/etcd/data
      - name: kube2sky
        image: syncgooglecontainers/kube2sky-amd64:1.15
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
        args:
        - --domain=cluster.local
        - --kube_master_url=http://192.168.197.100:8080
      - name: skydns
        image: yaronr/skydns:latest
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
        args:
        - -machines=http://localhost:4001
        - -addr=0.0.0.0:53
        - -domain=cluster.local
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
      - name: healthz
        image: syncgooglecontainers/exechealthz:1.1
        resources:
          limits:
            cpu: 10m
            memory: 20Mi
        args:
        - -cmd=nslookup kubernetes.default.svc.cluster.local localhost >/dev/null
        - -port=8080
        ports:
        - containerPort: 8080
          protocol: TCP
      volumes:
      - name: etcd-storage
        emptyDir: {}
      dnsPolicy: Default  # Don't use cluster DNS.

上述需要注意的是,需要将

--kube_master_url=http://192.168.197.100:8080

改成集群中master的IP,镜像如果下载失败,可从Docker hub里面找,我就是从docker hub里面找到相应的镜像。

 

skydns-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: "KubeDNS"
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 10.96.0.10
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP

需要指定一个clusterIP,不能靠k8s自动分配,每个Node的kubelet都是用这个IP地址,另外,这个IP需要在kube-apiserver启动参数--service-cluster-ip-range指定的IP范围内

kube-apiserver的配置文件在/etc/kubernetes/manifests目录下:

k8s之DNS服务器搭建

 

(3)修改每台Node上的kubelet参数

添加以下两个参数:

--cluster_dns=169.169.0.100: 为dns服务的clusterIP地址
--cluster_domain=cluster.local: 为dns服务中设置的域名

比如我这边的是这样:

vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
#添加如下一行
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"

然后重启kubelet,使用ps -ef | grep kubelet查看是否生效

重启kubelet

systemctl stop kubelet
systemctl daemon-reload
systemctl start kubelet
k8s之DNS服务器搭建

 

修改完参数之后,启动dns

kubectl create -f skydns-rc.yaml
kubectl create -f skydns-svc.yaml

 

(4)验证

启动一个busybox容器。

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  labels:
    name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    imagePullPolicy: IfNotPresent
    command:
      - sleep
      - "3600"
    name: busybox
  restartPolicy: Always

启动之后进入容器内部:

nsloogup 服务名
k8s之DNS服务器搭建

 

可知解析后的ip是10.102.184.126。

然后查找对应的redis 的Service的ip,可以看到,两个IP是对的上的。

k8s之DNS服务器搭建

 

又例如之前的springboot连接redis:

在构建镜像的时候直接使用ip,这次改为使用服务名:

FROM centos:7


LABEL author=lsy


ENV path=/usr/soft


RUN mkdir ${path}


WORKDIR ${path}


ADD jdk-8u191-linux-x64.tar.gz ${path}


ENV JAVA_HOME=${path}/jdk1.8.0_191
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH


COPY k8s_demo-1.0.jar ${path}


EXPOSE 8080


CMD  java -jar -DredisIp=redis k8s_demo-1.0.jar

然后进行镜像构建:

k8s之DNS服务器搭建

 

然后改为使用当前镜像进行容器的构建,之后创建容器

测试:

设置值:

k8s之DNS服务器搭建

 

取值:

k8s之DNS服务器搭建

 

===============================

我是Liusy,一个喜欢健身程序员

欢迎关注微信公众号【Liusy01】,一起交流Java技术及健身,获取更多干货,领取Java进阶干货,领取最新大厂面试资料,一起成为Java大神。

 

来都来了,关注一波再溜呗。



Tags:DNS服务器   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、导读在使用k8s部署springboot+redis简单应用这篇文章中,spring boot连接redis是直接使用的IP连接,那么可不可以直接使用服务名称进行连接呢?答案是可以的,这就是k8s集群范围...【详细内容】
2021-01-04  Tags: DNS服务器  点击:(171)  评论:(0)  加入收藏
公司使用dnsmasq作为内网DNS服务器,前一段时间收到同事各种吐槽,弄得我颜面扫地。具体有下面几种异常: 解析超时,上游配置腾讯公共DNSaneirin@host-1:~$ dig @119.29.29.29 www....【详细内容】
2020-11-24  Tags: DNS服务器  点击:(187)  评论:(0)  加入收藏
搭建自己的DNS服务器是一个很常见的诉求,尤其是在公司内部。Linux下架设DNS服务器通常是使用BIND程序来实现,BIND是美国加利福尼亚大学伯克利分校开发的软件,是一套域名服务器...【详细内容】
2020-10-15  Tags: DNS服务器  点击:(104)  评论:(0)  加入收藏
微软在7月14日发布了针对Windows Server的重要安全补丁CVE-2020-1350,修复了一个17年前的Windows DNS服务器的安全漏洞。这个漏洞是在今年5月由以色列安全公司Check Point所...【详细内容】
2020-07-17  Tags: DNS服务器  点击:(73)  评论:(0)  加入收藏
合理的运用DNS服务器可以有效提高网站加载的速度,安全保障和拦截广告也是大厂们的初衷。 每个人所归属地和运营商不同适用度也不一样,所以我不去做数据评测。盘点国内外最受欢...【详细内容】
2020-05-07  Tags: DNS服务器  点击:(90)  评论:(0)  加入收藏
DNS 的全称是 Domain Name System 或者 Domain Name Service,它主要的作用就是将人们所熟悉的网址 (域名) “翻译”成电脑可以理解的 IP 地址,这个过程叫做 DNS 域名解析。优...【详细内容】
2020-05-07  Tags: DNS服务器  点击:(319)  评论:(0)  加入收藏
Google Public DNS:8.8.8.8、8.8.4.4Norton DNS:198.153.192.1、198.153.194.1OpenDNS:208.67.222.222、208.67.220.220OpenDNS Family:208.67.222.123、208.67.220.123Comodo S...【详细内容】
2020-05-07  Tags: DNS服务器  点击:(83)  评论:(0)  加入收藏
DNS是网络中常用的服务器之一,主要使用它来做域名解析,包括正向解析(域名到IP)和方向解析(IP到域名),下面就来给大家简单解释DNS配置过程,大家可以跟我一起来学。1、安装bind服务 安...【详细内容】
2020-03-01  Tags: DNS服务器  点击:(95)  评论:(0)  加入收藏
DNS也就是域名解析服务器,这个东西的存在,使我们上网变得非常方便。再也不需要去记下复杂的IP了。而同样,DNS也影响着我们的网速,那么今天,小编就给大家推荐一个DNS服务器。这...【详细内容】
2020-02-25  Tags: DNS服务器  点击:(96)  评论:(0)  加入收藏
1.安装bind服务# yum install -y bind bind-chroot bind-utils2.chroot 环境为了系统的安全性?虑,一般来说目前各主要 distributions 都已经自动的将你的 bind 相关程序给他...【详细内容】
2020-02-24  Tags: DNS服务器  点击:(68)  评论:(0)  加入收藏
▌简易百科推荐
HTTP 报文是在应用程序之间发送的数据块,这些数据块将通过以文本形式的元信息开头,用于 HTTP 协议交互。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应...【详细内容】
2021-12-27  程序员蛋蛋    Tags:HTTP 报文   点击:(0)  评论:(0)  加入收藏
一 网络概念:1.带宽: 标识网卡的最大传输速率,单位为 b/s,比如 1Gbps,10Gbps,相当于马路多宽2.吞吐量: 单位时间内传输数据量大小单位为 b/s 或 B/s ,吞吐量/带宽,就是网络的使用率...【详细内容】
2021-12-27  码农世界    Tags:网络   点击:(2)  评论:(0)  加入收藏
1.TCP/IP 网络模型有几层?分别有什么用? TCP/IP网络模型总共有五层 1.应用层:我们能接触到的就是应用层了,手机,电脑这些这些设备都属于应用层。 2.传输层:就是为应用层提供网络...【详细内容】
2021-12-22  憨猪哥08    Tags:TCP/IP   点击:(28)  评论:(0)  加入收藏
TCP握手的时候维护的队列 半连接队列(SYN队列) 全连接队列(accepted队列)半连接队列是什么?服务器收到客户端SYN数据包后,Linux内核会把该连接存储到半连接队列中,并响应SYN+ACK报...【详细内容】
2021-12-21  DifferentJava    Tags:TCP   点击:(9)  评论:(0)  加入收藏
你好,这里是科技前哨。 随着“元宇宙”概念的爆火,下一代互联网即将到来,也成了互联网前沿热议的话题,12月9日美国众议院的听证会上,共和党议员Patrick McHenry甚至宣称,要调整现...【详细内容】
2021-12-17  王煜全    Tags:Web3   点击:(14)  评论:(0)  加入收藏
一、demopublic static void main(String[] args) throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry( 1000, 3);...【详细内容】
2021-12-15  程序员阿龙    Tags:Curator   点击:(20)  评论:(0)  加入收藏
一、计算机网络概述 1.1 计算机网络的分类按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN);按照网络使用者:公用网络、专用网络。1.2 计算机网络的层次结构 TCP/IP四层模...【详细内容】
2021-12-14  一口Linux    Tags:网络知识   点击:(30)  评论:(0)  加入收藏
无论是在外面还是在家里,许多人都习惯了用手机连接 WiFi 进行上网。不知道大家有没有遇到过这样一种情况, 明明已经显示成功连接 WiFi,却仍然提示“网络不可用”或“不可上网”...【详细内容】
2021-12-14  UGREEN绿联    Tags:WiFi   点击:(25)  评论:(0)  加入收藏
拉了千兆宽带,买了标称 1300Mbps 的无线路由器,为什么 WiFi 还是跑不满千兆?要回答这个问题,我们先得知道这个 1300Mbps 是怎么来的。开始回答之前先说明一下,这期只讲 802.11ac,...【详细内容】
2021-12-14  Ubiquiti优倍快    Tags:WiFi   点击:(83)  评论:(0)  加入收藏
问题背景IPv6环境下,在浏览器中通过http://[vip:port]访问web业务,提示无法访问此网站,[vip]的响应时间过长。分析过程之前碰到过多次在PC浏览器上无法访问vip的情况,排查方法也...【详细内容】
2021-12-13  云原生知识星球    Tags:网络问题   点击:(27)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条