Kubeadm: Penerapan baru dengan CoreDNS tidak menyelesaikan pencarian dns apa pun

Dibuat pada 14 Agu 2018  ·  22Komentar  ·  Sumber: kubernetes/kubeadm

Terima kasih telah mengajukan masalah! Sebelum menekan tombol, harap jawab pertanyaan-pertanyaan ini.

Apakah ini LAPORAN BUG atau PERMINTAAN FITUR?

LAPORAN BUG

Versi

versi kubeadm (gunakan kubeadm version ):

{
  "clientVersion": {
    "major": "1",
    "minor": "11",
    "gitVersion": "v1.11.2",
    "gitCommit": "bb9ffb1654d4a729bb4cec18ff088eacc153c239",
    "gitTreeState": "clean",
    "buildDate": "2018-08-07T23:14:39Z",
    "goVersion": "go1.10.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}

Lingkungan :

  • Versi Kubernetes (gunakan kubectl version ):
{
  "clientVersion": {
    "major": "1",
    "minor": "11",
    "gitVersion": "v1.11.2",
    "gitCommit": "bb9ffb1654d4a729bb4cec18ff088eacc153c239",
    "gitTreeState": "clean",
    "buildDate": "2018-08-07T23:17:28Z",
    "goVersion": "go1.10.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  },
  "serverVersion": {
    "major": "1",
    "minor": "11",
    "gitVersion": "v1.11.2",
    "gitCommit": "bb9ffb1654d4a729bb4cec18ff088eacc153c239",
    "gitTreeState": "clean",
    "buildDate": "2018-08-07T23:08:19Z",
    "goVersion": "go1.10.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}
  • Penyedia cloud atau konfigurasi perangkat keras :
    CentosOS 7 VM
  • OS (misalnya dari / etc / os-release):
    Rilis CentOS Linux 7.5.1804 (Core)
  • Kernel (misalnya uname -a ):
    Linux K8S-master 3.10.0-862.9.1.el7.x86_64 # 1 SMP Sen 16 Juli 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
  • Lainnya :
    Jaringan dengan flanel
$ kubectl get all --all-namespaces 
NAMESPACE     NAME                                     READY     STATUS    RESTARTS   AGE
kube-system   pod/coredns-78fcdf6894-bvtcg             1/1       Running   2          3h
kube-system   pod/coredns-78fcdf6894-lq7st             1/1       Running   2          3h
kube-system   pod/etcd-k8s-master                      1/1       Running   1          3h
kube-system   pod/kube-apiserver-k8s-master            1/1       Running   1          3h
kube-system   pod/kube-controller-manager-k8s-master   1/1       Running   1          3h
kube-system   pod/kube-flannel-ds-6tgqf                1/1       Running   2          3h
kube-system   pod/kube-flannel-ds-cn4ql                1/1       Running   1          3h
kube-system   pod/kube-proxy-cjlvz                     1/1       Running   1          3h
kube-system   pod/kube-proxy-w7ts7                     1/1       Running   1          3h
kube-system   pod/kube-scheduler-k8s-master            1/1       Running   1          3h

NAMESPACE   NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
default     service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   3h

NAMESPACE     NAME                             DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR                   AGE
kube-system   daemonset.apps/kube-flannel-ds   2         2         2         2            2           beta.kubernetes.io/arch=amd64   3h
kube-system   daemonset.apps/kube-proxy        2         2         2         2            2           beta.kubernetes.io/arch=amd64   3h

NAMESPACE     NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/coredns   2         2         2            2           3h

NAMESPACE     NAME                                 DESIRED   CURRENT   READY     AGE
kube-system   replicaset.apps/coredns-78fcdf6894   2         2         2         3h

Apa yang terjadi?

Saya telah membuat sebuah layanan sehingga sebuah pod dapat menggulung pod lain, tetapi namanya tidak pernah diselesaikan.
Menjalankan ke dalam pod:

# cat /etc/resolv.conf 
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

Dalam instalasi lama di mana kube-dns adalah defaultnya, saya ingat sebuah layanan dengan IP 10.96.0.10 dengan nama "kube-dns". Instalasi ini tidak memiliki layanan seperti itu.

curl my-service 
curl: (6) Could not resolve host: my-service

curl my-service.default.svc.cluster.local 
curl: (6) Could not resolve host: my-service.default.svc.cluster.local

curl www.google.com
curl: (6) Could not resolve host: www.google.com

Apa yang Anda harapkan terjadi?

Pencarian dns harus diselesaikan

Bagaimana cara memperbanyaknya (seminimal dan setepat mungkin)?

Instal baru dengan kubeadm dan flanel, CentOS 7 dengan satu node dan master juga bertindak sebagai node.
Buat sebuah pod dan layanan, cobalah untuk menggulung pod di dalam sebuah pod.

Ada hal lain yang perlu kami ketahui?

Alamat IP yang saya lihat di dalam /etc/resolv.conf (10.96.0.10) sama dengan yang saya miliki dengan kube-dns, tetapi kali ini saya tidak melihat apa pun di 10.96.0.10.

$ kubectl logs -f --namespace=kube-system coredns-78fcdf6894-bvtcg 
.:53
CoreDNS-1.1.3
linux/amd64, go1.10.1, b0fd575c
2018/08/14 15:34:06 [INFO] CoreDNS-1.1.3
2018/08/14 15:34:06 [INFO] linux/amd64, go1.10.1, b0fd575c
2018/08/14 15:34:06 [INFO] plugin/reload: Running configuration MD5 = 2a066f12ec80aeb2b92740dd74c17138
^C
$ kubectl logs -f --namespace=kube-system coredns-78fcdf6894-lq7st 
.:53
2018/08/14 15:34:06 [INFO] CoreDNS-1.1.3
2018/08/14 15:34:06 [INFO] linux/amd64, go1.10.1, b0fd575c
2018/08/14 15:34:06 [INFO] plugin/reload: Running configuration MD5 = 2a066f12ec80aeb2b92740dd74c17138
CoreDNS-1.1.3
linux/amd64, go1.10.1, b0fd575c
help wanted prioritawaiting-more-evidence

Komentar yang paling membantu

Silakan periksa variabel clusterDNS di /var/lib/kubelet/config.yaml . Untuk konfigurasi kami, ini disetel (salah) ke 10.96.0.10 sedangkan seharusnya 10.244.240.10 (itulah yang kami gunakan untuk bootstrap cluster kami). Mengubah ini dan memulai ulang kubelet memperbaiki masalah bagi kami. Jarak tempuh Anda mungkin berbeda-beda.

Semua 22 komentar

Untuk alasan apa pun, tidak ada layanan kube-dns di kluster Anda.
Pertama-tama Anda harus membuatnya kembali dengan tangan untuk memperbaiki berbagai hal. Kemudian kita bisa mencoba mencari tahu bagaimana itu menghilang.

Anda dapat menggunakan yaml ini untuk membuat layanan dengan kubectl apply -f ...

apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  annotations:
    prometheus.io/port: "9153"
    prometheus.io/scrape: "true"
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: "CoreDNS"
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

Catatan: Ini berlawanan dengan intuisi bahwa nama layanan CoreDNS masih bernama "kube-dns", tetapi ia memilih pod coredns (yang menggunakan label pemilih "kube-dns ').

Saya mengalami masalah yang sama dengan OP, dan deskripsi serta kasus penggunaan hampir sama: kubeadm di Centos 7.5 dengan satu master yang juga beroperasi sebagai node pekerja. Saya memiliki masalah yang sama dan saya layanannya ADA:

λ k get all --all-namespaces
NAMESPACE        NAME                                                READY     STATUS             RESTARTS   AGE
default          pod/busybox                                         0/1       Error              0          28m
default          pod/gitlab-gitlab-fd8b9fb85-26mkz                   0/1       CrashLoopBackOff   6          50m
default          pod/gitlab-minio-7fb7886d94-2zsff                   1/1       Running            0          50m
default          pod/gitlab-postgresql-8684bb6656-ltxjm              1/1       Running            0          50m
default          pod/gitlab-redis-785447c586-84x4c                   1/1       Running            0          50m
default          pod/ldap-79bb8c66b9-68v9f                           1/1       Running            0          2d
default          pod/local-volume-provisioner-dkxm9                  1/1       Running            0          2d
kube-system      pod/coredns-78fcdf6894-2t8tv                        1/1       Running            0          2d
kube-system      pod/coredns-78fcdf6894-wvq26                        1/1       Running            0          2d
kube-system      pod/etcd-server1.stitches.tech                      1/1       Running            0          2d
kube-system      pod/kube-apiserver-server1.domain            1/1       Running            0          2d
kube-system      pod/kube-controller-manager-server1.domain   1/1       Running            0          2d
kube-system      pod/kube-flannel-ds-m9cz5                           1/1       Running            0          2d
kube-system      pod/kube-proxy-qhr8p                                1/1       Running            0          2d
kube-system      pod/kube-scheduler-server1.domain            1/1       Running            0          2d
kube-system      pod/kubernetes-dashboard-6948bdb78-qnp4b            1/1       Running            0          2d
kube-system      pod/tiller-deploy-56c4cf647b-64w8v                  1/1       Running            0          2d
metallb-system   pod/controller-9c57dbd4-fqhzb                       1/1       Running            0          2d
metallb-system   pod/speaker-tngv7                                   1/1       Running            0          2d

NAMESPACE     NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                   AGE
default       service/gitlab-gitlab          LoadBalancer   10.102.204.34   192.168.1.201   22:32208/TCP,80:32194/TCP,443:31370/TCP   50m
default       service/gitlab-minio           ClusterIP      None            <none>          9000/TCP                                  50m
default       service/gitlab-postgresql      ClusterIP      10.108.66.88    <none>          5432/TCP                                  50m
default       service/gitlab-redis           ClusterIP      10.97.59.57     <none>          6379/TCP                                  50m
default       service/kubernetes             ClusterIP      10.96.0.1       <none>          443/TCP                                   2d
default       service/ldap-service           LoadBalancer   10.101.250.10   192.168.1.200   389:32231/TCP                             2d
kube-system   service/kube-dns               ClusterIP      10.96.0.10      <none>          53/UDP,53/TCP                             2d
kube-system   service/kubernetes-dashboard   NodePort       10.104.132.52   <none>          443:30924/TCP                             2d
kube-system   service/tiller-deploy          ClusterIP      10.96.67.163    <none>          44134/TCP                                 2d

NAMESPACE        NAME                                      DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR                   AGE
default          daemonset.apps/local-volume-provisioner   1         1         1         1            1           <none>                          2d
kube-system      daemonset.apps/kube-flannel-ds            1         1         1         1            1           beta.kubernetes.io/arch=amd64   2d
kube-system      daemonset.apps/kube-proxy                 1         1         1         1            1           beta.kubernetes.io/arch=amd64   2d
metallb-system   daemonset.apps/speaker                    1         1         1         1            1           <none>                          2d

NAMESPACE        NAME                                   DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
default          deployment.apps/gitlab-gitlab          1         1         1            0           50m
default          deployment.apps/gitlab-minio           1         1         1            1           50m
default          deployment.apps/gitlab-postgresql      1         1         1            1           50m
default          deployment.apps/gitlab-redis           1         1         1            1           50m
default          deployment.apps/ldap                   1         1         1            1           2d
kube-system      deployment.apps/coredns                2         2         2            2           2d
kube-system      deployment.apps/kubernetes-dashboard   1         1         1            1           2d
kube-system      deployment.apps/tiller-deploy          1         1         1            1           2d
metallb-system   deployment.apps/controller             1         1         1            1           2d

NAMESPACE        NAME                                             DESIRED   CURRENT   READY     AGE
default          replicaset.apps/gitlab-gitlab-fd8b9fb85          1         1         0         50m
default          replicaset.apps/gitlab-minio-7fb7886d94          1         1         1         50m
default          replicaset.apps/gitlab-postgresql-8684bb6656     1         1         1         50m
default          replicaset.apps/gitlab-redis-785447c586          1         1         1         50m
default          replicaset.apps/ldap-79bb8c66b9                  1         1         1         2d
kube-system      replicaset.apps/coredns-78fcdf6894               2         2         2         2d
kube-system      replicaset.apps/kubernetes-dashboard-6948bdb78   1         1         1         2d
kube-system      replicaset.apps/tiller-deploy-56c4cf647b         1         1         1         2d
kube-system      replicaset.apps/tiller-deploy-64c9d747bd         0         0         0         2d
metallb-system   replicaset.apps/controller-9c57dbd4              1         1         1         2d

Dari pod CoreDNS, saya tidak bisa melakukan pencarian ke dunia luar, yang tampaknya aneh:

root on server1 at 11:45:48 AM in /internal/gitlab
λ k exec -it coredns-78fcdf6894-2t8tv /bin/sh -n kube-system
/ # cat /etc/resolv.conf
nameserver 192.168.1.254
nameserver 2600:1700:c540:64c0::1
search attlocal.net domain
/ # host gitlab
;; connection timed out; no servers could be reached
/ # host google.com
;; connection timed out; no servers could be reached

Bagi saya, ini berarti pod CoreDNS tidak dapat melihat nameserver upstreamnya, yaitu 192.168.1.254, IP dari jaringan host. Apakah saya di jalur yang benar?

Tapi, yang lebih aneh lagi, adalah pod yang berjalan pada node master itu DAPAT mencapai alamat IP itu dengan baik:

λ kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
If you don't see a command prompt, try pressing enter.
dnstools# ping 192.168.1.254
PING 192.168.1.254 (192.168.1.254): 56 data bytes
64 bytes from 192.168.1.254: seq=0 ttl=63 time=1.102 ms

Bisakah Anda mencoba dengan dig ?

dig google.com @192.168.1.254

Juga biasanya sistem dengan konfigurasi ipv6 yang valid akan mencoba menyelesaikan dengan resolver ipv6 itu terlebih dahulu. Jika gagal, sistem ini menyebutnya kegagalan. Lihatlah perintah dig terlebih dahulu jika itu berfungsi, saya akan melihat apakah sistem dikonfigurasi dengan tumpukan ganda ipv4 ipv6 atau tidak.

Sekali lagi terima kasih kepada @mauilion karena telah menghabiskan begitu banyak waktu membantu saya mendiagnosis masalah ini hari ini!

Solusi saya (meskipun cukup mengerikan untuk saat ini) adalah menonaktifkan layanan firewalld di OS host saya:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Ingatlah apa yang sebenarnya dilakukan oleh perintah itu. Lakukan dengan resiko Anda sendiri.

Saya mengalami masalah yang sama dengan kubernetes 1.11.2 dan flanel 0.10.0 yang di-deploy ke VM CentOS 7 melalui kubeadm dengan proxy-kube yang dikonfigurasi untuk menggunakan iptables. Apa yang saya perhatikan adalah bahwa saya tidak memiliki komunikasi pod to pod atau pod to service setelah penerapan awal. Melihat rantai FORWARD di iptables, kube-proxy menyiapkan rantai KUBE-FORWARD sebagai aturan pertama yang harus, setelah diperiksa, menangani semua lalu lintas yang saya jelaskan di atas. Flanel menambahkan dua aturan setelah aturan DROP dan REJECT yang default di rantai CentOS 7 FORWARD. Saya perhatikan ketika saya menghapus aturan TOLAK, maka aturan yang ditambahkan oleh Flanel akan memproses lalu lintas, dan pod saya dapat berkomunikasi dengan pod lain dan dengan ips layanan.

Karena kube-proxy memonitor perubahan KUBE-FORWARD dan menjaganya agar tidak berubah, saya menambahkan dua aturan setelah aturan KUBE-FORWARD yang menambahkan ctstate NEW. Setelah saya menambahkan aturan ini, lalu lintas internal akan diproses seperti yang saya harapkan.

rules

Silakan periksa variabel clusterDNS di /var/lib/kubelet/config.yaml . Untuk konfigurasi kami, ini disetel (salah) ke 10.96.0.10 sedangkan seharusnya 10.244.240.10 (itulah yang kami gunakan untuk bootstrap cluster kami). Mengubah ini dan memulai ulang kubelet memperbaiki masalah bagi kami. Jarak tempuh Anda mungkin berbeda-beda.

@pkeuter , 10.244.0.0/16 adalah default _pod_ cidr untuk flanel. Jika demikian dalam kasus Anda, maka 10.244.240.10 akan menjadi IP pod, yang tidak boleh Anda gunakan sebagai pengaturan ip cluster-dns Anda (re: dapat berubah, tanpa load balancing).

Bukan itu:
image

Kami telah mem-bootstrap cluster dengan: --pod-network-cidr=10.244.0.0/16 --service-cidr=10.244.240.0/20 , tetapi seperti yang saya lihat sekarang ada beberapa tumpang tindih, yang harus saya ubah :-) Jadi terima kasih untuk @chrisohaver itu!

Silakan periksa variabel clusterDNS di /var/lib/kubelet/config.yaml . Untuk konfigurasi kami, ini disetel (salah) ke 10.96.0.10 sedangkan seharusnya 10.244.240.10 (itulah yang kami gunakan untuk bootstrap cluster kami). Mengubah ini dan memulai ulang kubelet memperbaiki masalah bagi kami. Jarak tempuh Anda mungkin berbeda-beda.

Terima kasih untuk ini - ini membantu saya melacak mengapa permintaan DNS internal saya tidak terselesaikan.

Sebagai referensi, saya harus menetapkan nilai clusterDNS saya ke 192.168.0.10 saat saya memulai kubeadm dengan --service-cidr = 192.168.0.0 / 16 dan layanan kube-dns saya memilikinya sebagai IP eksternalnya.

Yang juga perlu diperhatikan, memulai ulang kubelet saja tidak cukup - saya harus me-restart pod saya sehingga /etc/resolv.conf telah diperbarui. Salah satu permintaan selesai diselesaikan seperti yang diharapkan.

Ada sejumlah masalah terkait pada coreDNS yang telah diselesaikan. Mengingat serangkaian masalah yang kelebihan beban, saya akan menutup masalah ini.

Jika ada repro tertentu di 1.12+ jangan ragu untuk membuka dan kami akan menangani secepatnya.

Silakan periksa variabel clusterDNS di /var/lib/kubelet/config.yaml . Untuk konfigurasi kami, ini disetel (salah) ke 10.96.0.10 sedangkan seharusnya 10.244.240.10 (itulah yang kami gunakan untuk bootstrap cluster kami). Mengubah ini dan memulai ulang kubelet memperbaiki masalah bagi kami. Jarak tempuh Anda mungkin berbeda-beda.

bagus, dan saya menggunakan calico alamat clusterDNS mana yang harus saya tetapkan?

Saya melakukan hal yang sama tetapi menghadapi kesalahan yang sama pod coredns saya tidak mulai memberikan status kesalahan

Saya mengubah ClusterDNS saya tetapi masih tidak ada efek @justlooks

+1 Menghadapi masalah yang sama di CentOS 7 dan kubeadm 1.11

@tokopedia

Menambahkan iptables -p FORWARD ACCEPT memperbaiki masalah

+1 Menghadapi masalah yang sama di CentOS 7 dan kubeadm 1.12

menemukan resolusi untuk masalah tersebut.
menghapus batas sumber daya pada pengontrol daemon dns inti karena telah mencapai batas cpu. yang membuatnya dimulai ulang.

Mungkin masalah flanel, dalam kasus saya, gelandangan memiliki antarmuka jaringan mutil, jadi harus menentukan antarmuka saat menerapkan flanel: - --iface=eth1 , jika tidak masalah dns yang sama akan terjadi ...

https://github.com/kubernetes/kubernetes/issues/39701

vim https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml dimodifikasi sebagai berikut:

......
containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.11.0-amd64
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=eth1
......

Terima kasih @pkeuter , Ini memperbaiki masalah dan saya harus menghapus pod inti dan membiarkan mereka membuatnya kembali.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat