x509证书(由未知机构签名)-kubeadm

pio*_*iou 3 x509 kubernetes kubelet

我在预览帖子中搜索了此内容,但抱歉,找不到解决方案。

我在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 
Run Code Online (Sandbox Code Playgroud)

我没有安装任何证书。

如何安装新证书,以及在不设置新Kubernetes集群的情况下需要更改的地方?

抱歉,菜鸟问题,我尝试创建一个新证书,但无法更改kubelet。

Ric*_*ico 6

kubeadm的问题在于,它kubelet/var/lib/kubelet/pkikubelet.crtkubelet.key)下的节点上生成的证书由与/etc/kubernetes/pki(ca.crt)下的主服务器使用的证书不同的CA签署。这里有一些背景 。您必须为CA在主服务器上签名的kubelet重新生成证书。/etc/kubernetes/pki/ca.crt

您可以遵循这样的操作。例如使用cfssl

像这样:

$ mkdir ~/mycerts; cd ~/mycerts
$ cp /etc/kubernetes/pki/ca.crt ca.pem
$ cp /etc/kubernetes/pki/ca.key ca-key.pem
Run Code Online (Sandbox Code Playgroud)

使用以下内容创建文件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"
  }]
}
Run Code Online (Sandbox Code Playgroud)

创建一个ca-config.json文件:

{
  "signing": {
    "default": {
      "expiry": "8760h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
          "signing",
          "key encipherment",
          "server auth",
          "client auth"
        ],
        "expiry": "8760h"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

创建一个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"
                ]
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

生成证书:

$ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
  --config=ca-config.json -profile=kubernetes \
  kubelet-csr.json | cfssljson -bare kubelet
Run Code Online (Sandbox Code Playgroud)

将文件复制到您的节点:

$ scp kubelet.pem <node-ip>:/var/lib/kubelet/pki/kubelet.crt
$ scp kubelet-key.pem <node-ip>:/var/lib/kubelet/pki/kubelet.key
Run Code Online (Sandbox Code Playgroud)

重新启动节点上的kubelet:

$ systemctl restart kubelet
Run Code Online (Sandbox Code Playgroud)

PD。打开窗口以跟踪问题。