附008.Kubernetes TLS证书介绍及创建
一 Kubernetes证书
1.1 TLS
1.2 CA证书创建方式
- openssl
- cfssl
- easyrsa
1.3 Kubernetes组件证书
- etcd证书:etcd集群之间通信加密使用的TLS证书。
- kube-apiserver证书:配置kube-apiserver组件的证书。
- kube-controller-manager证书:用于和kube-apiserver通信认证的证书。
- kube-scheduler证书:用于和kube-apiserver通信认证的证书。
- kubelet证书【可选,非必需】:用于和kube-apiserver通信认证的证书,如果使用TLS Bootstarp认证方式,将没有必要配置。
- kube-proxy证书【可选,非必需】:用于和kube-apiserver通信认证的证书,如果使用TLS Bootstarp认证方式,将没有必要配置。
二 openssl生成证书
2.1 openssl创建证书
[root@master ~]# MASTER_IP=172.24.8.71 #定义MASTER_IP
[root@master ~]# mkdir cert #建议创建独立存储证书的目录
[root@master ~]# cd cert
[root@master cert]# openssl genrsa -out ca.key 2048 #生成一个 2048 bit的ca.key
[root@master cert]# openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt #根据 ca.key 生成一个 ca.crt(使用 -days 设置证书的有效时间)
[root@master cert]# openssl genrsa -out server.key 2048 #生成一个 2048 bit 的 server.key
[root@master cert]# openssl req -new -key server.key -subj "/CN=${MASTER_IP}" -out server.csr #根据 server.key 生成一个 server.csr
[root@master cert]# openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000 #根据 ca.key、ca.crt 和 server.csr 生成 server.crt
[root@master cert]# openssl x509 -noout -text -in ./server.crt
三 cfssl生成证书
3.1 cfssl创建证书
[root@master ~]# curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl #下载cfssl软件
[root@master ~]# chmod u+x /usr/local/bin/cfssl
[root@master ~]# curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson #下载json模板
[root@master ~]# chmod u+x /usr/local/bin/cfssljson
[root@master ~]# curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
[root@master ~]# chmod u+x /usr/local/bin/cfssl-certinfo
[root@master ~]# mkdir cert
[root@master ~]# cd cert/
[root@master cert]# cfssl print-defaults config > config.json
[root@master cert]# cfssl print-defaults csr > csr.json #创建模版配置json文件
[root@master cert]# cp config.json ca-config.json #复制一份作为CA的配置文件
[root@master cert]# vi ca-config.json
{
"signing": {
"default": {
"expiry": "168h"
},
"profiles": {
"kubernetes": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth"
"client auth"
]
}
}
}
}
- signing: 表示该证书可用于签名其它证书;生成的ca.pem 证书中CA=TRUE;
- server auth: 表示client 可以用该CA 对server 提供的证书进行校验;
- client auth: 表示server 可以用该CA 对client 提供的证书进行验证。
[root@master cert]# cp csr.json ca-csr.json #复制一份作为CA的配置文件
[root@master cert]# vi ca-csr.json
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Shanghai",
"L": "Shanghai",
"O": "k8s",
"OU": "System"
}
]
}
- CN: Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名(User Name);浏览器使用该字段验证网站是否合法;
- C:country;
- ST:state;
- L:city;
- O: Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组(Group);
- OU:organization unit。
[root@master cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca #生成CA密钥(ca-key.pem)和证书(ca.pem)
四 easyrsa生成证书
4.1 easyrsa创建证书
[root@master ~]# mkdir cert
[root@master ~]# curl -LO https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz #下载easyrsa软件
[root@master ~]# tar xzf easy-rsa.tar.gz
[root@master ~]# cd easy-rsa-master/easyrsa3
[root@master easyrsa3]# ./easyrsa init-pki
[root@master easyrsa3]# MASTER_IP=172.24.8.71 #定义MASTER_IP
[root@master easyrsa3]# ./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass #生成 CA
[root@master easyrsa3]# ./easyrsa --subject-alt-name="IP:${MASTER_IP}" build-server-full server nopass #生成服务器证书和密钥
[root@master easyrsa3]# cp pki/ca.crt pki/issued/server.crt pki/private/server.key /root/cert/ #复制相关证书
- --client-ca-file=/root/cert/ca.crt
- --tls-cert-file=/root/cert/server.crt
- --tls-private-key-file=/root/cert/server.key
五 相关证书及配置项
5.1 API Server 证书
- --tls-cert-file string
- --tls-private-key-file string
5.2 Client CA 证书
- --client-ca-file string
5.3 请求头证书
- --requestheader-allowed-names stringSlice
- --requestheader-client-ca-file string
5.4 kubelet证书
- --kubelet-certificate-authority string
- --kubelet-client-certificate string
- --kubelet-client-key string
- --client-ca-file string
- --tls-cert-file string
- --tls-private-key-file string
- --service-account-key-file stringArray
- --service-account-signing-key-file string
附008.Kubernetes TLS证书介绍及创建的更多相关文章
- 附024.Kubernetes全系列大总结
Kubernetes全系列总结如下,后期不定期更新.欢迎基于学习.交流目的的转载和分享,禁止任何商业盗用,同时希望能带上原文出处,尊重ITer的成果,也是尊重知识.若发现任何错误或纰漏,留言反馈或右侧 ...
- kubernetes(K8S)创建自签TLS证书
TLS证书用于进行通信使用,组件需要证书关系如下: 组件 需要使用的证书 etcd ca.pem server.pem server-key.pem flannel ca.pem server.pem ...
- 二进制搭建kubernetes多master集群【一、使用TLS证书搭建etcd集群】
上一篇我们介绍了kubernetes集群架构以及系统参数配置,参考:二进制搭建kubernetes多master集群[开篇.集群环境和功能介绍] 下面本文etcd集群才用三台centos7.5搭建完成 ...
- 在阿里云托管kubernetes上利用 cert-manager 自动签发 TLS 证书[无坑版]
前言 排错的过程是痛苦的也是有趣的. 运维乃至IT,排错能力是拉开人与人之间的重要差距. 本篇会记录我的排错之旅. 由来 现如今我司所有业务都运行在阿里云托管kubernetes环境上,因为前端需要对 ...
- 4.第三篇 PKI基础概念、cfssl工具介绍及kubernetes中证书
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483787&idx=1&sn=08dd3404 ...
- 基于TLS证书手动部署kubernetes集群(下)
一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已经部署好了etcd集群.flannel网络以及每个节点的docker,接下来部署master节 ...
- 基于TLS证书手动部署kubernetes集群(上)
一.简介 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S. K8S是Google内部一个叫Borg的容器集群管理系统衍生 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- Kubernetes 集群部署(1) -- 自签 TLS 证书
集群功能各模块功能描述: Master节点:主要由四个模块组成,APIServer,schedule, controller-manager, etcd APIServer: APIServer负责对 ...
随机推荐
- Java transient关键字【转】
转自:http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.htmlVolatile修饰的成员变量在每次被线程访问时,都强迫从主内存中 ...
- 半监督学习(semi-supervised learning)
P(x)P(x,y)}⇒P(y|x) 自 P(x) 生成的无标签样本: 自 P(x,y) 生成的标记样本:
- Leetcode 318 Maximum Product of Word Lengths 字符串处理+位运算
先介绍下本题的题意: 在一个字符串组成的数组words中,找出max{Length(words[i]) * Length(words[j]) },其中words[i]和words[j]中没有相同的字母 ...
- 知乎C++问题整理
如何平衡性能,合理选择C++STL集装箱? ANSER: 首先要搞清楚,假设STL问题,那么问题出在哪里? STL能够简单地觉得就是算法+数据结构,全部容器的算法选择和实现都是经过精心设计和严格測试的 ...
- AR研究-Demo集
原文:AR研究-Demo集 之前研究了图像处理.图像识别及AR 等相关技术,下载了很多开源源码进行学习和尝试引用,包括c++.c#.Opengl.Emgu. Aforge.OpenCV. ...
- JS 小鸟飞
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- Tinyhttpd for Windows(学习型的项目,才500多行代码)
前言 TinyHTTPd是一个开源的简易学习型的HTTP服务器,项目主页在:http://tinyhttpd.sourceforge.net/,源代码下载:https://sourceforge.ne ...
- linux自动挂载远程网盘到本地
sudo vim /etc/fstab 添加如下内容 //192.168.1.110/MyFiles /path/to/mount cifs username=adminz,password=pas ...
- Android应用开机自启动问题
本文主要介绍Android应用如何实现开机自启动.自启动失败的原因以及通过ADB命令模拟发送BOOT_COMPLETED开机广播. 1.Android应用如何实现开机自启动 (1) 实现一个广播类,接 ...
- virtualbox ubuntu16.04 自动挂载共享文件夹
为了操作方便,需要ubuntu 在开机运行时自动挂载共享文件夹,ubuntu的版本是16.04,宿主机是win10,步骤如下: 1. 在virtualbox “设备”-“共享文件夹”中设置共享文件夹如 ...