无法安装 Kubernetes Metrics Server

roo*_*099 5 kubernetes

我想安装 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
Run Code Online (Sandbox Code Playgroud)

建议的新设置如下:

--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
Run Code Online (Sandbox Code Playgroud)

如果我在没有进行这些更改的情况下安装指标服务器,其日志将包含如下错误:

无法完全收集指标:...无法从 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
Run Code Online (Sandbox Code Playgroud)

更新 可能就是为什么将 CA 证书安装到容器中显然没有帮助的原因。

Edu*_*llo 2

关于 Kubernetes 证书:

\n\n

了解如何在集群中管理 TLS 证书

\n\n
\n

每个 Kubernetes 集群都有一个集群根证书颁发机构\n (CA)。CA 通常由集群组件用于验证\n API 服务器\xe2\x80\x99s 证书,由 API 服务器用于验证 kubelet 客户端\n 证书等。为了支持这一点,CA 证书包\n 分发到\n群集中的每个节点,并作为附加到默认服务帐户的\n 秘密进行分发。

\n
\n\n

还有PKI 证书和要求

\n\n
\n

Kubernetes 需要 PKI 证书来通过 TLS 进行身份验证。如果\n您使用以下命令安装 Kuberneteskubeadm,则会自动生成您的集群所需的证书。

\n
\n\n

kubeadm默认情况下,在以下位置创建 Kubernetes 证书/etc/kubernetes/pki/

\n\n

关于指标服务器错误:

\n\n

看起来指标服务器正在尝试验证 kubelet 服务证书,而不让它们由主 Kubernetes CA 签名。安装工具如kubeadm可能无法正确设置证书。

\n\n

如果您的服务器在安装 Kubernetes 后更改了名称/地址,也可能会发生此问题,这会导致与您当前的名称/地址不匹配apiserver.crt Subject Alternative Name。检查一下:

\n\n
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep DNS\n
Run Code Online (Sandbox Code Playgroud)\n\n

克服此错误的最快/简单的方法是使用--kubelet-insecure-tls指标服务器标志。像这样的东西:

\n\n
# metrics-server-deployment.yaml\n[...]\n- name: metrics-server\n        image: k8s.gcr.io/metrics-server-amd64:v0.3.1\n        command:\n        - /metrics-server\n        - --kubelet-insecure-tls\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,这意味着安全问题。如果您正在运行测试,那么可以。但对于生产来说,最好的方法是识别并修复证书问题(查看此指标服务器问题以获取更多信息:#146

\n