【问题标题】:Accessing Kubelet API Microk8s访问 Kubelet API Microk8s
【发布时间】:2020-06-20 23:10:19
【问题描述】:

想问一下如何从microk8s集群访问Kubelet API。

我查看了url,它说 Kubelet API 需要客户端证书。 所以我称之为(来自/var/snap/microk8s/current/certs) curl -v https://127.0.0.1:10250 --cert ca.crt --cert-type PEM --cacert ca.crt --key ca.key

但我收到错误消息: curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.

我该如何解决这个问题?还有,microk8s中的kubelet.crt、server.crt、ca.crt有什么区别?

谢谢!

【问题讨论】:

    标签: ssl kubernetes kubelet microk8s


    【解决方案1】:

    试试这个:

    curl --verbose \
      --cert ./server.crt \
      --key ./server.key  \
      --insecure \
      https://127.0.0.1:10250/healthz
    

    certs 目录中的 CA 证书不是提供给用户的证书 :10250 的签名者。我不知道提供的 CA 证书来自哪里,它看起来像是在旋转,因为颁发者是 CN=<servername>-ca@1567568834(因此是 --insecure)。

    kube-apiserver 命令行将包含 kubelet 客户端证书的确切路径(或者也可以存储在新 k8s 世界中的配置文件中)

    --kubelet-client-certificate --kubelet-client-key

    $ pgrep -a kube-apiserver | perl -pe 's/ --/\n --/g'
    22071 /snap/microk8s/1247/kube-apiserver
     --cert-dir=/var/snap/microk8s/1247/certs
     --service-cluster-ip-range=10.22.189.0/24
     --authorization-mode=RBAC,Node
     --basic-auth-file=/var/snap/microk8s/1247/credentials/basic_auth.csv
     --service-account-key-file=/var/snap/microk8s/1247/certs/serviceaccount.key
     --client-ca-file=/var/snap/microk8s/1247/certs/ca.crt
     --tls-cert-file=/var/snap/microk8s/1247/certs/server.crt
     --tls-private-key-file=/var/snap/microk8s/1247/certs/server.key
     --kubelet-client-certificate=/var/snap/microk8s/1247/certs/server.crt
     --kubelet-client-key=/var/snap/microk8s/1247/certs/server.key
     --secure-port=16443
     --token-auth-file=/var/snap/microk8s/1247/credentials/known_tokens.csv
     --token-auth-file=/var/snap/microk8s/1247/credentials/known_tokens.csv
     --etcd-servers=https://127.0.0.1:12379
     --etcd-cafile=/var/snap/microk8s/1247/certs/ca.crt
     --etcd-certfile=/var/snap/microk8s/1247/certs/server.crt
     --etcd-keyfile=/var/snap/microk8s/1247/certs/server.key
     --requestheader-client-ca-file=/var/snap/microk8s/1247/certs/front-proxy-ca.crt
     --requestheader-allowed-names=front-proxy-client
     --requestheader-extra-headers-prefix=X-Remote-Extra-
     --requestheader-group-headers=X-Remote-Group
     --requestheader-username-headers=X-Remote-User
     --proxy-client-cert-file=/var/snap/microk8s/1247/certs/front-proxy-client.crt
     --proxy-client-key-file=/var/snap/microk8s/1247/certs/front-proxy-client.key
    
    

    【讨论】:

    • 啊,我明白了。我可以卷曲数据。太感谢了!虽然我还是不明白 ca.crt、server.crt 和 kubelet.crt 之间的区别。我可以使用 ca.crt 访问端口 16443 但不能使用 10250 访问自签名证书。从microk8s.io/docs/ports,它说Kubelet and the API server are aware of the same CA and so the signed server certificate is used by the API server to authenticate with kubelet (--kubelet-client-certificate),所以我虽然可以使用相同的证书来签署请求。抱歉这个问题,我还是 Kubernetes 的新手!
    • 是的,这有点奇怪,kubelet 配置了ca.crt,但它提供的证书是自签名的kubelet.crt。可能只是 microk8s 项目的一个小问题,但它的工作原理没有人注意到。
    • echo | openssl s_client -connect 127.0.0.1:10250 -showcerts | openssl x509 -noout -text
    • openssl x509 -in kubelet.crt -noout -text
    • 一般你会使用 CA 证书来签署其他证书,也许它更容易自签名,或者历史遗留下来
    猜你喜欢
    • 2020-04-20
    • 2017-06-16
    • 2021-06-16
    • 2020-11-13
    • 2021-08-16
    • 2019-05-31
    • 2021-11-17
    • 2020-03-26
    • 1970-01-01
    相关资源
    最近更新 更多