شكرا لتقديم قضية! قبل الضغط على الزر ، يرجى الإجابة على هذه الأسئلة.
تقرير الشوائب
إصدار 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"
}
}
البيئة :
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"
}
}
uname -a
):$ 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
لأي سبب من الأسباب ، لا توجد خدمة 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. بمجرد إضافة هذه القواعد ، ستتم معالجة حركة المرور الداخلية كما توقعت.
الرجاء التحقق من المتغير 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 (إعادة: يمكن أن يتغير ، لا يوجد موازنة تحميل).
ليس:
لقد قمنا بتمهيد المجموعة بـ: --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 والسماح لهم بإعادة إنشائها.
التعليق الأكثر فائدة
الرجاء التحقق من المتغير
clusterDNS
في/var/lib/kubelet/config.yaml
. بالنسبة لتكويننا ، تم تعيين هذا (بشكل غير صحيح) على10.96.0.10
بينما كان يجب أن يكون10.244.240.10
(هذا ما قمنا بتشغيله في نظامنا العنقودي). أدى تغيير هذا وإعادة تشغيل kubelet إلى إصلاح المشكلة بالنسبة لنا. قد تختلف المسافة المقطوعة بالرغم من ذلك.