自签TLS证书

TLS证书用于进行通信使用,k8s组件需要的证书有:

第一步:安装证书生成工具cfssl

在这之前需要先建立一个目录来存放安装的工具mkdir ssl,后面将安装的工具移动到各自的目录。方便管理

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl-certinfo_linux-amd64 cfssljson_linux-amd64 cfssl_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

在执行wget命令时,如果没有安装这个wget工具,会提示命令不存在。

//执行命令安装wget工具
yum install -y wget

第二步:使用cfssl -help 查看cfssl工具帮助命令

第三步:利用cfssl工具生成证书

生成配置文件,可以根据这个文件来进行修改以适应自己的需求

生成ca-config.json证书

cat << EOF | tee ca-config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF

生成csr.json文件

生成ca-csr.json证书文件

cfssl print-defaults csr > ca-csr.json
//修改内容为如下:
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Chengdu",
"ST": "Chengdu",
"O": "k8s",
"OU": "System"
}
]
}

生成ca-key.pem ca.pem。

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

生成server-csr.json文件

cat << EOF | tee server-csr.json
{
"CN": "kubernetes",
"hosts": [
"172.16.163.131",
"172.16.163.130",
"172.16.163.129",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Chengdu",
"ST": "Chengdu",
"O": "k8s",
"OU": "System"
}
]
}
EOF

生成server.pem,server-key.pem

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server

执行以上命令时会报错

报错原因

{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": { //应该将ca-config.json文件的profiles改为kubernetes
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}

生成admin-csr.json文件

cfssl print-defaults csr > admin-csr.json

需要将上面的admin-csr.json修改为以下:

{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Chengdu",
"ST": "Chengdu",
"O": "system:masters",
"OU": "System"
}
]
}

最后生成admin证书---admin-key.pem ,admin.pem

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

生成代理

cfssl print-defaults csr > kube-proxy-csr.json
//将kube-proxy-csr.json修改为如下:
{
"CN": "system:kube-proxy",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Chengdu",
"ST": "Chengdu",
"O": "k8s",
"OU": "System"
}
]
}
//生成代理证书 kube-proxy-key.pem , kube-proxy.pem
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

最后过滤掉pem之外的.json文件

ls | grep -v pem

使用命令ls | grep -v pem |xargs -i rm {}删除除了pem文件之外的其他文件。

到此证书就生成好了。

最新文章

  1. 简述HTML DOM及其节点分类
  2. [emacs] 使用ggtags浏览代码
  3. 去掉Actionbar下的shadow
  4. 数学+高精度 ZOJ 2313 Chinese Girls&#39; Amusement
  5. 跨站点脚本编制实例(AppScan扫描结果)
  6. BestCoder HDU 5750 Dertouzos
  7. LeetCode题解——Palindrome Number
  8. 开发APP不搞清楚这20个问题,必然沦为一场灾难
  9. MySQL的用户密码过期功能详解
  10. QTabWiget Change Color 改变颜色(每个QWidget都有一个自己的调色板palette,设置它的颜色,然后setAutoFillBackground即可)
  11. GDKOI2016
  12. jquery 实现飘落效果
  13. @InitBinde的作用
  14. Java程序设计环境概述
  15. 如何将top命令输出重定向为文件
  16. 从壹开始前后端分离 [ vue + .netcore 补程 ] 三十一║ Nuxt终篇:基于Vuex的权限验证探究
  17. Zuul之Filter详解
  18. 无空格字符串的break-all的性能问题
  19. Android Application中的Context和Activity中的Context的异同
  20. ES6学习(二)基础命令

热门文章

  1. LeetCode 137. 只出现一次的数字 II(Single Number II)
  2. LeetCode 145. 二叉树的后序遍历(Binary Tree Postorder Traversal)
  3. Servlet——理解会话Session
  4. Python: sklearn库——数据预处理
  5. DP----鬼畜的数字三角形
  6. Haskell 安装
  7. element UI 验证select 下拉问题
  8. vue.js-动态绑定class 利用index实现导航
  9. notepad++ 插件说明(一)
  10. redis-trib.rb创建Redis集群时失败报错解决方案