Сертификат x509, подписанный неизвестным органом - kubeadm

Я ищу это сообщение с превью, но не могу найти решение, извините.

Я устанавливаю сервер метрик на kubeadm v1.12 и получаю эту ошибку из журналов:

1 главный узел и 1 подчиненный узел в частной сети.

Get https://ip-10-0-1-154:10250/stats/summary/: x509: a certificate signed by an unknown authority, unable to fully scrape metrics from source 

Я не устанавливаю никаких сертификатов.

Как я могу установить новый сертификат и где мне нужно его изменить, не настраивая новый кластер Kubernetes?

Извините за вопрос новичка, я попытался создать новый сертификат, но не могу заставить kubelet измениться.


person pioupiou    schedule 08.11.2018    source источник


Ответы (1)


Это проблема с kubeadm, где он генерирует kubelet сертификаты на узлах под /var/lib/kubelet/pki (_3 _, _ 4_), подписанные другим CA, отличным от того, который использовался для мастера (ов) под /etc/kubernetes/pki (ca.crt). Справочная информация здесь. Вам нужно будет повторно сгенерировать сертификаты для ваших кубелетов, подписанные ЦС на мастере (ах) /etc/kubernetes/pki/ca.crt

Вы можете подписаться на что-то вроде this. Например, используйте cfssl.

Что-то вроде этого:

$ mkdir ~/mycerts; cd ~/mycerts
$ cp /etc/kubernetes/pki/ca.crt ca.pem
$ cp /etc/kubernetes/pki/ca.key ca-key.pem

Создайте файл kubelet-csr.json примерно так:

{
  "CN": "kubernetes",
  "hosts": [
    "127.0.0.1",
    "<your-node-name>",
    "kubernetes",
    "kubernetes.default",
    "kubernetes.default.svc",
    "kubernetes.default.svc.cluster",
    "kubernetes.default.svc.cluster.local"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [{
    "C": "US",
    "ST": "NY",
    "L": "City",
    "O": "Org",
    "OU": "Unit"
  }]
}

Создайте ca-config.json файл:

{
  "signing": {
    "default": {
      "expiry": "8760h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
          "signing",
          "key encipherment",
          "server auth",
          "client auth"
        ],
        "expiry": "8760h"
      }
    }
  }
}

Создайте config.json файл:

{
    "signing": {
        "default": {
            "expiry": "168h"
        },
        "profiles": {
            "www": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            },
            "client": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            }
        }
    }
}

Сгенерируйте сертификаты:

$ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
  --config=ca-config.json -profile=kubernetes \
  kubelet-csr.json | cfssljson -bare kubelet

Скопируйте файлы на свои узлы:

$ scp kubelet.pem <node-ip>:/var/lib/kubelet/pki/kubelet.crt
$ scp kubelet-key.pem <node-ip>:/var/lib/kubelet/pki/kubelet.key

Перезапустите кубелет на своем узле:

$ systemctl restart kubelet

PD. Открыл это, чтобы отследить проблему.

person Rico    schedule 09.11.2018
comment
Извините за неприятности :) . Я пробовал использовать ваш способ и получаю эту ошибку: {code: 2003, message: Failed to parse private key} Не удалось проанализировать ввод: неожиданный конец ввода JSON. Я пробовал с Cloudflare tutorial с самого начала та же ошибка: x509: сертификат, подписанный неизвестным органом - person pioupiou; 12.11.2018
comment
У него такая же ошибка, почему :) $ cp /etc/kubernetes/pki/ca.crt ca-key.pem - это сертификат, а не ключ, большое спасибо :): P - person pioupiou; 12.11.2018
comment
Починил это. Спасибо! - person Rico; 12.11.2018
comment
Если вы здесь для установки с видом --kubeconfig = .., не используйте этот параметр, проблема связана с использованием неправильного сертификата пользователя. Перед тем как экспортировать новый kubeconfig - person tuxErrante; 30.03.2021
comment
@tuxErrante, что вы имеете в виду, говоря не использовать --kubeconfig? Я вращаю свой кластерный центр сертификации, но сертификаты, созданные в kubelet.conf, не работают из-за ошибки x509, указанной выше. Это своего рода кластер. - person swetad90; 12.05.2021
comment
Я решил делать экспорт KUBECONFIG =, bla / bla перед каждым kubectl - person tuxErrante; 13.05.2021