在Kubernetes群集上使用etcdctl时出现错误:“证书由未知授权机构签名”

时间:2019-12-19 15:10:00

标签: kubernetes minikube etcd etcdctl

我正在运行minikube,并且试图在ETCD上列出密钥。

我从github下载了最新的etcdctl客户端:
https://github.com/etcd-io/etcd/releases/download/v3.3.18/etcd-v3.3.18-linux-amd64.tar.gz

我尝试使用/home/myuser/.minikube/certs中的证书来运行它:

./etcdctl --ca-file /home/myuser/.minikube/certs/ca.pem 
          --key-file /home/myuser/.minikube/certs/key.pem 
          --cert-file /home/myuser/.minikube/certs/cert.pem  
          --endpoints=https://10.240.0.23:2379 get / 

我收到一个错误:

  

错误:客户端:etcd群集不可用或配置错误;错误   #0:x509:由未知授权机构签名的证书

     

错误#0:x509:证书由未知授权机构签名

我使用了正确的证书吗?

我尝试了类似的其他证书:

./etcdctl --ca-file /var/lib/minikube/certs/ca.crt 
          --key-file /var/lib/minikube/certs/apiserver-etcd-client.key 
          --cert-file /var/lib/minikube/certs/apiserver-etcd-client.crt 
          --endpoints=https://10.240.0.23:2379 get /   

我从以前收到了相同的错误。

任何主意是什么问题?

3 个答案:

答案 0 :(得分:0)

尝试执行以下命令: $ cat /etc/etcd.env列出CA,CERT和KEY目录(实际路径)。

TLS设置

ETCD_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem
ETCD_CERT_FILE=/etc/ssl/etcd/ssl/member-k8s-m1.pem
ETCD_KEY_FILE=/etc/ssl/etcd/ssl/member-k8s-m1-key.pem
ETCD_CLIENT_CERT_AUTH=true

然后您将可以更正使用证书。

然后再次运行命令:

./etcdctl --endpoints https://x.x.x.x:2379 
          --ca-file=/etc/ssl/etcd/ssl/ca.pem 
          --cert-file=/etc/ssl/etcd/ssl/member-k8s-m1.pem 
          --key-file=/etc/ssl/etcd/ssl/member-k8s-m1-key.pem

您可以在这里找到更多信息:etcd-certificates

答案 1 :(得分:0)

我需要在命令前使用ETCDCTL_API=3
我从Github中看到了它在Kubernetes中的艰苦努力。
证书的位置在/etc/kubernetes/pki/etcd中。

该命令应像这样工作:

ETCDCTL_API=3 ./etcdctl --endpoints=https://172.17.0.64:2379 \
                        --cacert=/etc/kubernetes/pki/etcd/ca.crt \
                        --cert=/etc/kubernetes/pki/etcd/server.crt \
                        --key=/etc/kubernetes/pki/etcd/server.key get / --prefix

我测试了它,对我有用。

答案 2 :(得分:0)

对于minikube,etcd证书的正确路径为:/ var / lib / minikube / certs / etcd /,因此命令如下所示:

# kubectl -n kube-system exec -it etcd-minikube -- sh -c "ETCDCTL_API=3 ETCDCTL_CACERT=/var/lib/minikube/certs/etcd/ca.crt ETCDCTL_CERT=/var/lib/minikube/certs/etcd/server.crt ETCDCTL_KEY=/var/lib/minikube/certs/etcd/server.key etcdctl endpoint health"