【问题标题】:How to enable coredns for dns discovery on kubernetes version 1.14?如何在 kubernetes 1.14 版上启用 coredns 以进行 dns 发现?
【发布时间】:2019-09-17 16:06:04
【问题描述】:

我在 ubuntu bionickubernetes 1.14 版本中遇到服务 (DNS) 发现问题。

现在我的 2 个 Pod 使用 IP 地址进行通信。如何启用 coredns 以进行服务 (DNS) 发现?

这是 kube-system 命名空间中服务和 Pod 的 kubectl 输出:


    kubectl get pods,svc --namespace=kube-system | grep dns
    pod/coredns-fb8b8dccf-6plz2          1/1     Running            0          6d23h
    pod/coredns-fb8b8dccf-thxh6          1/1     Running            0          6d23h
    
    service/kube-dns        ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   6d23h

我已经使用以下步骤在主节点(ubuntu 仿生机器)上安装了 kubernetes


    apt-get update
    apt-get install     apt-transport-https     ca-certificates     curl     gnupg-agent     software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
    add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    apt-get update
    apt-get install docker-ce docker-ce-cli containerd.io
    apt-get update && apt-get install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb https://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    
    apt-get update
    apt-get install -y kubelet kubeadm kubectl
    kubectl version
    apt-mark hold kubelet kubeadm kubectl
    kubeadm config images pull
    swapoff -a
    kubeadm init
    
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    sysctl net.bridge.bridge-nf-call-iptables=1
    kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
    kubectl get pods --all-namespaces

这是在工作节点上

    Docker is already installed, so directly installing kubernetes on worker node
    apt-get update && apt-get install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb https://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    
    apt-get update
    apt-get install -y kubelet kubeadm kubectl
    kubectl version
    apt-mark hold kubelet kubeadm kubectl
    swapoff -a
    Now joined worker node to master

答案:-

我认为默认情况下所有设置都正确,我有一个误解,我可以使用我在规范中指定的容器名称和端口从另一个 pod 调用在一个 pod 中运行的服务器,但我应该使用 service名称和端口。

以下是我的部署规范和服务规范:-

部署规范:-

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: node-server1-deployment
    spec:
      replicas: 1
      template:
    metadata:
      labels:
        app: node-server1
    spec:
      hostname: node-server1
      containers:
      - name: node-server1
        image: bvenkatr/node-server1:1
        ports:
        - containerPort: 5551

服务规范:

    kind: Service
    apiVersion: v1
    metadata:
      name: node-server1-service
    spec:
      selector:
         app: node-server1
      ports:
      - protocol: TCP
        port: 5551

【问题讨论】:

  • 您是如何安装/部署 Kubernetes 的?
  • 嗨 @coderanger 我已经更新了我的问题,包括在 ubuntu bionic 上安装 kubernetes 的步骤

标签: kubernetes kube-dns coredns


【解决方案1】:

从 Kubernetes v1.12 开始,CoreDNS 是推荐的 DNS 服务器,取代了 kube-dns。在 Kubernetes 中,CoreDNS 使用以下默认 Corefile 配置安装:

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           upstream
           fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

更多信息你可以找到here

您可以通过运行来验证您的环境:

kubectl get cm coredns -n kube-system -o yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system

和: kubeadm 配置视图 域名解析: 类型:CoreDNS

在 kubeadm init 期间,您应该注意到:

[addons] Applied essential addon: CoreDNS

如果您要从 kube-dns 迁移到 CoreDNS,请确保在升级期间将 CoreDNS feature gate 设置为 true。例如,这是 v1.11.0 升级的样子: kubeadm upgrade apply v1.11.0 --feature-gates=CoreDNS=true

在 Kubernetes 1.13 及更高版本中,CoreDNS 功能门已被移除,默认使用 CoreDNS。更多信息here

您可以通过运行查看您的 coredns pod 是否正常工作:

kubectl logs <your coredns pod> -n kube-system
.:53
2019-05-02T13:32:41.438Z [INFO] CoreDNS-1.3.1
CoreDNS-1.3.1
.
.

【讨论】:

  • 好的,我会为 coreDns 加载上面的配置,并让你知道它是否有效。非常感谢您的回复。
  • @Hank,默认情况下一切都设置正确,我对在 pod 之间调用服务有误会。我已经用答案更新了我的问题。感谢您在调试方面的帮助。
  • 通过运行命令 "kubectl logs -n kube-system" ,我正在获取日志 - [警告] 没有文件匹配导入 glob 模式:自定义/*.server [警告] 否与导入 glob 模式匹配的文件:custom/*.override [警告] 没有与导入 glob 模式匹配的文件:custom/*.server [警告] 没有与导入 glob 模式匹配的文件:custom/*.override [警告] 没有与导入 glob 模式匹配的文件: custom/*.server [警告] 没有与导入 glob 模式匹配的文件:custom/*.override [警告] 没有与导入 glob 模式匹配的文件:custom/*.server
  • 谁能帮我理解这个?它曾经工作过吗?我可以重新部署 coredns pod 吗?重新部署 coredns pod 会影响我当前的部署吗?
猜你喜欢
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-11
  • 2019-03-16
  • 1970-01-01
  • 2018-10-31
相关资源
最近更新 更多