内容简介:以下操作以 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浏览器推出自有根证书计划 吁加快证书安全技术改造
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Mobile Web
Lyza Danger Gardner、Jason Grigsby / O'Reilly Media / 2011-12 / $ 50.84
Despite the huge number of mobile devices and apps in use today, your business still needs a website. You just need it to be mobile. Head First Mobile Web walks you through the process of making a con......一起来看看 《Head First Mobile Web》 这本书的介绍吧!