四.CA证书与秘钥

kubernetes集群安全访问有两种方式:"基于CA签名的双向数字证书认证"与"基于BASE或TOKEN的简单认证",生产环境推荐使用"基于CA签名的双向数字证书认证"。

本文档采用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件,CA 是自签名的证书,用来签名后续创建的其它 TLS 证书。

以kubenode1为例,kubenode2&kubenode3做适当小调整。

1. 安装CFSSL

  1. [root@kubenode1 ~]# mkdir -p /usr/local/cfssl
  2. [root@kubenode1 ~]# cd /usr/local/cfssl/
  3.  
  4. # cfssl
  5. [root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
  6. [root@kubenode1 cfssl]# mv cfssl_linux-amd64 cfssl
  7. [root@kubenode1 cfssl]# chmod +x cfssl
  8.  
  9. # cfssl-certinfo
  10. [root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
  11. [root@kubenode1 cfssl]# mv cfssl-certinfo_linux-amd64 cfssl-certinfo
  12. [root@kubenode1 cfssl]# chmod +x cfssl-certinfo
  13.  
  14. # cfssljson
  15. [root@kubenode1 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
  16. [root@kubenode1 cfssl]# mv cfssljson_linux-amd64 cfssljson
  17. [root@kubenode1 cfssl]# chmod +x cfssljson

2. 生成CA模板

  1. # kubenode1节点完成即可
  2. [root@kubenode1 ~]# cd /usr/local/cfssl/
  3.  
  4. # 生产CA配置文件模板
  5. [root@kubenode1 cfssl]# cfssl print-defaults config > config.json
  6.  
  7. # 生产CA证书签名请求文件模板
  8. [root@kubenode1 cfssl]# cfssl print-defaults csr > csr.json

3. CA配置文件

  1. # kubenode1节点完成即可,以下的CA证书,签名等可通过scp分发到kubenode2&kubenode3;
  2. # ca-config.json:1个profiles,分别指定不同的过期时间,使用场景等参数,根据需要在不同场景使用不同的profile签名证书;这里以生成的模板为基础修改;
  3. # “signing”:表示该证书可用于签名其他证书,生成的ca.pem证书中CA=TRUE;
  4. # ”server auth“:client可用该CA对server提供的证书进行验证;
  5. # “client auth”:server可用该CA对client提供的证书进行验证;
  6. # 注意每个模块或每行有或没有“,”的区别
  7. [root@kubenode1 cfssl]# cp config.json ca-config.json
  8. [root@kubenode1 cfssl]# vim ca-config.json
  9. {
  10. "signing": {
  11. "default": {
  12. "expiry": "8760h"
  13. },
  14. "profiles": {
  15. "kubernetes": {
  16. "expiry": "8760h",
  17. "usages": [
  18. "signing",
  19. "key encipherment",
  20. "server auth",
  21. "client auth"
  22. ]
  23. }
  24. }
  25. }
  26. } 

4. CA证书签名请求

  1. # “CN”:Common Name,kube-apiserver从证书中提取该字段作为请求的用户名(User Name);浏览器使用该字段验证网站是否合法;
  2. # “O”:Organization,kube-apiserver从证书中提取该字段作为请求用户所属的组(Group)
  3. [root@kubenode1 cfssl]# cp csr.json ca-csr.json
  4. [root@kubenode1 cfssl]# vim ca-csr.json
  5. {
  6. "CN": "kubernetes",
  7. "key": {
  8. "algo": "rsa",
  9. "size": 2048
  10. },
  11. "names": [
  12. {
  13. "C": "CN",
  14. "ST": "ChengDu",
  15. "L": "ChengDu",
  16. "O": "k8s",
  17. "OU": "cloudteam"
  18. }
  19. ]
  20. } 

5. 生成CA证书与秘钥

  1. [root@kubenode1 cfssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
  2. [root@kubenode1 cfssl]# ls ca*

  1. # 简单查看
  2. [root@kubenode1 cfssl]# cfssl-certinfo -cert ca.pem

6. 分发CA证书

  1. # 将生成的CA证书,秘钥,配置文件等分发到所有机器;
  2. # ca-key.pem与ca.pem重要
  3. [root@kubenode1 ~]# mkdir -p /etc/kubernetes/ssl
  4. [root@kubenode1 ~]# cp /usr/local/cfssl/ca* /etc/kubernetes/ssl/
  5. [root@kubenode1 ~]# scp /usr/local/cfssl/ca* root@172.30.200.22:/etc/kubernetes/ssl/
  6. [root@kubenode1 ~]# scp /usr/local/cfssl/ca* root@172.30.200.23:/etc/kubernetes/ssl/

高可用Kubernetes集群-2. ca证书与秘钥的更多相关文章

  1. 高可用Kubernetes集群-16. ansible快速部署

    说明 本文档指导采用二进制包的方式快速部署高可用kubernetes集群. 脚本托管:k8s-ansible(持续更新) 参考:高可用kubernetes集群 组件版本 组件 版本 备注 centos ...

  2. 搭建高可用kubernetes集群(keepalived+haproxy)

    序 由于单master节点的kubernetes集群,存在master节点异常之后无法继续使用的缺陷.本文参考网管流程搭建一套多master节点负载均衡的kubernetes集群.官网给出了两种拓扑结 ...

  3. 高可用Kubernetes集群原理介绍

    ■ 文/ 天云软件 云平台开发工程师 张伟 1. 背景 Kubernetes作为容器应用的管理中心,对集群内部所有容器的生命周期进行管理,结合自身的健康检查及错误恢复机制,实现了集群内部应用层的高可用 ...

  4. 高可用Kubernetes集群-3. etcd高可用集群

    五.部署高可用etcd集群 etcd是key-value存储(同zookeeper),在整个kubernetes集群中处于中心数据库地位,以集群的方式部署,可有效避免单点故障. 这里采用静态配置的方式 ...

  5. 高可用Kubernetes集群-1. 集群环境

    参考文档: 部署kubernetes集群1:https://github.com/opsnull/follow-me-install-kubernetes-cluster 部署kubernetes集群 ...

  6. 高可用Kubernetes集群-6. 部署kube-apiserver

    八.部署kube-apiserver 接下来3章节是部署Kube-Master相关的服务,包含:kube-apiserver,kube-controller-manager,kube-schedule ...

  7. 使用Kubeadm搭建高可用Kubernetes集群

    1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...

  8. 基于Containerd安装部署高可用Kubernetes集群

    转载自:https://blog.weiyigeek.top/2021/7-30-623.html 简述 Kubernetes(后续简称k8s)是 Google(2014年6月) 开源的一个容器编排引 ...

  9. 基于saltstack自动化部署高可用kubernetes集群

    SaltStack自动化部署HA-Kubernetes 本项目在GitHub上,会不定期更新,大家也可以提交ISSUE,地址为:https://github.com/skymyyang/salt-k8 ...

随机推荐

  1. [iOS]一些第三方库

    BHInfiniteScrollView 地址 https://github.com/qylibohao/BHInfiniteScrollView 功能 图片轮播 TZImagePickerContr ...

  2. JSON在Java中的使用(一)

    1.去JSON官网下载org.json包 https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.json%22%20AND%20a%3A%22 ...

  3. JQuery弹出Dialog关闭方式close vs destroy

    $editDialog.iDialog('close')  $(this).dialog('close'); 等Close方法关闭Dialog时,Dialog并不是完全消失,只是隐藏起来.两个Dial ...

  4. mysql如何把一个表直接拷贝到一个新的表

    一:在新表已经建立好的情况下 1,拷贝所有的字段 insert into new_table select * from old_table 2,拷贝部分字段表 insert into new_tab ...

  5. 【python 虚拟环境 virtualenv的配置】

    该目录内生成一个虚目录: #运行activcate下的shell脚本,激活虚拟环境 #pip  python包管理器

  6. HTML5 -- 浏览器数据缓存 -- indexedDB

    IndexedDB是一种可以让你在用户的浏览器内持久化存储数据的方法,为web应用提供了丰富的查询功能,使我们的应用在在线和离线都能正常工作. 由于 IndexedDB 本身的规范还在持续演进中,当前 ...

  7. Delphi判断某个类是否实现了某个接口

    通过TObject.GetInterface可以获得对象的实例实现某个接口,前提条件是必须实例化对象后才能运行GetInterface 下面的方法可获取类是否实现了某个接口,并返回接口的偏移: fun ...

  8. Golddata如何采集需要登录/会话的数据?

    概要 本文将介绍使用GoldData半自动登录功能,来采集需要登录网站的数据.GoldData半自动登录功能,就是指通过脚本来执行登录,如果需要验证码或者其它内容需要人工输入时,可以通过收发邮件来执行 ...

  9. Shellinabox on centos6.9

    介绍 一款实用的web linux终端, 并且保证操作安全性(屏蔽root用户) 下面以centos6.9为例 安装 首先安装epel仓库,再安装shellinabox yum -y install ...

  10. python学习——简介和入门

    一.Python简介: Python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...