【问题标题】:Errors when using etcdctl on Kubernetes cluster: "certificates signed by unknown authority"在 Kubernetes 集群上使用 etcdctl 时出错:“证书由未知权限签名”
【发布时间】:2023-03-04 04:53:02
【问题描述】:

我正在运行 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 /   

我收到了与之前相同的错误。

知道是什么问题吗?

【问题讨论】:

    标签: kubernetes minikube etcd etcdctl


    【解决方案1】:

    对于 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"
    

    【讨论】:

    • 我为此搜索的太多了。非常感谢。
    【解决方案2】:

    我需要在命令前使用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
    

    我测试了它,它对我有用。

    【讨论】:

      【解决方案3】:

      如果您想从主机/容器外部转储所有带有完全前缀但来自主机/外部的 etcd 条目,您也可以发出(此处用于 minikube/本地测试):

      kubectl exec -it \
        -n kube-system etcd-minikube \
        -- sh -c '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_API=3  \
          etcdctl \
            get \
            --prefix=true /'
      

      【讨论】:

        【解决方案4】:

        尝试执行以下命令: $ 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

        【讨论】:

          猜你喜欢
          • 2020-07-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-01
          • 1970-01-01
          • 2016-08-24
          相关资源
          最近更新 更多