k8s无脑系列(二)-DNS服务搭建和访问

K8s无脑DNS服务搭建和访问

概述

上一个文章讲到了,采用NodePort。NodePort绑定了IP,所以对于未来的扩容、部署不友好。所以我们需要进一步学习下去。
外部访问LoadBalance和Ingress。无论哪种,都避不开一个点,就是集群内部采用DNS查询服务

  1. 不要怕,很简单,照着做一定行!
  2. 容易犯的错误,下面会有说明
  3. 因为使用了DNS服务,Node节点的服务启动有顺序要求了!

1. 创建DNS服务

所需要的Yaml

  1. kubedns-rc.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
spec:
  strategy:
    rollingUpdate:
      maxSurge: 10%
      maxUnavailable: 0
  selector:
    matchLabels:
      k8s-app: kube-dns
  template:
    metadata:
      labels:
        k8s-app: kube-dns
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
        scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
    spec:
      containers:
      - name: kubedns
        image: registry.cn-hangzhou.aliyuncs.com/google-containers/kubedns-amd64:1.9
        args:
        - --domain=cluster.local.
        - --dns-port=10053
        - --config-map=kube-dns
        - --v=2
        - --kube-master-url=http://192.168.56.4:8080 # 这个地址参见《kubernetes最小集群搭建》
        env:
        - name: PROMETHEUS_PORT
          value: "10055"
        ports:
        - containerPort: 10053
          name: dns-local
          protocol: UDP
        - containerPort: 10053
          name: dns-tcp-local
          protocol: TCP
        - containerPort: 10055
          name: metrics
          protocol: TCP
      - name: dnsmasq
        image: registry.cn-hangzhou.aliyuncs.com/google-containers/kube-dnsmasq-amd64:1.4
        args:
        - --cache-size=1000
        - --no-resolv
        - --server=127.0.0.1#10053
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
  1. kubedns-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.254.10.10  # 重点,重点,重点!!!地址可以随便设置,但!!!!这个IP一定要与flannel设置在etcd的网段保持一致。参见:《kubernetes最小集群搭建》 4.3保持一致
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP

2. 修改配置(没有特殊说明,节点都要做如下检查和操作)

  1. 修改配置
  • 修改文件

    vim /etc/kubernetes/kubelet
    KUBELET_ARGS="--cluster_dns=10.254.10.10 --cluster_domain=cluster.local"
    
  • --cluster_dns=10.254.10.10
    IP地址与kubedns-svc.yaml中的选项保持一致

  • --cluster_domain
    与kubedns-rc.yaml 中的domain保持一致!

  1. Node节点重新启动
systemctl stop kubelet docker kube-proxy flanneld 
systemctl start flanneld docker kubelet kube-proxy
  1. Master节点重新启动
systemctl stop etcd flanneld kube-proxy kube-apiserver kube-controller-manager kube-scheduler
systemctl start etcd flanneld kube-proxy kube-apiserver kube-controller-manager kube-scheduler
  1. 创建DNS服务
  $kubectl create -f kubedns-rc.yaml
  $kubectl create -f kubedns-svc.yaml

2.1 检查DNS服务创建情况

  1. 执行命令

    $kubectl get svc,ep,pod --all-namespace
    NAMESPACE     NAME             CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
    default       svc/kubernetes   10.254.0.1      <none>        443/TCP         3d
    kube-system   svc/kube-dns     10.254.10.10    <none>        53/UDP,53/TCP   1h
    
    NAMESPACE     NAME                         ENDPOINTS                     AGE
    default       ep/kubernetes                192.168.1.114:6443            3d
    kube-system   ep/kube-dns                  10.254.1.2:53,10.254.1.2:53   1h
    
    NAMESPACE     NAME                           READY     STATUS    RESTARTS   AGE
    kube-system   po/kube-dns-2768888805-978hl   2/2       Running   0          1h
    
  1. 可以观察到svc/kube-dns 10.254.10.10 ,并且,EndPoint也对上了!成功

  2. 执行nslookup www.baidu.com 10.254.10.10 发现正常解析。再次确认成功

2.3 实际服务注册并获取DNS查询

  1. 修改mysql-svc.yaml,去掉NodePort相关,

    由于NodePort在运行中无法修改,需要删掉原有的mysql服务

  2. 删除旧服务

     $kubectl delete -f mysql-svc.yaml
    
  3. 编辑资源描述文件

    vim mysql-svc.yaml
    
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-svc
      labels:
        name: mysql-svc
    spec:
      ports:
      - port: 3306
        protocol: TCP
        targetPort: 3306
        name: mysql
      selector:
        app: mysql-pod
    
  1. 重新创建服务

    $kubectl create -f mysql-svc.yaml
    等待创建完毕
    
    $nslookup mysql-svc.default.svc.cluster.local 10.254.10.10
    Server:     10.254.10.10
    Address:    10.254.10.10#53
    
    Name:   mysql-svc.default.svc.cluster.local
    Address: 10.254.57.197
    
  2. 完全达成!

3. 遇到的问题

3.1 Node之间访问Pod不通的问题(没有特殊说明,节点都要做如下检查和操作)

  1. 双网卡,第一块网卡是外网网卡,导致无法访问(参见《kubernetes最小集群搭建》,虚拟机两块网卡的设定

在kubelet配置文件修改,为flanneld启动增加参数

vim /etc/sysconfig/flanneld
FLANNEL_OPTIONS="-iface enp0s8" # 这个网卡请参考实际虚拟机的名字
  1. 两个Node被分配到了一个网段的问题!

    启动顺序以及缓存导致的问题

  2. 正确的Node启动顺序

    一定要先启动flanneld!!!!

    systemctl stop kubelet docker kube-proxy flanneld 
    systemctl start flanneld docker kubelet kube-proxy
    
  3. 正确的Master启动顺序

    systemctl start etcd flanneld kube-proxy kube-apiserver kube-controller-manager kube-scheduler
    

3.2 犯的最傻X问题

  1. Master主机没有启动kube-proxy导致 无法验证DNS成功。《kubernetes最小集群搭建》也做了修改
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354