如何在kops集群上使用适当的证书和密钥发出kubelet api请求?

时间:2019-05-14 18:30:15

标签: curl kubernetes certificate kops kubelet

我在apiserver参数中看到以下两行,

--kubelet-client-certificate=/srv/kubernetes/kubelet-api.pem 
--kubelet-client-key=/srv/kubernetes/kubelet-api-key.pem 

我尝试使用api使用curl击打kubelet stats api,但出现错误,

curl --cert kubelet-api.pem --key kubelet-api-key.pem https://ip-x-x-x-x.ec2.internal:10250/stats/summary

curl: (60) SSL certificate problem: self signed certificate in certificate chain

我还尝试添加--cacert和/srv/kubernetes/ca.crt中存在的文件,但这没有帮助。

我还尝试从kops s3状态存储中提取证书,但是我发现使用privateMaterial和publicMaterial的keyset.yaml。我们如何将其转换为证书?

1 个答案:

答案 0 :(得分:0)

我不认为kubelet-api.pem有权从/stats/summary获取信息。

为此,您需要具有权限的用户的证书,并确保正确设置了kubelet配置文件。

kubelet配置文件

默认位置是:/var/lib/kubelet/config.yaml。 请注意,您需要在要访问kubelet的每个节点上执行此操作。
在某些安装中,这是默认设置,但如果没有,请确保。
您希望它禁用匿名请求并允许x509证书:

apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 0s
    enabled: true
  x509:
    clientCAFile: /etc/kubernetes/pki/ca.crt

使用具有权限的证书

使用您的ca.crt签名的证书创建用户。
此类证书的示例是kubeconfig文件中的默认kubernetes管理员,您可以从base64 -d字段中为client-certificate-data和{{ 1}} --cert归档并像这样使用它们:

client-key-data

您还可以使用带有--key文件的名为kubeletctl的kubelet的新开源客户端,如下所示:

curl -k https://<node_ip>:10250/stats/summary --cacert /etc/kubernetes/pki/ca.crt --key admin.key --cert admin.crt