[英]Cannot install Kubernetes Metrics Server
我想安装 Kubernetes Metrics Server 并按照这个秘籍(来自 Kubernetes 手册)尝试 Metrics API。 我目前有一个安装了 kubeadm 的 Kubernetes 1.13 集群。
配方的启用 API 聚合部分建议更改/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
更新这可能是将 CA 证书安装到容器中显然没有帮助的原因。
看看如何在集群中管理 TLS 证书:
每个 Kubernetes 集群都有一个集群根证书颁发机构 (CA)。 CA 通常被集群组件用来验证 API 服务器的证书,被 API 服务器用来验证 kubelet 客户端证书等。 为了支持这一点,CA 证书包分发到集群中的每个节点,并作为秘密附加分发默认服务帐户。
还有PKI 证书和要求:
Kubernetes 需要 PKI 证书才能通过 TLS 进行身份验证。 如果您使用
kubeadm
安装 Kubernetes,kubeadm
自动生成集群所需的证书。
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 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.