k8s集群证书颁发机构应该保密吗?

问题描述 投票:0回答:2

我有一个 azure aks 集群和一个本地 kubeconfig:

apiVersion: v1
kind: Config
clusters:
- name: my-cluster
  cluster:
    certificate-authority-data: LS0...0tCg==
    server: https://api-server:443
contexts:
- name: my-context
  context:
    cluster: my-cluster
    namespace: samples
    user: my-context-user
current-context: my-context
users:
- name: my-context-user
  user:
    token: ey...jI

用于连接集群、列出 Pod 等。

据我了解,kubeconfig 中的令牌保持秘密/私有很重要。但是

certificate-authority-data
呢?

由于它只是用于验证 API 服务器证书,我猜它具有与公钥相同的状态,并且至少可以对内部团队成员公开。

有文件证实这一点吗?

我没有找到任何相关信息这里这里

kubernetes ca
2个回答
2
投票

所有客户端(pod、使用 kubeconfigfile 的普通用户、服务帐户、组件客户端:kubelet 到 kube-apiserver 等)都在起诉 ca.crt 以识别自签名证书。

正如我们在 docs

中看到的

通过将 --client-ca-file=SOMEFILE 选项传递给 API 服务器来启用客户端证书身份验证。引用的文件必须包含一个或多个证书颁发机构,用于验证向 API 服务器提供的客户端证书。如果提供并验证了客户端证书,则主题的公用名将用作请求的用户名。从 Kubernetes 1.4 开始,客户端证书还可以使用证书的组织字段来指示用户的组成员身份。要包含用户的多个组成员身份,请在证书中包含多个组织字段。

在默认使用 kubeadm 引导的 k8s 集群中,kube-apiserver 配置为

--client-ca-file=/etc/kubernetes/pki/ca.crt

正如您在 docs 证书颁发机构 ca.crt 中看到的那样,应该在用于安全连接 k8s 集群的所有客户端的任何配置文件中引用。

有时您可能想使用此处嵌入的 Base64 编码数据而不是单独的证书文件;在这种情况下,您需要将后缀 -data 添加到密钥,例如,certificate-authority-data、client-certificate-data、client-key-data

默认情况下,该值是 Base64 编码的并嵌入到 KubeconfigFile 中。

当您的工作负载从 Pod 内访问 k8s API 时 您还可以找到有关

的信息
# Reference the internal certificate authority (CA)
CACERT=${SERVICEACCOUNT}/ca.crt

默认情况下 ca.crt 位于

/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

为什么 ca.crt 包含在所有 kubeconfig 文件中 - 正如我们在 docs

中看到的

客户端节点可能会拒绝承认自签名 CA 证书有效。对于非生产部署或在公司防火墙后面运行的部署,您可以将自签名 CA 证书分发给所有客户端并刷新有效证书的本地列表。

根据你最后的陈述。

由于它只是用于验证 API 服务器证书,我猜它具有与公钥相同的状态,并且至少可以对内部团队成员公开

certificate-authority-data
应包含在所有内部团队成员的所有 kubeconfig 文件中,而
client-key-data
或令牌应在不同客户端之间保密。


0
投票

不,

certificate-authority-data
不必保密。这是一个PEM 编码的证书。您可以对其进行 base64 解码以查看该值,如下所示。

-----BEGIN CERTIFICATE-----
fwoeijfoweifoewifoweifowiefoweif
feohfqofpqqpjfpqjfqpjpjpjpjpjpj
and so on
-----END CERTIFICATE-----

它没有说“私有”,所以它只包含公钥。您还可以将其写入文件并通过

openssl x509 -in <filename>.pem -noout -text
读入以进行验证。您应该看到“主题公钥信息”,但没有提及私钥。

考虑到 kube_config 可能包含敏感令牌,为了安全起见,您应该考虑将其保密。

其他参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.