Kubeadm: النشر الجديد مع CoreDNS لا يحل أي بحث في نظام أسماء النطاقات

تم إنشاؤها على ١٤ أغسطس ٢٠١٨  ·  22تعليقات  ·  مصدر: kubernetes/kubeadm

شكرا لتقديم قضية! قبل الضغط على الزر ، يرجى الإجابة على هذه الأسئلة.

هل هذا تقرير خطأ أم طلب ميزة؟

تقرير الشوائب

إصدارات

إصدار kubeadm (استخدم 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"
  }
}

البيئة :

  • إصدار Kubernetes (استخدم 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"
  }
}
  • مزود السحابة أو تكوين الأجهزة :
    CentosOS 7 VM
  • نظام التشغيل (على سبيل المثال من / etc / os-release):
    إصدار CentOS Linux 7.5.1804 (Core)
  • Kernel (على سبيل المثال uname -a ):
    Linux K8S-master 3.10.0-862.9.1.el7.x86_64 # 1 SMP Mon Jul 16 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
  • آخرون :
    التواصل مع الفانيلا
$ 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

ماذا حدث؟

لقد أنشأت خدمة حتى يتمكن الكبسولة من تجعيد حجرة أخرى ، لكن لم يتم تحديد الاسم مطلقًا.
التنفيذ في الجراب:

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

في تثبيت أقدم حيث كان kube-dns هو الإعداد الافتراضي ، أتذكر خدمة مع IP 10.96.0.10 باسم "kube-dns". هذا التثبيت لا يحتوي على مثل هذه الخدمة.

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

ماذا توقعت أن يحدث؟

يجب حل بحث نظام أسماء النطاقات

كيف يتم إعادة إنتاجه (بأقل قدر ممكن من الدقة والدقة)؟

تثبيت جديد مع kubeadm و flannel ، CentOS 7 مع عقدة واحدة والماجستير يعمل أيضًا كعقدة.
قم بإنشاء جراب وخدمة ، حاول تجعيد الكبسولة داخل جراب.

أي شيء آخر نحن بحاجة إلى معرفته؟

عنوان IP الذي أراه داخل /etc/resolv.conf (10.96.0.10) هو نفسه الذي كان لدي مع kube-dns ، لكن هذه المرة لا أرى أي شيء في 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

التعليق الأكثر فائدة

الرجاء التحقق من المتغير clusterDNS في /var/lib/kubelet/config.yaml . بالنسبة لتكويننا ، تم تعيين هذا (بشكل غير صحيح) على 10.96.0.10 بينما كان يجب أن يكون 10.244.240.10 (هذا ما قمنا بتشغيله في نظامنا العنقودي). أدى تغيير هذا وإعادة تشغيل kubelet إلى إصلاح المشكلة بالنسبة لنا. قد تختلف المسافة المقطوعة بالرغم من ذلك.

ال 22 كومينتر

لأي سبب من الأسباب ، لا توجد خدمة kube-dns في مجموعتك.
ستحتاج أولاً إلى إعادة إنشاء ذلك يدويًا لإصلاح الأشياء. ثم يمكننا محاولة معرفة كيف اختفى.

يمكنك استخدام yaml هذا لإنشاء الخدمة بـ 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

ملاحظة: من غير البديهي أن اسم خدمة CoreDNS لا يزال يحمل اسم "kube-dns" ، ولكنه يحدد القرون المحورية (التي تستخدم تسمية المحدد "kube-dns").

أواجه نفس المشكلة مثل OP ، والوصف وحالة الاستخدام متماثلان تقريبًا: kubeadm على Centos 7.5 مع سيد واحد يعمل كعقدة عامل أيضًا. لدي نفس المشكلة ولدي الخدمة موجودة:

λ 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

من كبسولات CoreDNS ، لا يمكنني البحث عن العالم الخارجي ، والذي يبدو غريبًا:

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

بالنسبة لي ، هذا يعني أن CoreDNS pod لا يمكنه رؤية خادم الأسماء المنبع ، وهو 192.168.1.254 ، عنوان IP للشبكة المضيفة. هل أنا على الطريق الصحيح؟

ولكن الأمر الأكثر غرابة هو أن البود الذي يعمل على تلك العقدة الرئيسية يمكنه الوصول إلى عنوان IP هذا على ما يرام:

λ 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

هل يمكنك المحاولة باستخدام dig ؟

dig google.com @192.168.1.254

عادةً ما تحاول الأنظمة التي تحتوي على تكوين صالح لـ ipv6 حلها باستخدام محلل ipv6 هذا أولاً. إذا فشل ذلك ، فإن هذه الأنظمة تسميها فاشلة. ألقِ نظرة على الأمر dig أولاً إذا كان هذا يعمل وسأبحث لمعرفة ما إذا كان النظام قد تم تكوينه باستخدام مكدس مزدوج ipv4 ipv6 أم لا.

شكرًا مجددًا على mauilion لقضاء الكثير من الوقت في مساعدتي في تشخيص هذه المشكلة اليوم!

كان الحل (وإن كان سيئًا للغاية في الوقت الحالي) هو تعطيل خدمة firewalld على نظام التشغيل المضيف الخاص بي:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

ضع في اعتبارك ما يفعله هذا الأمر بالفعل. القيام بذلك على مسؤوليتك الخاصة.

واجهت نفس المشكلة مع kubernetes 1.11.2 و flannel 0.10.0 التي تم نشرها على CentOS 7 VM عبر kubeadm باستخدام وكيل kube مهيأ لاستخدام iptables. ما لاحظته هو أنه لم يكن لدي جراب لحمل أو جراب لخدمة الاتصالات بعد النشر الأولي. بالنظر إلى سلسلة FORWARD على iptables ، قام kube-proxy بإعداد سلسلة KUBE-FORWARD كقاعدة أولى والتي ينبغي ، عند الفحص ، التعامل مع كل حركة المرور التي وصفتها أعلاه. قام Flannel بإلحاق قاعدتين بعد قواعد DROP و REJECT الافتراضية في سلسلة CentOS 7 FORWARD. لقد لاحظت عندما أزلت قاعدة الرفض ، فإن القواعد التي أضافها Flannel ستعالج حركة المرور ، ويمكن أن تتواصل البودات الخاصة بي مع البودات الأخرى ومع الخدمة.

نظرًا لأن kube-proxy يراقب تغيير KUBE-FORWARD ويمنعه من التغيير ، فقد أضفت قاعدتين بعد قاعدة KUBE-FORWARD التي أضافت ctstate لـ NEW. بمجرد إضافة هذه القواعد ، ستتم معالجة حركة المرور الداخلية كما توقعت.

rules

الرجاء التحقق من المتغير clusterDNS في /var/lib/kubelet/config.yaml . بالنسبة لتكويننا ، تم تعيين هذا (بشكل غير صحيح) على 10.96.0.10 بينما كان يجب أن يكون 10.244.240.10 (هذا ما قمنا بتشغيله في نظامنا العنقودي). أدى تغيير هذا وإعادة تشغيل kubelet إلى إصلاح المشكلة بالنسبة لنا. قد تختلف المسافة المقطوعة بالرغم من ذلك.

pkeuter ، 10.244.0.0/16 هو الافتراضي _pod_ cidr لـ flannel. إذا كان الأمر كذلك في حالتك ، فسيكون 10.244.240.10 هو pod IP ، والذي لا يجب عليك استخدامه كإعداد IP للكتلة DNS (إعادة: يمكن أن يتغير ، لا يوجد موازنة تحميل).

ليس:
image

لقد قمنا بتمهيد المجموعة بـ: --pod-network-cidr=10.244.0.0/16 --service-cidr=10.244.240.0/20 ، ولكن كما أرى الآن هناك بعض التداخل ، والذي يجب أن أغيره على أي حال :-) لذا شكرًا على chrisohaver!

الرجاء التحقق من المتغير clusterDNS في /var/lib/kubelet/config.yaml . بالنسبة لتكويننا ، تم تعيين هذا (بشكل غير صحيح) على 10.96.0.10 بينما كان يجب أن يكون 10.244.240.10 (هذا ما قمنا بتشغيله في نظامنا العنقودي). أدى تغيير هذا وإعادة تشغيل kubelet إلى إصلاح المشكلة بالنسبة لنا. قد تختلف المسافة المقطوعة بالرغم من ذلك.

شكرًا لك على هذا - لقد ساعدني ذلك في تتبع سبب عدم حل طلبات DNS الداخلية الخاصة بي.

للرجوع إليها ، اضطررت إلى تعيين قيمة الكتلة DNS الخاصة بي على 192.168.0.10 لأنني بدأت kubeadm مع --service-cidr = 192.168.0.0 / 16 وخدمة kube-dns الخاصة بي بها عنوان IP الخارجي.

وتجدر الإشارة أيضًا إلى أن إعادة تشغيل kubelet لم تكن كافية - فقد اضطررت إلى إعادة تشغيل البودات ، لذلك تم تحديث /etc/resolv.conf. أحد الطلبات التي تم إجراؤها يتم حلها كما هو متوقع.

كان هناك عدد من القضايا المربكة على coreDNS التي تم حلها منذ ذلك الحين. نظرًا لمجموعة المشكلات المثقلة بالأعباء ، سأقوم بإغلاق هذه المشكلة.

إذا كانت هناك نسخ محددة على 1.12+ ، فلا تتردد في فتحها وسنتحدث في أسرع وقت ممكن.

الرجاء التحقق من المتغير clusterDNS في /var/lib/kubelet/config.yaml . بالنسبة لتكويننا ، تم تعيين هذا (بشكل غير صحيح) على 10.96.0.10 بينما كان يجب أن يكون 10.244.240.10 (هذا ما قمنا بتشغيله في نظامنا العنقودي). أدى تغيير هذا وإعادة تشغيل kubelet إلى إصلاح المشكلة بالنسبة لنا. قد تختلف المسافة المقطوعة بالرغم من ذلك.

رائع ، وأنا أستخدم كاليكو أي عنوان CLustDNS يجب علي تعيينه؟

لقد فعلت نفس الشيء ولكني واجهت نفس الخطأ لم تبدأ القرون النحاسية في إعطاء حالة الخطأ

لقد غيرت ClusterDNS الخاص بي ولكن لا يوجد تأثير justlooks

+1 مواجهة نفس المشكلة في CentOS 7 و kubeadm 1.11

تضمين التغريدة

أدت إضافة iptables -p FORWARD ACCEPT إصلاح المشكلة

+1 مواجهة نفس المشكلة في CentOS 7 و kubeadm 1.12

وجدت الحل لهذه المشكلة.
إزالة حدود الموارد على وحدة تحكم البرنامج الخفي لنظام أسماء النطاقات الأساسية حيث كانت تصل إلى حد وحدة المعالجة المركزية. مما جعله يعيد التشغيل.

ربما مشكلة الفانيلا ، في حالتي ، المتشرد لديه واجهة شبكة متغيرة ، لذلك يجب تحديد الواجهة عند نشر الفانيلا: - --iface=eth1 ، وإلا فإن مشكلة DNS نفسها ستحدث ...

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

vim https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml تعديل

......
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
......

شكرًا pkeuter ، لقد تم حل المشكلة واضطررت إلى حذف كبسولات coredns والسماح لهم بإعادة إنشائها.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات