2016-11-08 175 views
5

我试图在CoreOS beta(1192.2.0)上安装kubelet 1.4.5的kubernetes。“x509:由未知授权机构签名的证书”运行kubelet时

我使用的控制器和工人的稍作修改的版本从https://github.com/coreos/coreos-kubernetes/tree/master/multi-node/generic

所以一般安装脚本我用下面的bash脚本创建上的Gentoo Linux的许可证:

#!/bin/bash 
export MASTER_HOST=coreos-2.tux-in.com 
export K8S_SERVICE_IP=10.3.0.1 
export WORKER_IP=10.79.218.3 
export WORKER_FQDN=coreos-3.tux-in.com 
openssl genrsa -out ca-key.pem 2048 
openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca.pem -subj "/CN=kube-ca" 
openssl genrsa -out apiserver-key.pem 2048 
openssl req -new -key apiserver-key.pem -out apiserver.csr -subj "/CN=kube-apiserver" -config openssl.cnf 
openssl x509 -req -in apiserver.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out apiserver.pem -days 365 -extensions v3_req -extfile openssl.cnf 
openssl genrsa -out ${WORKER_FQDN}-worker-key.pem 2048 
openssl req -new -key ${WORKER_FQDN}-worker-key.pem -out ${WORKER_FQDN}-worker.csr -subj "/CN=${WORKER_FQDN}" -config worker-openssl.cnf 
openssl x509 -req -in ${WORKER_FQDN}-worker.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out ${WORKER_FQDN}-worker.pem -days 365 -extensions v3_req -extfile worker-openssl.cnf 
openssl genrsa -out admin-key.pem 2048 
openssl req -new -key admin-key.pem -out admin.csr -subj "/CN=kube-admin" 
openssl x509 -req -in admin.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out admin.pem -days 365 
echo done 

这是openssl.cnf

[req] 
req_extensions = v3_req 
distinguished_name = req_distinguished_name 
[req_distinguished_name] 
[ v3_req ] 
basicConstraints = CA:FALSE 
keyUsage = nonRepudiation, digitalSignature, keyEncipherment 
subjectAltName = @alt_names 
[alt_names] 
DNS.1 = coreos-2.tux-in.com 
DNS.2 = coreos-3.tux-in.com 
IP.1 = 10.3.0.1 
IP.2 = 10.79.218.2 
IP.3 = 10.79.218.3 

,这是我worker-openssl.cnf

[req] 
req_extensions = v3_req 
distinguished_name = req_distinguished_name 
[req_distinguished_name] 
[ v3_req ] 
basicConstraints = CA:FALSE 
keyUsage = nonRepudiation, digitalSignature, keyEncipherment 
subjectAltName = @alt_names 
[alt_names] 
IP.1 = 10.79.218.3 
DNS.1 = coreos-3.tux-in.com 

我控制器机是coreos-2.tux-in.com解析为局域网IP 10.79.218.2

我的工人的机器是coreos-3.tux-in.com解析为局域网IP 10.79.218.3

它创建许可证就好了。但是当我使用它们和主计算机上安装控制器剧本,我看到,当我运行journalctl -xef -u kubelet,我注意到以下消息:

Nov 08 21:24:06 coreos-2.tux-in.com kubelet-wrapper[2018]: E1108 21:24:06.805868 2018 event.go:208] Unable to write event: 'x509: certificate signed by unknown authority' (may retry after sleeping) 
Nov 08 21:24:06 coreos-2.tux-in.com kubelet-wrapper[2018]: E1108 21:24:06.950827 2018 reflector.go:203] pkg/kubelet/kubelet.go:384: Failed to list *api.Service: Get https://coreos-2.tux-in.com:443/api/v1/services?resourceVersion=0: x509: certificate signed by unknown authority 
Nov 08 21:24:07 coreos-2.tux-in.com kubelet-wrapper[2018]: E1108 21:24:07.461042 2018 reflector.go:203] pkg/kubelet/config/apiserver.go:43: Failed to list *api.Pod: Get https://coreos-2.tux-in.com:443/api/v1/pods?fieldSelector=spec.nodeName%3D10.79.218.2&resourceVersion=0: x509: certificate signed by unknown authority 
Nov 08 21:24:07 coreos-2.tux-in.com kubelet-wrapper[2018]: E1108 21:24:07.461340 2018 reflector.go:203] pkg/kubelet/kubelet.go:403: Failed to list *api.Node: Get https://coreos-2.tux-in.com:443/api/v1/nodes?fieldSelector=metadata.name%3D10.79.218.2&resourceVersion=0: x509: certificate signed by unknown authority 
Nov 08 21:24:08 coreos-2.tux-in.com kubelet-wrapper[2018]: E1108 21:24:08.024366 2018 reflector.go:203] pkg/kubelet/kubelet.go:384: Failed to list *api.Service: Get https://coreos-2.tux-in.com:443/api/v1/services?resourceVersion=0: x509: certificate signed by unknown authority 
Nov 08 21:24:08 coreos-2.tux-in.com kubelet-wrapper[2018]: E1108 21:24:08.171170 2018 eviction_manager.go:162] eviction manager: unexpected err: failed GetNode: node '10.79.218.2' not found 
Nov 08 21:24:08 coreos-2.tux-in.com kubelet-wrapper[2018]: E1108 21:24:08.543619 2018 reflector.go:203] pkg/kubelet/kubelet.go:403: Failed to list *api.Node: Get https://coreos-2.tux-in.com:443/api/v1/nodes?fieldSelector=metadata.name%3D10.79.218.2&resourceVersion=0: x509: certificate signed by unknown authority 
Nov 08 21:24:08 coreos-2.tux-in.com kubelet-wrapper[2018]: E1108 21:24:08.543926 2018 reflector.go:203] pkg/kubelet/config/apiserver.go:43: Failed to list *api.Pod: Get https://coreos-2.tux-in.com:443/api/v1/pods?fieldSelector=spec.nodeName%3D10.79.218.2&resourceVersion=0: x509: certificate signed by unknown authority 
+0

你还可以看看其他Kubernetes组件的日志吗?尤其是主人apiserver。如果我正确地看到它,您应该能够使用'docker ps'查看组件,并使用'docker logs '显示它们。 – svenwltr

+0

使用火箭。而且我没有每个容器的具体日志 – ufk

回答

1

的kubelet documentation说,--tls-cert-file标志需要CA串接后证书。在你情况下,它的apiserver.pem

--tls证书文件包含HTTPS X509证书文件。 (CA证书,如果有的话,连接服务器证书后)。如果未提供--tls-cert-file和-tls-private-key-file,则为公用地址生成自签名证书和密钥,并将其保存到传递给--cert-dir的目录中。

如果我正确读取了您的证书代码,则apiserver.pem不包含根CA.

+0

感谢您的回答。我将ca添加到apiserver.pem文件中,但结果完全相同。 – ufk

+0

你是什么意思追加? – stephanlindauer

0

我在CoreOS 1192.2.0上使用kubelet与rkt。

这是我用来启动kubelet对工人的单位:

[Unit] 
Description=Kubelet via Hyperkube ACI 
Requires=k8s-assets.target 
After=k8s-assets.target 
[Service] 
EnvironmentFile=/etc/proxy.env 
Environment="RKT_OPTS=--volume=resolv,kind=host,source=/etc/resolv.conf --mount volume=resolv,target=/etc/resolv.conf --volume var-log,kind=host,source=/var/log --mount volume=var-log,target=/var/log" 
Environment=KUBELET_VERSION=v1.4.0_coreos.0 
ExecStartPre=/usr/bin/mkdir -p /etc/kubernetes/manifests 
ExecStart=/usr/lib/coreos/kubelet-wrapper \ 
--api-servers=https://10.203.69.108 \ 
--register-node=true \ 
--allow-privileged=true \ 
--config=/etc/kubernetes/manifests \ 
--hostname-override=node2.my.domain \ 
--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 

最重要的是

--api的服务器必须指出的的IP地址 master

--tls-cert-file必须指向工作者证书公钥

--tls-私钥文件必须指向工作者证书私钥

--kubeconfig必须指向一个有效的kubeconfig文件

这里我kubeconfig文件(它包含已签署证书的路径CA):

apiVersion: v1 
kind: Config 
clusters: 
- name: local 
    cluster: 
    certificate-authority: /etc/kubernetes/ssl/ca.pem 
users: 
- name: kubelet 
    user: 
    client-certificate: /etc/kubernetes/ssl/worker.pem 
    client-key: /etc/kubernetes/ssl/worker-key.pem 
contexts: 
- context: 
    cluster: local 
    user: kubelet 
    name: kubelet-context 
current-context: kubelet-context 
+0

嗨。感谢您的回答。我关闭了工作服务器,但仍然收到相同的错误消息。这意味着它并不真正与工作人员配置不相关? – ufk

+0

我想你已经反转了worker/master dns名称和worker/master ip。你已经写了这个工作者是coreos-3.tux-in.com,IP为10.79.218.3(在bash脚本中生成证书),但是在写完之后:“我的工作器机器是coreos-2.tux-in。 com解析为lan ip 10.79.218.3“ –

0
0. if your issue is : 
: Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "x509: invalid signature: parent certificate cannot sign this kind of certificate" 

1. look at your ca.crt 
openssl x509 -noout -text -in ca.crt, you will find below info : 

X509v3 Basic Constraints: 
    CA:FLASE 

X509v3 Basic Constraints means : 
"Basic Constraints" identifies if the subject of certificates is a CA who is allowed to issue child certificates. For a certificate that can be used to sign certificates, the info is in some sense duplicated: X509v3 Basic Constraints: CA: TRUE --- Can sign certificates. 

you should modify it to CA:TRUE through vi openssl.conf 
[ v3_ca ] 
basicConstraints = CA:true 

Regenerate your crts. 
相关问题