我有一个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服务器证书,我猜它与公钥具有相同的状态,并且至少可以对内部团队成员公开。
有没有文件可以证明这一点?
我没有找到任何关于here或here的信息。
2条答案
按热度按时间hec6srdp1#
所有客户端(pod、使用kubeconfigfile的普通用户、服务账户、组件客户端:kubelet到kube-apiserver等)都在使用 ca.crt 来识别自签名证书。
正如我们在文档中所看到的,
通过向API服务器传递--client-ca-file=SOMEFILE选项来启用客户端证书身份验证。引用的文件必须包含一个或多个证书颁发机构,用于验证提交给API服务器的客户端证书。如果提交并验证了客户端证书,则使用者的通用名称作为请求的用户名。从Kubernetes 1.4开始,客户端证书还可以使用证书的组织字段来指示用户的组成员身份。若要为用户包括多个组成员身份,请在证书中包括多个组织字段。
在k8s集群中,使用kubeadm启动,默认情况下kube-apiserver配置为
--client-ca-file=/etc/kubernetes/pki/ca.crt
。正如你在文档中看到的,证书颁发机构 ca.crt 应该在用于安全连接k8s集群的所有客户端的任何配置文件中引用。
有时,您可能希望使用此处嵌入的Base64编码数据,而不是单独的证书文件;在这种情况下,您需要将后缀-data添加到密钥,例如,certificate-authority-data、client-certificate-data、client-key-data
默认情况下,此值是Base64编码的,并嵌入到KubeconfigFile中。
当您的工作负载从Pod中访问k8 s API时,您还可以找到有关以下内容的信息
字符串
默认情况下,ca.crt 位于
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
中为什么 ca.crt 包含在所有kubeconfigFiles中-我们可以在文档中看到
客户端节点可能拒绝将自签名CA证书识别为有效。对于非生产部署或在公司防火墙后运行的部署,您可以将自签名CA证书分发给所有客户端,并刷新有效证书的本地列表。
根据你最后的陈述。
由于它只是用来验证API服务器证书,我猜它与公钥具有相同的状态,并且可以公开,至少对内部团队成员可用
certificate-authority-data
应该包含在所有内部团队成员的所有kubeconfig文件中,而client-key-data
或令牌应该在不同客户端之间保密。ds97pgxw2#
不,
certificate-authority-data
不需要保密。它是一个PEM encoded certificate。你可以用base64解码来查看它的值,它看起来像下面这样。字符串
它没有说“private”,所以它只包含公钥。您也可以将其写入文件并通过
openssl x509 -in <filename>.pem -noout -text
读取以进行验证。您应该看到“Subject Public Key Info”,但没有提到私钥。考虑到kube_config可能包含一个敏感的token,为了安全起见,您应该考虑将其保密。
其他参考文献: