用户自助查看kubectl使用的证书状态以及如何更新

栏目: 编程工具 · 发布时间: 5年前

内容简介:以下操作以 root 账号在证书是k8s中用于认证(Authentication)的具体机制。
维护人 日期 内容
yanke679 2019-4-23 初版

基本概念

  1. k8s 中有2种用户, 一般用户serviceAccount

    • 一般用户: 给集群外部用户使用,例如集群管理员通过 kubectl 这个客户端来操作集群,使用的就是一般用户,这个用户通过 k8s 的 RBAC 权限系统获得相应权限。
    • serviceAccount: 给集群内的资源使用,例如 pod 访问 apiserver 。每个 pod 都有一个 default serviceAccount。
  2. 一个完整的访问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使用的证书状态以及如何更新》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Host Your Web Site In The Cloud

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 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具