我想安装Kubernetes Metrics Server,并按照this recipe(来自Kubernetes手册)尝试Metrics API。我目前有一个与kubeadm一起安装的Kubernetes 1.13集群。
食谱的Enable API Aggregation部分建议更改/etc/kubernetes/manifests/kube-apiserver.yaml
中的一些设置。当前设置如下:
--proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
--proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
--requestheader-allowed-names=front-proxy-client
--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
建议的新设置如下:
--requestheader-client-ca-file=/etc/kubernetes/certs/proxy-ca.crt
--proxy-client-cert-file=/etc/kubernetes/certs/proxy.crt
--proxy-client-key-file=/etc/kubernetes/certs/proxy.key
--requestheader-allowed-names=aggregator
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
如果我在未进行这些更改的情况下安装metrics-server,则其日志中将包含以下错误:
无法完全收集指标:...无法从中获取指标 Kubelet ... x509:未知授权机构签署的证书
这些凭证来自何处,又意味着什么?我目前没有目录/etc/kubernetes/certs
。
更新我现在尝试在metrics-server-deployment.yaml
内的适当位置添加以下内容,但是问题仍然存在(在没有--kubelet-insecure-tls
的情况下):
command:
- /metrics-server
- --client-ca-file
- /etc/kubernetes/pki/ca.crt
volumeMounts:
- mountPath: /etc/kubernetes/pki/ca.crt
name: ca
readOnly: true
volumens:
- hostPath:
path: /etc/kubernetes/pki/ca.crt
type: File
name: ca
更新 Here可能是将CA证书装入容器显然没有帮助的原因。
答案 0 :(得分:1)
看看如何Manage TLS Certificates in a Cluster:
每个Kubernetes集群都有一个集群根证书颁发机构 (CA)。群集组件通常使用CA来验证 API服务器的证书,由API服务器验证kubelet客户端 证书等。为此,CA证书捆绑包是 分布到集群中的每个节点,并作为 密码附加到默认服务帐户。
还有PKI Certificates and Requirements:
Kubernetes需要PKI证书才能通过TLS进行身份验证。如果 您使用
kubeadm
安装Kubernetes, 集群要求自动生成。
kubeadm
默认情况下,在 /etc/kubernetes/pki/
目录中创建Kubernetes证书。
指标服务器似乎正在尝试验证kubelet服务证书,而无需由主Kubernetes CA对其进行签名。诸如kubeadm
之类的安装工具可能无法正确设置证书。
在安装Kubernetes之后服务器更改名称/地址的情况下,也会发生此问题,这会导致apiserver.crt
Subject Alternative Name
与您当前的名称/地址不匹配。进行检查:
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep DNS
克服此错误的最快/最简便的方法是使用metrics-server的 --kubelet-insecure-tls
标志。像这样:
# metrics-server-deployment.yaml
[...]
- name: metrics-server
image: k8s.gcr.io/metrics-server-amd64:v0.3.1
command:
- /metrics-server
- --kubelet-insecure-tls
请注意,这意味着安全方面的问题。如果您正在运行测试,请确定。但是对于生产而言,最好的方法是识别并解决证书问题(有关更多信息,请查看此指标服务器问题:#146)