Сертификат x509, подписанный неизвестным лицом - Кубернетес
Я настраиваю кластер Kubernetes с двумя узлами в coreos, как описано в https://coreos.com/kubernetes/docs/latest/getting-started.html без фланели. Оба сервера находятся в одной сети.
Но я получаю: x509: сертификат, подписанный неизвестным полномочным лицом (возможно, из-за "crypto/rsa: ошибка проверки" при попытке проверить сертификат уполномоченного органа "kube-ca") при запуске kubelet в работнике.
Я правильно настроил сертификаты TLS на обоих серверах, как описано в документации.
Мастер-узел работает нормально. И kubectl способен стрелять контейнеры и контейнеры в мастер.
Вопрос 1: Как решить эту проблему?
Вопросы 2: Есть ли способ настроить кластер без сертификатов TLS.?
Coreos version:
VERSION=899.15.0
VERSION_ID=899.15.0
BUILD_ID=2016-04-05-1035
PRETTY_NAME="CoreOS 899.15.0"
Etcd conf:
$ etcdctl member list
ce2a822cea30bfca: name=78c2c701d4364a8197d3f6ecd04a1d8f peerURLs=http://localhost:2380,http://localhost:7001 clientURLs=http://172.24.0.67:2379
Мастер: kubelet.service:
[Service]
ExecStartPre=/usr/bin/mkdir -p /etc/kubernetes/manifests
Environment=KUBELET_VERSION=v1.2.2_coreos.0
ExecStart=/opt/bin/kubelet-wrapper \
--api-servers=http://127.0.0.1:8080 \
--register-schedulable=false \
--allow-privileged=true \
--config=/etc/kubernetes/manifests \
--hostname-override=172.24.0.67 \
--cluster-dns=10.3.0.10 \
--cluster-domain=cluster.local
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Мастер: kube-controller.yaml
apiVersion: v1
kind: Pod
metadata:
name: kube-controller-manager
namespace: kube-system
spec:
hostNetwork: true
containers:
- name: kube-controller-manager
image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
command:
- /hyperkube
- controller-manager
- --master=http://127.0.0.1:8080
- --leader-elect=true
- --service-account-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem
- --root-ca-file=/etc/kubernetes/ssl/ca.pem
livenessProbe:
httpGet:
host: 127.0.0.1
path: /healthz
port: 10252
initialDelaySeconds: 15
timeoutSeconds: 1
volumeMounts:
- mountPath: /etc/kubernetes/ssl
name: ssl-certs-kubernetes
readOnly: true
- mountPath: /etc/ssl/certs
name: ssl-certs-host
readOnly: true
volumes:
- hostPath:
path: /etc/kubernetes/ssl
name: ssl-certs-kubernetes
- hostPath:
path: /usr/share/ca-certificates
name: ssl-certs-host
Мастер: kube-proxy.yaml
apiVersion: v1
kind: Pod
metadata:
name: kube-proxy
namespace: kube-system
spec:
hostNetwork: true
containers:
- name: kube-proxy
image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
command:
- /hyperkube
- proxy
- --master=http://127.0.0.1:8080
securityContext:
privileged: true
volumeMounts:
- mountPath: /etc/ssl/certs
name: ssl-certs-host
readOnly: true
volumes:
- hostPath:
path: /usr/share/ca-certificates
name: ssl-certs-host
Мастер: kube-apiserver.yaml
apiVersion: v1
kind: Pod
metadata:
name: kube-apiserver
namespace: kube-system
spec:
hostNetwork: true
containers:
- name: kube-apiserver
image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
command:
- /hyperkube
- apiserver
- --bind-address=0.0.0.0
- --etcd-servers=http://172.24.0.67:2379
- --allow-privileged=true
- --service-cluster-ip-range=10.3.0.0/24
- --secure-port=443
- --advertise-address=172.24.0.67
- --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota
- --tls-cert-file=/etc/kubernetes/ssl/apiserver.pem
- --tls-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem
- --client-ca-file=/etc/kubernetes/ssl/ca.pem
- --service-account-key-file=/etc/kubernetes/ssl/apiserver-key.pem
ports:
- containerPort: 443
hostPort: 443
name: https
- containerPort: 8080
hostPort: 8080
name: local
volumeMounts:
- mountPath: /etc/kubernetes/ssl
name: ssl-certs-kubernetes
readOnly: true
- mountPath: /etc/ssl/certs
name: ssl-certs-host
readOnly: true
volumes:
- hostPath:
path: /etc/kubernetes/ssl
name: ssl-certs-kubernetes
- hostPath:
path: /usr/share/ca-certificates
name: ssl-certs-host
Мастер: kube-scheduler.yaml
apiVersion: v1
kind: Pod
metadata:
name: kube-scheduler
namespace: kube-system
spec:
hostNetwork: true
containers:
- name: kube-scheduler
image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
command:
- /hyperkube
- scheduler
- --master=http://127.0.0.1:8080
- --leader-elect=true
livenessProbe:
httpGet:
host: 127.0.0.1
path: /healthz
port: 10251
initialDelaySeconds: 15
timeoutSeconds: 1
Раб: kubelet.service
[Service]
ExecStartPre=/usr/bin/mkdir -p /etc/kubernetes/manifests
Environment=KUBELET_VERSION=v1.2.2_coreos.0
ExecStart=/opt/bin/kubelet-wrapper \
--api-servers=https://172.24.0.67:443 \
--register-node=true \
--allow-privileged=true \
--config=/etc/kubernetes/manifests \
--hostname-override=172.24.0.63 \
--cluster-dns=10.3.0.10 \
--cluster-domain=cluster.local \
--kubeconfig=/etc/kubernetes/worker-kubeconfig.yaml \
--tls-cert-file=/etc/kubernetes/ssl/worker.pem \
--tls-private-key-file=/etc/kubernetes/ssl/worker-key.pem
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Раб: kube-proxy.yaml
apiVersion: v1
kind: Pod
metadata:
name: kube-proxy
namespace: kube-system
spec:
hostNetwork: true
containers:
- name: kube-proxy
image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
command:
- /hyperkube
- proxy
- --master=https://172.24.0.67:443
- --kubeconfig=/etc/kubernetes/worker-kubeconfig.yaml
- --proxy-mode=iptables
securityContext:
privileged: true
volumeMounts:
- mountPath: /etc/ssl/certs
name: "ssl-certs"
- mountPath: /etc/kubernetes/worker-kubeconfig.yaml
name: "kubeconfig"
readOnly: true
- mountPath: /etc/kubernetes/ssl
name: "etc-kube-ssl"
readOnly: true
volumes:
- name: "ssl-certs"
hostPath:
path: "/usr/share/ca-certificates"
- name: "kubeconfig"
hostPath:
path: "/etc/kubernetes/worker-kubeconfig.yaml"
- name: "etc-kube-ssl"
hostPath:
path: "/etc/kubernetes/ssl"
9 ответов
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
С официального сайта [kubernetes][1]:
- Убедитесь, что файл $HOME/.kube/config содержит действительный сертификат, и повторно создайте сертификат.
Отключите переменную среды KUBECONFIG, используя:
unset KUBECONFIG
Или установите его в расположение KUBECONFIG по умолчанию:
export KUBECONFIG=/etc/kubernetes/admin.conf
Другой обходной путь - перезаписать существующий kubeconfig для пользователя "admin":
mkdir $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config```
**Reference:** [official site link reference][2]
[1]: https://kubernetes.io/
[2]: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/
Пожалуйста, просмотрите это как ссылку и, возможно, поможете решить проблему, экспортировав свои сертификаты:
kops export kubecfg "your cluster-name"
export KOPS_STATE_STORE=s3://"paste your S3 store"
Надеюсь, что это поможет.
Чтобы ответить на ваш первый вопрос, я думаю, что вам нужно сделать несколько вещей, чтобы решить вашу проблему. Сначала запустите команду, приведенную в этой ссылке (kubernetes.io/docs/setup/independent/create-cluster-kubeadm /…), затем несколько команд:1) mkdir -p $HOME/.kube 2)sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 3) sudo chown $(id -u):$(id -g) $HOME/.kube/config . Этот admin.conf должен быть известен kubectl для правильной работы.
Упомянутый выше обычный метод не работает. Я попытался использовать полные команды для успешного сертификата. Пожалуйста, смотрите команды следующим образом.
$ sudo kubeadm reset
$ sudo swapoff -a
$ sudo kubeadm init --pod-network-cidr=10.244.10.0/16 --kubernetes-
version "1.18.3"
$ sudo rm -rf /home/cm/.kube
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ sudo systemctl enable docker.service
$ sudo service kubelet restart
$ kubectl get nodes
Примечания:
Если порт отказывается подключаться, добавьте следующую команду.
$ export KUBECONFIG=$HOME/admin.conf
У меня проблема сохранялась даже после:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
В таком случае перезапуск
kubelet
решил проблему:
systemctl restart kubelet
Для тех, кто, как и я, сталкивается с той же ошибкой только в расширении vs code Kubernetes.
Я переустановил docker/Kubernetes и не обновлял расширение vs code Kubernetes
Вам нужно убедиться, что вы используете правильный kubeconfig, поскольку переустановка Kubernetes создает новый сертификат.
Либо используйте$HOME/.kube/config
в опции setKubeconfig или просто скопируйте его в путь, где вы установили расширение vs code для чтения конфигурации. Используя следующую команду
cp $HOME/.kube/config /{{path-for-kubeconfig}}
Я обнаружил эту ошибку в модулях coredns, создание модуля не удалось из-за x509: сертификат, подписанный неизвестным органом (возможно, из-за «crypto/rsa: ошибка проверки» при попытке проверить сертификат кандидата центра «kube-ca»). Проблема была для меня. заключается в том, что я уже установил кластер k8s на том же узле и использовалkubeadm reset
Команда для удаления кластера. Эта команда оставила некоторые файлы в/etc/cni/
это, вероятно, вызвало проблему для меня. Я удалил эту папку и переустановил кластер сkubeadm init
.
Я выполнил следующие шаги, и проблема была решена.
Сделайте резервную копию оригинального файла. cp /etc/kubernetes/admin.conf /etc/kubernetes/admin.conf_bkp
Создайте файл символической ссылки в домашнем каталоге пользователя внутри ./kube/ln -s /etc/kubernetes/admin.conf $HOME/.kube/config
Теперь исходная конфигурация связана с основным файлом admin.conf, что решило проблему.