一 创建CA证书和密钥

1.1 安装cfssl工具集

  1. 1 [root@k8smaster01 ~]# mkdir -p /opt/k8s/cert
  2. 2
  3. 3 [root@k8smaster01 ~]# curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /opt/k8s/bin/cfssl #下载cfssl软件
  4. 4 [root@k8smaster01 ~]# curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /opt/k8s/bin/cfssljson #下载json模板
  5. 5 [root@k8smaster01 ~]# curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /opt/k8s/bin/cfssl-certinfo
  6. 6 [root@k8smaster01 ~]# chmod u+x /opt/k8s/bin/*
  7. 7 [root@k8smaster01 ~]# export PATH=/opt/k8s/bin:$PATH

1.2 创建根证书

  1. 1 [root@k8smaster01 ~]# mkdir -p /opt/k8s/work
  2. 2 [root@k8smaster01 ~]# cd /opt/k8s/work
  3. 3 [root@k8smaster01 work]# cfssl print-defaults config > config.json
  4. 4 [root@k8smaster01 work]# cfssl print-defaults csr > csr.json #创建模版配置json文件
  5. 5 [root@k8smaster01 work]# cp config.json ca-config.json #复制一份作为CA的配置文件
  6. 6 [root@k8smaster01 work]# cat > ca-config.json <<EOF
  7. 7 {
  8. 8 "signing": {
  9. 9 "default": {
  10. 10 "expiry": "168h"
  11. 11 },
  12. 12 "profiles": {
  13. 13 "kubernetes": {
  14. 14 "expiry": "87600h",
  15. 15 "usages": [
  16. 16 "signing",
  17. 17 "key encipherment",
  18. 18 "server auth",
  19. 19 "client auth"
  20. 20 ]
  21. 21 }
  22. 22 }
  23. 23 }
  24. 24 }
  25. 25 EOF
字段解释:
config.json:可以定义多个profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个profile;
  • signing: 表示该证书可用于签名其它证书;生成的ca.pem 证书中CA=TRUE;
  • server auth: 表示client 可以用该CA 对server 提供的证书进行校验;
  • client auth: 表示server 可以用该CA 对client 提供的证书进行验证。
  1. 1 [root@k8smaster01 work]# cp csr.json ca-csr.json #复制一份作为CA的证书签名请求文件
  2. 2 [root@k8smaster01 work]# cat > ca-csr.json <<EOF
  3. 3 {
  4. 4 "CN": "kubernetes",
  5. 5 "key": {
  6. 6 "algo": "rsa",
  7. 7 "size": 2048
  8. 8 },
  9. 9 "names": [
  10. 10 {
  11. 11 "C": "CN",
  12. 12 "ST": "Shanghai",
  13. 13 "L": "Shanghai",
  14. 14 "O": "k8s",
  15. 15 "OU": "System"
  16. 16 }
  17. 17 ]
  18. 18 }
  19. 19 EOF
字段解释:
  • CN: Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名(User Name);浏览器使用该字段验证网站是否合法;
  • C:country;
  • ST:state;
  • L:city;
  • O: Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组(Group);
  • OU:organization unit。
  1. 1 [root@k8smaster01 ~]# cd /opt/k8s/work
  2. 2 [root@k8smaster01 work]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca #生成CA密钥(ca-key.pem)和证书(ca.pem)
提示:生成证书后,Kubernetes集群需要双向TLS认证,则可将ca-key.pem和ca.pem拷贝到所有要部署的机器的/etc/kubernetes/ssl目录下。


更多TLS证书创建方式参考《附008.Kubernetes TLS证书介绍及创建》。

1.3 分发证书

  1. 1 [root@k8smaster01 ~]# cd /opt/k8s/work
  2. 2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
  3. 3 [root@k8smaster01 work]# for all_ip in ${ALL_IPS[@]}
  4. 4 do
  5. 5 echo ">>> ${all_ip}"
  6. 6 ssh root@${all_ip} "mkdir -p /etc/kubernetes/cert"
  7. 7 scp ca*.pem ca-config.json root@${all_ip}:/etc/kubernetes/cert
  8. 8 done

004.Kubernetes二进制部署创建证书的更多相关文章

  1. Kubernetes 二进制部署(一)单节点部署(Master 与 Node 同一机器)

    0. 前言 最近受“新冠肺炎”疫情影响,在家等着,入职暂时延后,在家里办公和学习 尝试通过源码编译二进制的方式在单一节点(Master 与 Node 部署在同一个机器上)上部署一个 k8s 环境,整理 ...

  2. 003.Kubernetes二进制部署准备

    一 前置准备 1.1 前置条件 相应的充足资源的Linux服务器: 设置相应的主机名,参考命令: hostnamectl set-hostname k8smaster Mac及UUID唯一: 若未关闭 ...

  3. 015.Kubernetes二进制部署所有节点kubelet

    一 部署 kubelet kubelet 运行在每个 worker 节点上,接收 kube-apiserver 发送的请求,管理 Pod 容器,执行交互式命令,如 exec.run.logs 等. k ...

  4. 019.Kubernetes二进制部署插件dashboard

    一 修改配置文件 1.1 下载解压 [root@k8smaster01 ~]# cd /opt/k8s/work/kubernetes/ [root@k8smaster01 kubernetes]# ...

  5. Kubernetes 二进制部署(二)集群部署(多 Master 节点通过 Nginx 负载均衡)

    0. 前言 紧接上一篇,本篇文章我们尝试学习多节点部署 kubernetes 集群 并通过 haproxy+keepalived 实现 Master 节点的负载均衡 1. 实验环境 实验环境主要为 5 ...

  6. Kubernetes 二进制部署

    目录 1.基础环境 2.部署DNS 3.准备自签证书 4.部署Docker环境 5.私有仓库Harbor部署 6.部署Master节点 6.1.部署Etcd集群 6.2.部署kube-apiserve ...

  7. kubernetes二进制部署k8s-master集群controller-manager服务unhealthy问题

    一.问题现象 我们使用二进制部署k8s的高可用集群时,在部署多master时,kube-controller-manager服务提示Unhealthy [root@ceph-01 system]# k ...

  8. 012.Kubernetes二进制部署worker节点Flannel

    一 部署flannel 1.1 安装flannel kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通.flannel 使用 vxlan 技术为各节点创建一 ...

  9. 016.Kubernetes二进制部署所有节点kube-proxy

    一 部署 kube-proxy kube-proxy 运行在所有节点上,它监听 apiserver 中 service 和 endpoint 的变化情况,创建路由规则以提供服务 IP 和负载均衡功能. ...

随机推荐

  1. PE 文件格式详解

    PE文件 是微软 Win32 环境下可执行文件的标准格式. 所谓的可执行文件并不仅仅是常见的 EXE 文件,DLL,SYS,VXD 等文件也都属于 PE 格式. |-------> DOS_MZ ...

  2. “零基础”如何快速掌握web前端核心技术?

    前端开发要学的知识内容涉及的会很宽泛,虽然说主要是HTML.CSS和JavaScript这些基础知识点,今天想强调一下,学前端开发除了要学这些基础知识外,学员还要在这之上进行延伸和深入的去学,而且互联 ...

  3. php反序列化漏洞复现过程

    PHP反序列化漏洞复现 测试代码 我们运行以上代码文件,来证明函数被调用: 应为没有创建对象,所以构造函数__construct()不会被调用,但是__wakeup()跟__destruct()函数都 ...

  4. CentOS6.5下搭建FTP服务

    一.FTP协议 FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.其中FT ...

  5. php函数分为哪两种?

    PHP的真正威力源自于它的函数.函数分为内置函数和自定义函数. 内置函数 所谓PHP内置函数,就是在php程序的库里面已经定义了的函数,比如echo,mysql_connect,include_onc ...

  6. 利用hash远程登陆系统

    有的时候当我们拿到系统管理员hash由于密码复杂度过高无法破解时候可以利用hash直接进行远程登录 我们用到Metasploit里面的模块 肉鸡为windwos server 2003 x32系统 1 ...

  7. Pycharm中Python Console与Terminal的区别

    1.Python Console是Python交互式模式,可以直接输入代码,然后执行,并立刻得到结果 2.Terminal是命令行模式,与系统的CMD(命令提示符)一样,可以运行各种系统命令

  8. RIDE-工程、测试套件、测试用例三者关系

    理论 type的选择: 一般来说:测试项目(directory)-测试套件(file)-测试用例 本质上,“测试项目”和“测试套件”并没有什么区别,但是testcase只能放在file类型的test ...

  9. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

    配置spring+shiro时,启动tomcat报错异常 严重: Context initialization failedorg.springframework.beans.factory.Bean ...

  10. Leetcode(7)整数反转

    Leetcode(6)Z字形变换 [题目表述]: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 第一次:转字符串处理 执行用时:40 ms: 内存消耗:11.6MB 效果: ...