内容简介:以下操作以 root 账号在证书是k8s中用于认证(Authentication)的具体机制。
维护人 | 日期 | 内容 |
---|---|---|
yanke679 | 2019-4-23 | 初版 |
基本概念
-
k8s 中有2种用户,
一般用户
和serviceAccount
。- 一般用户: 给集群外部用户使用,例如集群管理员通过 kubectl 这个客户端来操作集群,使用的就是一般用户,这个用户通过 k8s 的 RBAC 权限系统获得相应权限。
-
serviceAccount: 给集群内的资源使用,例如
pod
访问apiserver
。每个pod
都有一个 default serviceAccount。
-
一个完整的访问k8s api流程
+-----------------------------------------------------------------------------------------------------------+ | | | +---------------------------------------------------------------------------+ +--------+ | | | | | | | | +--------+ | +------------------+ +----------------+ +--------------+ +------+ | | | | | | | | | | | | | Admission | | | | | | | | | Client +------> | Authentication +-> | Authorization +-> | Control +-> |Logic | +--> | Others | | | | | | | | | | | | | | | | | | | +--------+ | +------------------+ +----------------+ +--------------+ +------+ | | | | | | | | | | | | | | | | | | Kube-apiserver | | | | | +---------------------------------------------------------------------------+ +--------+ | | | +-----------------------------------------------------------------------------------------------------------+ 复制代码
本文操作前提
以下操作以 root 账号在 node
上执行。
查看 kubectl 当前证书状态
证书是k8s中用于认证(Authentication)的具体机制。
1. 查看 kubectl 上下文
# 如果有配置环境变量,kubectl会读取变量定义的config文件 $ env | grep -i KUBECONFIG # kubectl 默认 config 文件 $ ls -lh ~/.kube/config -rw------- 1 root root 6.2K Apr 8 2018 /root/.kube/config $ # 查看 kubectl 配置的上下文(context) # 注意看 user name,client-certificate-data。 # 留意 cluster 下的 server,以及 context 下的 namespace,等下生产证书是需要用到。 $ kubectl config view apiVersion: v1 clusters: - cluster: certificate-authority-data: REDACTED server: https://10.25.65.209:6443 name: kubernetes contexts: - context: cluster: kubernetes namespace: szd-dev-f0109307 user: kubectl name: kubernetes current-context: kubernetes kind: Config preferences: {} users: - name: kubectl user: client-certificate-data: REDACTED client-key-data: REDACTED 复制代码
2. 查看 kubectl 客户端证书状态
# 从 config 文件截取 client-certificate-data,放到一个文件中。 cat ~/.kube/config --> 找到 当前 user 对应的 client-certificate-data。 # 此处保存到如下文件: $ pwd /root/szd-dev-f0109307_kubectl $ ls kubectl_client-certificate-data.txt $ cat kubectl_client-certificate-data.txt LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQxRENDQXJ5Z0F3SUJBZ0lVSlFRRFQvbTdJcjFhQjhsWnFnNGNoVStrM0pZd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pURUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbAphVXBwYm1jeEREQUtCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByCmRXSmxjbTVsZEdWek1CNFhEVEU0TURRd09EQTVNekF3TUZvWERURTVNRFF3T0RBNU16QXdNRm93WWpFTE1Ba0cKQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZC ......敏感信息...... M5U2NMc1haVGNQeVRSR3RoMHVGRisvUTIrOHRjQzZLemM2bXZWdkpsODNUWFpsYkRYLzR5bTFxd0lECkFRQUJvMzh3ZlRBT0JnTlZIUThCQWY4RUJBTUNCYUF3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdFR0NDc0cKQVFVRkJ3TUNNQXdHQTFVZEV3RUIvd1FDTUFBd0hRWURWUjBPQkJZRUZFMXhuc3NHcXpMNlVtcTE4enNNbGFLVQpIU1QvTUI4R0ExVWRJd1FZTUJhQUZNQlpOVDJNNXY2bEJWZnZ5QjQ0aDk3Nk00SlJNQTBHQ1NxR1NJYjNEUUVCCkN3VUFBNElCQVFBTDhQaGNQRGFxRVFOUFRYUE91ZkJjWkpsNjF1RCtZRHF3Rjgzci9QQzVDWElHNzg4WFBOYncKdTAwVS9ZbWNXZEpMbldSZWp2Q3B2Qlc0dUVDbWJEckRyU28yU2xNUS8rN0x2a0MvWHd6bU50eWxKWnduYW9RbQplVnhwUXRtcXhJejBianlwL2tCUS9yK0x2N2hTeGtOLzBScGZVQ0ViMUJkT0laOFVJaEJlU2wxSmtQNnVxOFZ6Cm1sQjdpR1NLZFFBK011OU9SaWFhcjdkbk1qNk9ITzNxSE84dzRNZUptVEZRMTdTclM1WWk0ZTZiVTJ3QjJUV20Kcnd2NXQrNGd6WkNZcHJMaThzcDA1R2xHdWdOVjFpRGg4aDZNTVg2ZnNkMjZqRjB5ekdxQzhidDRCV3AzR2Uxagp2S012RlFXYTlqQzNpV3dOSGdCZGNueVhyNitNYkRsegotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== $ 复制代码
# 解码查看客户端证书状态,可以看到 Not After : Apr 8 09:30:00 2019 GMT,已经过期。 # 注意 subject 中 CN 对应 k8s 中 role/clusterrole 的 user name;O 对应 group name。 $ base64 -d ./kubectl_client-certificate-data.txt | openssl x509 -text -noout Certificate: Data: ...... Signature Algorithm: sha256WithRSAEncryption Issuer: C=CN, ST=BeiJing, L=BeiJing, O=k8s, OU=System, CN=kubernetes Validity Not Before: Apr 8 09:30:00 2018 GMT Not After : Apr 8 09:30:00 2019 GMT Subject: C=CN, ST=BeiJing, L=BeiJing, O=k8s, OU=System, CN=kubectl Subject Public Key Info: ...... $ 复制代码
重新签发客户端证书
客户端证书的生产流程为:
1. 生成客户端ssl私钥 2. 使用私钥生成证书请求 3. 通过管理员给予的 ca 证书、ca key给客户端签名,生产客户端访问用的证书,签名方式为 x509。 `/etc/kubernetes/ssl`下的文件不要随意更改,唯一一个能改的是`ca-config.json`中的`expiry`,8760h 为 365 天。 复制代码
$ cat ca-config.json { "signing": { "default": { "expiry": "8760h" }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "8760h" } } } 复制代码
# 从刚才 kubectl config view 获取到当前集群的 server,即 master_vip,以及 namespace。 MASTER_VIP='10.25.65.209' NAMESPACE='szd-dev-f0109307' # 生成客户端证书请求以及配置证书的步骤封装在以下 shell 脚本中,给它传参数执行即可。 cd /opt/k8s/node/scripts && sh ./k8s-node-rbac ${MASTER_VIP} ${NAMESPACE} 复制代码
验证重新签发的证书状态
参照 `2. 查看 kubectl 客户端证书状态`。 可以看到证书状态已经更新。 复制代码
$ base64 -d kubectl_client-certificate-data.txt | openssl x509 -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: ...... Signature Algorithm: sha256WithRSAEncryption Issuer: C=CN, ST=BeiJing, L=BeiJing, O=k8s, OU=System, CN=kubernetes Validity Not Before: Apr 23 04:55:00 2019 GMT Not After : Apr 22 04:55:00 2020 GMT Subject: C=CN, ST=BeiJing, L=BeiJing, O=k8s, OU=System, CN=kubectl 复制代码
以上所述就是小编给大家介绍的《用户自助查看kubectl使用的证书状态以及如何更新》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- RHCE证书,CCNA证书
- DV SSL证书和其他证书有什么不同?
- 生成根证书CA及签发子证书及配置站点实践
- OpenSSL命令速查手册:证书、私钥与证书签名请求文件
- 技术讨论 | Apostille:让假证书以假乱真的证书伪造工具
- 360浏览器推出自有根证书计划 吁加快证书安全技术改造
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Host Your Web Site In The Cloud
Jeff Barr / SitePoint / 2010-9-28 / USD 39.95
Host Your Web Site On The Cloud is the OFFICIAL step-by-step guide to this revolutionary approach to hosting and managing your websites and applications, authored by Amazon's very own Jeffrey Barr. "H......一起来看看 《Host Your Web Site In The Cloud》 这本书的介绍吧!
Markdown 在线编辑器
Markdown 在线编辑器
HEX HSV 转换工具
HEX HSV 互换工具