kubernetes配置DNS

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/scylhy/article/details/82314487

kubernetes配置DNS

  之前,在搭建fabric的k8s启动方式,启动的kfk、zookeeper,解析不到服务名,虽然可以  
通过修改/etc/hosts解决,但是很麻烦,并且,fabric提供的镜像,进入容器后,发现很多工  
具没有,甚至不能apt安装.
  所以,考虑配置DNS,这里有两个选择,kube-dns和core-dns,最先配置了kube-dns,遇到  
了问题,容器启动失败,后换成core-dns,也是同样的问题,这很有可能跟搭建的集群有关.
  最终发现是自己搭建集群,启动参数设置的又问题,这个工具有点大,参数有点多,慢慢学.
  • 集群环境说明

      为了简单搭建集群,以尽快学习相关知识,进入到原生云领域.这里不向大家那样搭建多个  
    节点,而只在一个节点上进行,及master和node在同一台物理机器上.这样专注于业务功能  
    开发,而不是集群的运维.
    
    • 节点环境

      阿里云 ubuntu16.04环境
      
    name ip
    master/node1 172.16.199.55(私有ip)
    • kubernetes1.11手动搭建
    • 忙完这段时间的工作(阿里比赛和实验室的专利),撰写完整的单节点搭建k8s环境,此处留坑
  • 搭建core-dns

    • 下载core-dns

      git clone https://github.com/coredns/deployment.git
      cd deployment/kubernetes
    • deployment/kubernetes 目录结构

      liudeMacBook-Pro:kubernetes liu$ tree
      .
      ├── README.md
      ├── coredns.yaml.sed  
      ├── deploy.sh     
      └── rollback.sh   
      
      0 directories, 4 files
    • 生成coredns.yaml

      
      #将部署结果保存到coredns.yaml
      
      ./deploy.sh -i 169.169.0.2 -d cluster.local >coredns.yaml
      
      #为方便操作可写成脚本(主要是,之前debug太多次)
      
    • 部署coredns

      kubectl create -f .
      
      
      #一段时间后,正常的话
      
      root@liu:~/data/deployment# kubectl get pods -n kube-system
      NAME                       READY     STATUS    RESTARTS   AGE
      coredns-55f86bf584-bp6sx   1/1       Running   0          11s
      coredns-55f86bf584-gfpkr   1/1       Running   0          11s       #但,一开始,我只一直是如下的情况,稍后解决
      root@liu:~#  kubectl get pods -n   kube-system
      NAME                       READY     STATUS             RESTARTS   AGE
      coredns-7c49789867-gwlhm   0/1       CrashLoopBackOff   18         1h
      coredns-7c49789867-kf292   0/1       CrashLoopBackOff   18         1h
    • 修改kubelet启动参数,添加–cluster-dns 和–cluster-domain,并重启kubelet

      KUBELET_ARGS=" --cluster-dns=169.169.0.2  --cluster-domain=cluster.local  --kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
    • 测试dns

      • 创建busybox.yaml(注意:yaml不能使用tab,并注意空格数)

        apiVersion: v1
        kind: Pod
        metadata:
          name: busybox
          namespace: default
        spec:
          containers:
          - image: busybox
            command:
              - sleep
              - "3600"
            imagePullPolicy: IfNotPresent
            name: busybox
          restartPolicy: Always
      • 创建测试pod

        root@liu:~# kubectl create -f busybox.yaml
        root@liu:~# kubectl get pod
        NAME      READY     STATUS    RESTARTS   AGE
        busybox   1/1       Running   1          1h
      • 测试dns

        
        #成功状态
        
        root@liu:~# kubectl exec -ti busybox -- nslookup baidu.com
        Server:    100.100.2.136
        Address 1: 100.100.2.136
        
        Name:      baidu.com
        Address 1: 123.125.115.110
        Address 2: 220.181.57.216
        
        
        # k8s官网上的那个测试,失败的原因是kubernetes.default被墙了
        
        root@liu:~# kubectl exec -ti busybox -- nslookup kubernetes.default
        Server:    100.100.2.136
        Address 1: 100.100.2.136
        
        nslookup: can't resolve 'kubernetes.default'
        command terminated with exit code 1
        
        #开启vpn后,测试记过如下图
        

        dns


以上是正常的创建过程,但实际中遇到了各种问题
  • Q1:coredns/kubedns容器创建失败

    root@liu:~# kubectl get pod -n kube-system
    NAME                       READY     STATUS             RESTARTS   AGE
    coredns-55f86bf584-7d9q7   0/1       CrashLoopBackOff   14         53m
    coredns-55f86bf584-sdgkd   0/1       CrashLoopBackOff   14         53m
    root@liu:~/data/deployment# kubectl logs -n kube-system -f     coredns-55f86bf584-7hjmp
    2018/09/02 04:17:43 plugin/kubernetes: open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory
    
  • A:该错误是apiserver没有设置启动参数 –admission-control=ServiceAccount

    • 修改apiserver启动参数

      KUBE_API_ARGS="--etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0   --service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 --admission-control=ServiceAccount,NamespaceLifecycle,LimitRanger,ResourceQuota --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
    • 修改kube-controller-manager 启动参数–service-account-private-key-file

      KUBE_CONTROLLER_MANAGER_ARGS="--service-account-private-key-file=/var/run/kubernetes/apiserver.key --master=http://172.16.199.55:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
      仅修改apiserver,会造成创建rc,生不成rc,即查询不到pod
      
    • 参考:

  • 还有一个问题待解决找不到参数crt

猜你喜欢

转载自blog.csdn.net/scylhy/article/details/82314487