我想安装 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 证书安装到容器中显然没有帮助的原因。
了解如何在集群中管理 TLS 证书:
\n\n\n\n\n每个 Kubernetes 集群都有一个集群根证书颁发机构\n (CA)。CA 通常由集群组件用于验证\n API 服务器\xe2\x80\x99s 证书,由 API 服务器用于验证 kubelet 客户端\n 证书等。为了支持这一点,CA 证书包\n 分发到\n群集中的每个节点,并作为附加到默认服务帐户的\n 秘密进行分发。
\n
还有PKI 证书和要求:
\n\n\n\n\nKubernetes 需要 PKI 证书来通过 TLS 进行身份验证。如果\n您使用以下命令安装 Kubernetes
\nkubeadm,则会自动生成您的集群所需的证书。
kubeadm默认情况下,在以下位置创建 Kubernetes 证书/etc/kubernetes/pki/。
看起来指标服务器正在尝试验证 kubelet 服务证书,而不让它们由主 Kubernetes CA 签名。安装工具如kubeadm可能无法正确设置证书。
如果您的服务器在安装 Kubernetes 后更改了名称/地址,也可能会发生此问题,这会导致与您当前的名称/地址不匹配apiserver.crt Subject Alternative Name。检查一下:
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep DNS\nRun Code Online (Sandbox Code Playgroud)\n\n克服此错误的最快/简单的方法是使用--kubelet-insecure-tls指标服务器标志。像这样的东西:
# 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\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,这意味着安全问题。如果您正在运行测试,那么可以。但对于生产来说,最好的方法是识别并修复证书问题(查看此指标服务器问题以获取更多信息:#146)
\n| 归档时间: |
|
| 查看次数: |
2504 次 |
| 最近记录: |