Kubernetes: مشكلات الشهادة x509 بعد kubeadm init

تم إنشاؤها على ١ يوليو ٢٠١٧  ·  28تعليقات  ·  مصدر: kubernetes/kubernetes

تقرير الخطأ: (أعتقد؟)

ماذا حدث :

قمت بتنفيذ الخطوات التالية على Ubuntu 16.04:

  1. sudo apt-get update
  2. sudo apt-get upgrade
  3. sudo su
  4. kubeadm reset
  5. kubeadm init --token [redacted] --apiserver-advertise-address=192.168.13.1 --pod-network-cidr=10.244.0.0/16
  6. exit
  7. mkdir -p $HOME/.kube
  8. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  9. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  10. kubectl get nodes

عند القيام بذلك ، أتلقى:

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

لقد حاولت إلغاء تثبيت kubectl و kubeadm و kubelet بضع مرات (حتى مع --purge ) وبغض النظر عما أفعله ، فإنه (kubeadm 1.7 ) لا ينتج عنه عمل admin.conf . ومع ذلك ، أقوم بتشغيل ما يلي:

curl --cacert /etc/kubernetes/pki/ca.crt --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt --key /etc/kubernetes/pki/apiserver-kubelet-client.key https://192.168.13.1:6443

واحصل على:

{
  "paths": [
    "/api",
    "/api/v1",
    "/apis",
    "/apis/",
    "/apis/apiextensions.k8s.io",
    "/apis/apiextensions.k8s.io/v1beta1",
    "/apis/apiregistration.k8s.io",
    "/apis/apiregistration.k8s.io/v1beta1",
    "/apis/apps",
    "/apis/apps/v1beta1",
    "/apis/authentication.k8s.io",
    "/apis/authentication.k8s.io/v1",
    "/apis/authentication.k8s.io/v1beta1",
    "/apis/authorization.k8s.io",
    "/apis/authorization.k8s.io/v1",
    "/apis/authorization.k8s.io/v1beta1",
    "/apis/autoscaling",
    "/apis/autoscaling/v1",
    "/apis/batch",
    "/apis/batch/v1",
    "/apis/certificates.k8s.io",
    "/apis/certificates.k8s.io/v1beta1",
    "/apis/extensions",
    "/apis/extensions/v1beta1",
    "/apis/networking.k8s.io",
    "/apis/networking.k8s.io/v1",
    "/apis/policy",
    "/apis/policy/v1beta1",
    "/apis/rbac.authorization.k8s.io",
    "/apis/rbac.authorization.k8s.io/v1alpha1",
    "/apis/rbac.authorization.k8s.io/v1beta1",
    "/apis/settings.k8s.io",
    "/apis/settings.k8s.io/v1alpha1",
    "/apis/storage.k8s.io",
    "/apis/storage.k8s.io/v1",
    "/apis/storage.k8s.io/v1beta1",
    "/healthz",
    "/healthz/autoregister-completion",
    "/healthz/ping",
    "/healthz/poststarthook/apiservice-registration-controller",
    "/healthz/poststarthook/apiservice-status-available-controller",
    "/healthz/poststarthook/bootstrap-controller",
    "/healthz/poststarthook/ca-registration",
    "/healthz/poststarthook/extensions/third-party-resources",
    "/healthz/poststarthook/generic-apiserver-start-informers",
    "/healthz/poststarthook/kube-apiserver-autoregistration",
    "/healthz/poststarthook/rbac/bootstrap-roles",
    "/healthz/poststarthook/start-apiextensions-controllers",
    "/healthz/poststarthook/start-apiextensions-informers",
    "/healthz/poststarthook/start-kube-aggregator-informers",
    "/healthz/poststarthook/start-kube-apiserver-informers",
    "/logs",
    "/metrics",
    "/swagger-2.0.0.json",
    "/swagger-2.0.0.pb-v1",
    "/swagger-2.0.0.pb-v1.gz",
    "/swagger.json",
    "/swaggerapi",
    "/ui",
    "/ui/",
    "/version"
  ]
}

ما توقعت حدوثه :

بعد تهيئة البرنامج الرئيسي عبر kubeadm init ، توقعت أن أتمكن من استخدام kubectl لتثبيت مكون إضافي للشبكة ؛ نظرًا لأنه x509 ، لا يمكنني فعل ذلك.

البيئة :

  • إصدار Kubernetes (استخدم kubectl version ): 1.7
  • نظام التشغيل (على سبيل المثال من / etc / os-release): Ubuntu 16.04.2 LTS
  • Kernel (على سبيل المثال uname -a ): Linux radium-control 4.4.0-83-generic # 106-Ubuntu SMP Mon 26 Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU / Linux
arekubeadm sicluster-lifecycle

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

هل لديك $KUBECONFIG يشير إلى /etc/kubernetes/kubelet.conf ؟

export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get nodes

ال 28 كومينتر

carldanley لا توجد تسميات سيج على هذه المشكلة. الرجاء إضافة ملصق سيج من خلال:
(1) ذكر علامة التوقيع: @kubernetes/sig-<team-name>-misc
على سبيل المثال ، @kubernetes/sig-api-machinery-* لآلات API
(2) تحديد التسمية يدويًا: /sig <label>
على سبيل المثال ، /sig scalability للتوقيع / قابلية التوسع

_ملاحظة: الطريقة (1) ستطلق إخطارًا للفريق. يمكنك العثور على قائمة الفريق هنا وقائمة التسمية هنا _

/ sig الكتلة-دورة الحياة

لست متأكدًا مما إذا كان هذا مفيدًا ، ولكن كان لدي نفس الشيء وأدركت أنني كنت أستخدم دليل الإعداد القديم ، حيث قمت بنسخ /etc/kubernetes/admin.conf إلى ~/.kube/admin.conf وإعداد $KUBECONFIG=$HOME/.kube/admin.conf . قمت بمسح متغير البيئة وعادت الإعدادات الافتراضية kubectl إلى استخدام ~/.kube/config .

أرى هذا أيضًا باستخدام kubeadm v1.7 - إنه يمنع العقد من الانضمام إلى الكتلة

نفس الخطأ في التثبيت الخاص بي. جرب مع v1.6.5 و 1.6.7 يعمل بشكل جيد.

نفس المشكلة هنا.

.

(يبدو أن kubeadm init بخير)

ns2 ~ # kubeadm init
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.7.3
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks
[preflight] WARNING: docker version is greater than the most recently validated version. Docker version: 17.03.1-ce. Max validated version: 1.12
[preflight] WARNING: no supported init system detected, skipping checking for services
[preflight] WARNING: no supported init system detected, skipping checking for services
[preflight] WARNING: no supported init system detected, skipping checking for services
[preflight] WARNING: socat not found in system path
[preflight] No supported init system detected, won't ensure kubelet is running.
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [ns2 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 ip_of_my_server]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 36.004283 seconds
[token] Using token: 62af23.9fba33a48799d425
[apiconfig] Created RBAC rules
[addons] Applied essential addon: kube-proxy
[addons] Applied essential addon: kube-dns

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join --token [some string] [ip_of_my_server]:6443

(يبدو kubeadm join جيدًا أيضًا)

h1 ~ # kubeadm join --token [some string] [ip_of_my_server]:6443 --skip-preflight-checks 
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[preflight] Skipping pre-flight checks
[discovery] Trying to connect to API Server "192.168.0.254:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://192.168.0.254:6443"
[discovery] Cluster info signature and contents are valid, will use API Server "https://192.168.0.254:6443"
[discovery] Successfully established connection with API Server "192.168.0.254:6443"
[bootstrap] Detected server version: v1.7.3
[bootstrap] The server supports the Certificates API (certificates.k8s.io/v1beta1)
[csr] Created API client to obtain unique certificate for this node, generating keys and certificate signing request
[csr] Received signed certificate from the API server, generating KubeConfig...
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"

Node join complete:
* Certificate signing request sent to master and response
  received.
* Kubelet informed of new secure connection details.

Run 'kubectl get nodes' on the master to see this machine join.

(لكن فشل kubectl get nodes )

byungnam2<strong i="17">@ns2</strong> ~ $ kubectl get nodes
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

هل لديك $KUBECONFIG يشير إلى /etc/kubernetes/kubelet.conf ؟

export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get nodes

liggitt بعد أن قمت بتعيين $KUBECONFIG إلى /etc/kubernetes/kubelet.conf ، الآن يعطيني خطأ المهلة.

ns2 ~ # ./kubernetes/kubernetes/server/bin/kubectl get nodes
Error from server (ServerTimeout): the server cannot complete the requested operation at this time, try again later (get nodes)

والآن أريد من أين أتى $KUBECONFIG لأنه لا يوجد مثل هذا البيان في الدليل الذي أشير إليه.

من إخراج أمر ربط العقدة:

[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"

واجهت نفس المشكلة أثناء اللعب مع kubeadm.

بعد kubeadm init و kubeadm reset لبضع مرات ، سيفشل kubelet في التواصل مع apiserver بسبب certificate signed by unknown authority (في سجلات kubelet). وأيضًا كتل kubeadm init إلى الأبد.

بعد إزالة /run/kubernetes/ يدويًا ، تعود كل الأشياء. ربما توجد مشاكل في تنظيف الشهادات عند تشغيل kubeadm reset ؟

/ منطقة kubeadm

أنا على kubeadm 1.8 وما زالت هذه المشكلة تحدث.

ubuntu@ip-172-31-9-157:~$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean", BuildDate:"2017-09-28T22:46:41Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$ kubectl get nodes
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$
ubuntu@ip-172-31-9-157:~$

لقد تحققت يدويًا من /var/run/kubernetes . تم تنظيفه عندما قمت بتشغيل kubeadm reset . لست متأكدا ما هي المشكلة الفعلية.

تنبيه: "لبدء استخدام مجموعتك ، تحتاج إلى التشغيل (كمستخدم عادي)"

[ root @ master1 ~] # kubectl الحصول على العقد
تعذر الاتصال بالخادم: x509: شهادة موقعة من سلطة غير معروفة (ربما بسبب "تشفير / rsa: خطأ في التحقق" أثناء محاولة التحقق من شهادة سلطة المرشح "kubernetes")

[ root @ master1 ~] # su - normal_user

[ normal_user @ master1 ~] $ mkdir -p $ HOME / .kube
[ normal_user @ master1 ~] $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
[ normal_user @ master1 ~] $ sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

[ normal_user @ master1 ~] $ kubectl الحصول على العقد
اسم الحالة الأدوار العمر
master1.virti.corp NotReady master 6m v1.8.1
master2.virti.corp ليس جاهزًا4 م v1.8.1

@ jeffbr13 شكرا. إنها تعمل.

يرجى تحديث المستندات بهذا الحل البديل

إذا قمت بإعادة تعيين kubeadm ثم kubeadm init مرة أخرى ، وإذا قمت بتشغيل ما يلي كجذر ، فستحتاج إلى تشغيله مرة أخرى (كجذر) للحصول على التكوين الجديد:
mkdir -p $ HOME / .kube
sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

ثم لا يزال بإمكانك الجري كجذر.

إذا وجدت أنه إذا كنت تريد تشغيل "sudo kubeadm reset" ، فستحتاج إلى إزالة .kube dir لمسح dirs المخزنة مؤقتًا.
بعد ذلك يمكنك متابعةpetersonwsantos
أوه ، تأكد من تعيين KUBECONFIG على كل ما (تعيد) تسمية ملف التكوين الخاص بك على سبيل المثال $ HOME / .kube / config

الدبابات فريند ints صحيح.

التكوين كالأسطر التالية ، _ $ kubectl get nodes_ يعمل:

_root: ~ / k8s # cat 04-config.sh
mkdir -p $ HOME / .kube
sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config
sudo chmod 777 $ HOME / .kube / config
تصدير KUBECONFIG = / etc / kubernetes / kubelet.conf
تصدير KUBECONFIG = / home / ubuntu / .kube / config
kubectl الحصول على العقد

هذا على الأرجح لأن لديك إعدادًا متعدد المستويات ولديك /etc/kubernetes/pki/ca.* على كل من الماجستير. بدلاً من نسخها من السيد الأول إلى الباقي.

لقد وجدت الحل في وثائق kubernetes
أثناء اتباع التوثيق ، لا تنس إنشاء دليل .kube باستخدام هذا الأمر
mkdir -p $HOME/.kube

نظرًا لأنك تحتاج إلى هذا الأمر ، فسيتم نقل دليل .kube
mv $HOME/.kube $HOME/.kube.bak

https://kubernetes.io/docs/setup/independent/troubleshooting-kubeadm/

بالنسبة للآخرين الذين قد يواجهون هذه المشكلة ، قد ترغب في محاولة نقل المجلد /root/.kube إلى موقع النسخ الاحتياطي إذا كان موجودًا وإعادة المحاولة. من الممكن جدًا استخدام إصدار جذر مخبأ لم يعد صالحًا ، حيث ستقوم بتشغيل kubeadm كـ sudo.

كانت مشكلتي أن لدي شهادات مخصصة قمت بإنشائها أثناء دليل KubeEdge Getting Started. لا العبث مع ssl و kubeedge جعلها تعمل.

تنبيه: "لبدء استخدام مجموعتك ، تحتاج إلى التشغيل (كمستخدم عادي)"

[ root @ master1 ~] # kubectl الحصول على العقد
تعذر الاتصال بالخادم: x509: شهادة موقعة من سلطة غير معروفة (ربما بسبب "تشفير / rsa: خطأ في التحقق" أثناء محاولة التحقق من شهادة سلطة المرشح "kubernetes")

[ root @ master1 ~] # su - normal_user

[ normal_user @ master1 ~] $ mkdir -p $ HOME / .kube
[ normal_user @ master1 ~] $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
[ normal_user @ master1 ~] $ sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

هذا يعمل. فيما عدا أنه كان علي ضبط KUBECONFIG الخاص بي مرة أخرى حيث تم تغيير ذلك

تصدير KUBECONFIG = $ HOME / .kube / config

[ normal_user @ master1 ~] $ kubectl الحصول على العقد
اسم الحالة الأدوار العمر
master1.virti.corp NotReady master 6m v1.8.1
master2.virti.corp NotReady 4m v1.8.1

هل لديك $KUBECONFIG يشير إلى /etc/kubernetes/kubelet.conf ؟

export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get nodes

هذا يناسبني ، شكرًا جزيلاً.

تصدير KUBECONFIG = / etc / kubernetes / kubelet.conf
kubectl الحصول على العقد

هو عمل مني

تنبيه: "لبدء استخدام مجموعتك ، تحتاج إلى التشغيل (كمستخدم عادي)"

[ root @ master1 ~] # kubectl الحصول على العقد
تعذر الاتصال بالخادم: x509: شهادة موقعة من سلطة غير معروفة (ربما بسبب "تشفير / rsa: خطأ في التحقق" أثناء محاولة التحقق من شهادة سلطة المرشح "kubernetes")

[ root @ master1 ~] # su - normal_user

[ normal_user @ master1 ~] $ mkdir -p $ HOME / .kube
[ normal_user @ master1 ~] $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
[ normal_user @ master1 ~] $ sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

[ normal_user @ master1 ~] $ kubectl الحصول على العقد
اسم الحالة الأدوار العمر
master1.virti.corp NotReady master 6m v1.8.1
master2.virti.corp NotReady 4m v1.8.1

نجح هذا!

بعد kubeadm init عليك إزالة مجلد $ HOME / .kube وإنشاء جديد:

mkdir -p $ HOME / .kube
sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
sudo chown $ (id -u): $ (id -g) $ HOME / .kube / config

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