维护人 日期 内容
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: REDACTEDserver: https://10.25.65.209:6443name: kubernetes
contexts:
- context:cluster: kubernetesnamespace: szd-dev-f0109307user: kubectlname: kubernetes
current-context: kubernetes
kind: Config
preferences: {}
users:
- name: kubectluser:client-certificate-data: REDACTEDclient-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: sha256WithRSAEncryptionIssuer: C=CN, ST=BeiJing, L=BeiJing, O=k8s, OU=System, CN=kubernetesValidityNot Before: Apr  8 09:30:00 2018 GMTNot After : Apr  8 09:30:00 2019 GMTSubject: C=CN, ST=BeiJing, L=BeiJing, O=k8s, OU=System, CN=kubectlSubject 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: sha256WithRSAEncryptionIssuer: C=CN, ST=BeiJing, L=BeiJing, O=k8s, OU=System, CN=kubernetesValidityNot Before: Apr 23 04:55:00 2019 GMTNot After : Apr 22 04:55:00 2020 GMTSubject: C=CN, ST=BeiJing, L=BeiJing, O=k8s, OU=System, CN=kubectl
复制代码

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

  1. Sql Server设置用户只能查看并访问特定数据库

    1.新建登录用户  以管理员身份登陆数据库(权限最高的身份如sa),点击安全性->登录名,右键新建登录名,输入登录名和密码,取消强制实施密码策略. 2.将服务器角色设置为public 注意:很重 ...

  2. 通过bginfo小工具让用户自己查看用户名与IP地址信息

    通过bginfo小工具让用户自己查看用户名与IP地址信息 https://blog.51cto.com/wangzhaowei/1337848 王兆伟1390人评论3390人阅读2013-12-07 ...

  3. Linux系统关机重启,登录root用户,图形界面和字符界面,创建用户,删除用户,查看虚拟控制台用户,切换虚拟控制台

    操作系统:Windows 10 ×64 虚拟机:VMware 15 ISO镜像:RHEL7.0 首先进入VMware 15虚拟机 进入图形界面登录普通用户 输入密码 进入后打开terminal 输入s ...

  4. 用户 sa 登录失败。_Sqlserver2008R2特定用户只能查看管理指定的数据库

    一.新建登录名 安全性---登录名---右键---新建登录名 二.设置public权限 默认情况下,public用户能看到所有的数据库. REVOKE VIEW ANY DATABASE TO [pu ...

  5. ECSHOP模板设置只有登录用户才能查看商品详情内容

    2019独角兽企业重金招聘Python工程师标准>>> 这个需要在商品详情页模板文件里加判断代码. 以默认模板为例,打开 /themes/default/goods.dwt 在 &l ...

  6. 用户登录 kibana 时,提示 “no permissions...” ,导致用户无法查看 log

    Get error in Kibana and cannot view any logs a admin user cannot see any logs in Kibana 1. 背景 2. 环境 ...

  7. SpringSecurity+Mybatis实现用户自助注册登录(含角色),打造简单安全的注册登录页面。

    #项目架构.功能点 架构: Springboot2.5.+ MySQL数据库8.0+(记录用户信息.角色清单.用户角色对照表) 持久层Mybatis 用户注册页面RegisterPage采用Thyme ...

  8. 计算机日志查询域用户登录记录,域用户权限|查看日志

    域用户权限|查看日志.如果委派特定用户查看DC的系统日志? 回答:根据您的描述,我对这个问题的理解是:您想指定特定的用户允许查看DC上的事件日志. 根据我的研究,要允许特定用户访问域控制器上的事件日志 ...

  9. Java学习_根据用户信息查看浏览过商品信息

    学习内容: 通过用户类和商品类来设置和查询相关信息 学习代码: package Example; //新建一个用户类 class User{private String uid; //用户idpriv ...

最新文章

  1. GitHub超4.1万星,最全Python入门算法来了
  2. java 年计算_JAVA计算年/周的问题
  3. ELK日志管理之——kibana部署
  4. Pile 0009: Vim命令梳理
  5. linux top 命令的结果
  6. jboss4中手动部署EJB(jboss4.0.2+ejb2.0+j2sdk5.0+xpsp2)
  7. Centos 8 安装 Openbravo 之安装 postgresql
  8. 沈阳工业大学计算机专业排名,中国的大学计算机专业排名。
  9. 一个指针占几个字节?原理是什么呢?
  10. IONIC4 苹果登录-Sign In With Apple Id
  11. 初创公司,如何找到靠谱的产品经理?
  12. Python每日一练(20230301)
  13. 原生JS 简单购物车网页
  14. 【AdaBoost算法】
  15. 单片机控制秒表C语言程序,89C51单片机秒表的设计(全文完整版)
  16. python 渐变色_python – 用渐变颜色的散景散点图
  17. NFC对于大家真的实用吗
  18. 司铭宇老师谈大客户销售技巧之如何做好大客户营销
  19. Java多态实现人喂养宠物小案例
  20. Manifest基本

热门文章

  1. golang中的select详解
  2. 十六进制转换为十进制的效率问题
  3. remap(地址重映射)机制
  4. 四轴飞行器1.4 姿态解算和Matlab实时姿态显示
  5. 【Linux】目录文件权限的查看和修改【转】
  6. springmvc三: REST
  7. 解决 APP启动白屏黑屏问题
  8. jsTree 插件Ajax数据
  9. vue+node+mongodb 搭建一个完整博客
  10. 气候变迁给社会带来什么变化?