目录

一、CA证书

二、制作K8S集群证书流程

1.制作官方颁发的证书

2.制作master端的证书

3.制作worker node端证书

(1)服务器单向认证

(3)双向 TLS 认证

三、K8S 二进制集群

1.分类

2.节点分配

四、ETCD集群

1.环境

2. K8S

3.docker

4.ETCD集群

master节点操作

(1)定义两个脚本

(2)查看etcd 启动脚本

(3)创建ca证书

(4)创建cfssl类型工具下载脚本

node节点制作


一、CA证书

CA证书中包含密钥对 (rsa 非对称密钥)
CA证书可以对通信加密,同时标识身份的唯一性
.pem :证书

二、制作K8S集群证书流程

1.制作官方颁发的证书

① 创建ca密钥(文件定义) ca-key.pem
② 创建ca证书(文件定义) ca.pem

2.制作master端的证书

用于内部加密通讯,同时为了给与Client端颁发master签名的证书

①创建过程:需要以下几步
    1)设置私钥 确保安全加密            .pem    
    2)私钥签名 确保身份真实            .csr
    3)制作证书(需要CA官方颁发)      cert.pem

② 创建私钥
③ 私钥签名
④ 使用ca证书与密钥证书签名

3.制作worker node端证书

① 由master端制作node端密钥
② 对node端的证书进行签名
③ 创建一个配置文件(区别于服务端,进行客户端验证)
④ 生成证书

CA 证书机构 (签发电子证书)

在 Kubernetes 的组件之间进行通信时,数字证书的验证是在协议层面通过 TLS 完成的,除了需要在建立通信时提供相关的证书和密钥外,在应用层面并不需要进行特殊处理。

采用 TLS 进行验证有两种方式:

(1)服务器单向认证

只需要服务器端提供证书,客户端通过服务器端证书验证服务的身份,但服务器并不验证客户端的身份。这种情况一般适用于对Internet开放的服务,例如搜索引擎网站,任何客户端都可以连接到服务器上进行访问,但客户端需要验证服务器的身份,以避免连接到伪造的恶意服务器。

(3)双向 TLS 认证

除了客户端需要验证服务器的证书,服务器也要通过客户端证书验证客户端的身份。这种情况下服务器提供的是敏感信息,只允许特定身份的客户端访问。在Kubernetes中,各个组件提供的接口中包含了集群的内部信息。如果这些接口被非法访问,将影响集群的安全,因此组件之间的通信需要采用双向TLS认证。即客户端和服务器端都需要验证对方的身份信息。在两个组件进行双向认证时,会涉及到下面这些证书相关的文件:

① 服务器端证书:服务器用于证明自身身份的数字证书,里面主要包含了服务器端的公钥以及服务器的身份信息。
② 服务器端私钥:服务器端证书中包含的公钥所对应的私钥。公钥和私钥是成对使用的,在进行TLS验证时,服务器使用该私钥来向客户端
证明自己是服务器端证书的拥有者
③ 客户端证书:客户端用于证明自身身份的数字证书,里面主要包含了客户端的公钥以及客户端的身份信息。
④ 客户端私钥:客户端证书中包含的公钥所对应的私钥,同理,客户端使用该私钥来向服务器端证明自己是客户端证书的拥有者。
⑤ 服务器端 CA 根证书:签发服务器端证书的 CA 根证书,客户端使用该 CA 根证书来验证服务器端证书的合法性。
⑥ 客户端端 CA 根证书:签发客户端证书的 CA 根证书,服务器端使用该 CA 根证书来验证客户端证书的合法性。

三、K8S 二进制集群

k8s 默认有三种部署方式:Minikube 、kubeadm、 二进制 →工具部署/云平台部署

1.分类

1)ETCD集群
2)FLANNEL网络
3)单master部署
4)node部署
5)多master署(LB部署haproxy + keepalived 或者nginx + keepalived )

2.节点分配

负载均衡(lb)

nginx01   主机ip/24
nginx02   主机ip/24

master节点

master01  主机ip/24
master02  主机ip/24

Node节点

node01     主机ip/24
node02    主机ip/24

四、ETCD集群

1.环境

官网源码包下载:https://github.com/kubernetes/kubernetes/releases?after=v1.13.1
ETCD 二进制包地址:https://github.com/etcd-io/etcd/releases

2. K8S

Master:192.168.22.228/24 kube-apiserver kube-controller-manager kube-scheduler etcd
Node01:192.168.22.168/24 kubelet kube-proxy docker flannel etcd
Node02:192.168.22.206/24 kubelet kube-proxy docker flannel etcd

3.docker

yum install -y yum-utils device-mapper-persistent-data lvm2cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y docker-cesystemctl stop firewalld
systemctl disable firewalldsetenforce 0systemctl start docker
systemctl enable dockertee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://jqqwsp8f.mirror.aliyuncs.com"]
}
EOFsystemctl daemon-reload
systemctl restart dockervim /etc/sysctl.conf
net.ipv4.ip_forward=1sysctl -p
systemctl restart network
systemctl restart docker swapoff -a 

4.ETCD集群

master节点操作

(1)定义两个脚本

mkdir k8scd k8setcd-cert.sh 是证书制作的脚本
etcd.sh etcd启动脚本
cat etcd-cert.sh
cat > ca-config.json <<EOF     CA证书配置文件
{"signing": {                 键名称"default": {"expiry": "87600h" 证书有效期(10年)→证书默认时间是一年,1年K8S做了更新,把证书续一年},"profiles": {              简介"www": {                    名称"expiry": "87600h","usages": [               使用方法"signing",                键"key encipherment",      密钥验证(密钥验证要设置在CA证书中)"server auth",           服务器端验证"client auth"           客户端验证]}}}
}
EOF
cat > ca-csr.json <<EOF              CA签名文件
{"CN": "etcd CA",                CA签名为etcd指定(三个节点均需要)"key": {"algo": "rsa",              使用rsa非对称密钥的形式"size": 2048                 密钥长度为2048},"names": [                        在证书中定义信息(标准格式){"C": "CN",              名称"L": "Beijing",      "ST": "Beijing"     }]
}
EOFcfssl gencert -initca ca-csr.json | cfssljson -bare ca -
cat > server-csr.json <<EOF      服务器端的签名
{"CN": "etcd","hosts": [                   定义三个节点的IP地址"192.168.22.228","192.168.22.168","192.168.22.206"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing"}]
}
EOFcfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare servercfssl 为证书制作工具

(2)查看etcd 启动脚本

cat etcd.sh #!/bin/bash
以下为使用格式:etcd名称 当前etcd的IP地址+完整的集群名称和地址
# example: ./etcd.sh etcd01 192.168.1.10 etcd02=https://192.168.1.11:2380,etcd03=https://192.168.1.12:2380ETCD_NAME=$1                        位置变量1:etcd节点名称
ETCD_IP=$2                          位置变量2:节点地址
ETCD_CLUSTER=$3                         位置变量3:集群WORK_DIR=/opt/etcd                  指定工作目录(一定要写绝对路径)cat <<EOF >$WORK_DIR/cfg/etcd       在指定工作目录创建ETCD的配置文件
#[Member]
ETCD_NAME="${ETCD_NAME}"                          etcd名称
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380"       etcd IP地址:2380端口。用于集群之间通讯
ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379"     etcd IP地址:2379端口,用于开放给外部客户端通讯#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380"ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379"   对外提供的url使用https的协议进行访问ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}"       多路访问ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"             tokens 令牌环名称:etcd-clusterETCD_INITIAL_CLUSTER_STATE="new"                     状态,重新创建EOF
cat <<EOF >/usr/lib/systemd/system/etcd.service      定义ectd的启动脚本
[Unit]                                               基本项
Description=Etcd Server                                 类似为 etcd 服务
After=network.target
After=network-online.target
Wants=network-online.target[Service]                                    服务项
Type=notify
EnvironmentFile=${WORK_DIR}/cfg/etcd        etcd文件位置
ExecStart=${WORK_DIR}/bin/etcd \            准启动状态及以下的参数
--name=\${ETCD_NAME} \
--data-dir=\${ETCD_DATA_DIR} \
--listen-peer-urls=\${ETCD_LISTEN_PEER_URLS} \
--listen-client-urls=\${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
--advertise-client-urls=\${ETCD_ADVERTISE_CLIENT_URLS} \ #以下为群集内部的设定
--initial-advertise-peer-urls=\${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
--initial-cluster=\${ETCD_INITIAL_CLUSTER} \
--initial-cluster-token=\${ETCD_INITIAL_CLUSTER_TOKEN} \    群集内部通信,也是使用的令牌,为了保证安全(防范中间人窃取)
--initial-cluster-state=new \
--cert-file=${WORK_DIR}/ssl/server.pem \        证书相关参数
--key-file=${WORK_DIR}/ssl/server-key.pem \
--peer-cert-file=${WORK_DIR}/ssl/server.pem \
--peer-key-file=${WORK_DIR}/ssl/server-key.pem \
--trusted-ca-file=${WORK_DIR}/ssl/ca.pem \
--peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536                               开放最多的端口号[Install]
WantedBy=multi-user.target                      进行启动
EOFsystemctl daemon-reload                           参数重载
systemctl enable etcd
systemctl restart etcd

(3)创建ca证书

首先,创建证书目录,复制k8s目录下的证书创建脚本

mkdir etcd-certmv etcd-cert.sh etcd-certls etcd-cert

(4)创建cfssl类型工具下载脚本

先从官网源中制作证书的工具下载下来

cat cfssl.sh先从官网源中制作证书的工具下载下来,(-o:导出)放在/usr/local/bin中便于系统识别curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl

从另一个站点源中下载cfssljson工具,用于识别json配置文件格式

curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson

下载cfssl-certinfo工具

curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo

给与权限

chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfobash cfssl.sh cd /usr/local/binchmod +x *

返回etcd-cert目录

pwd

定义ca证书

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

定义证书签名文件

cat > ca-csr.json <<EOF
{   "CN": "etcd CA","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "Beijing","ST": "Beijing"}]
}
EOF

生成证书,生成ca-key.pem 和ca.pem

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

指定etcd三个节点之间的通信验证使用的证书

etcd节点服务端的签名文件

cat > server-csr.json <<EOF
{"CN": "etcd","hosts": ["192.168.22.228","192.168.22.168","192.168.22.206"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing"}]
}
EOF

根据服务端签名文件生成证书

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

以上签名文件制作完毕

node节点制作

将etcd、flannel、k8s集群配置文件上传

创建配置文件,命令文件,证书

mkdir /opt/etcd/{cfg,bin,ssl} -p 

拷贝命令文件至相应目录

mv etcd-v3.3.10-linux-amd64/etcd etcd-v3.3.10-linux-amd64/etcdctl /opt/etcd/bin/

拷贝证书文件至相应目录

 cp etcd-cert/*.pem /opt/etcd/ssl/

进入卡住状态等待其他节点加入

bash etcd.sh etcd01 192.168.22.228 etcd02=https://192.168.22.168:2380,etcd03=https://192.168.22.206:2380

使用另外一个会话打开,会发现etcd进程已经开启

 ps -ef | grep etcd

拷贝证书去其他节点

scp -r /opt/etcd/ root@192.168.22.168:/opt/
scp -r /opt/etcd/ root@192.168.22.206:/opt

启动脚本拷贝其他节点

scp /usr/lib/systemd/system/etcd.service root@192.168.22.168:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.22.206:/usr/lib/systemd/system/

修改node节点

vim /opt/etcd/cfg/etcd#[Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.22.168:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.22.168:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.22.168:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.22.168:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.22.228:2380,etcd02=https://192.168.22.168:2380,etcd03=https://192.168.22.206:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

启动

systemctl start etcd
systemctl status etcd

检查群集状态

cd /root/k8s/etcd-cert
/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.22.:2379,https://192.168.22.:2379,https://192.168.22.:2379" cluster-health

CA证书与ETCD集群相关推荐

  1. 【运维】K8S集群部署系列之ETCD集群搭建(二)

    TLS证书生成 文章目录 TLS证书生成 简介 工具下载 创建CA认证中心 CA证书申请文件 生成CA证书和私钥 配置证书生成策略 证书验证 查看证书 验证证书 生成ETCD集群的TLS证书 服务端证 ...

  2. 手动安装K8s第三节:etcd集群部署

    手动安装K8s第三节:etcd集群部署 准备安装包 https://github.com/coreos/etcd 版本:3.2.18 wget https://github.com/coreos/et ...

  3. etcd 集群运维实践

    [编者的话]etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境.因此围绕 etcd 相关的运维知识就比较 ...

  4. k8s之二进制安装etcd集群

    前言 kubeadm安装的集群,默认etcd是一个单机的容器化的etcd,并且k8s和etcd通信没有经过ssl加密和认证,这点是需要改造的. 所以首先我们需要先部署一个三节点的etcd集群,二进制部 ...

  5. K8S_Google工作笔记0011---通过二进制方式_部署etcd集群

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上一步咱们生成了,这4个证书文件,ca-key.pem ca.pem server-key.pem ...

  6. Kubernetes集群搭建之Etcd集群配置篇

    docker快速启动etcd脚本 https://www.cnblogs.com/ka1em/p/11300355.html rm -rf /tmp/etcd-data.tmp && ...

  7. etcdctl-管理操作etcd集群

    一.简介 etcd就是个分布式非关系型数据库. 3 个节点组成的集群,可以容忍 1 个节点故障. 生成环境中,不推荐使用单个节点的 etcd 集群. etcd 支持存储多个版本的数据,允许查询指定 k ...

  8. kubernetes搭建 二、Etcd集群

    etcd需要在master和node上都部署,首先在master上部署,然后把相关的二进制文件和程序拷贝到node上再修改即可 1.下载二进制包然后解压 wget https://github.com ...

  9. Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 etcd集群

    说明:没有明确注明在某台服务器,都是在k8s-operation 工作服务器完成 K8S node 节点数大于2000 节点 k8s-operation 目录规划,工作目录/apps/work/k8s ...

最新文章

  1. C++、C#控制台应用程序暂停下来的方法
  2. phpcms忘记管理员密码和访问错误等常见问题
  3. ASP.Net调试过程中弹出的浏览器端口和asp.net development server的端口不一样
  4. SQL中除数为0处理情况演示
  5. JavaScript实现排序算法
  6. 洛谷P4219 大融合(LCT、虚子树)
  7. 【微信插件】P3微信插件测试使用步骤
  8. Android 系统(172)---如何使用addr2line命令解析native backtrace
  9. 消息已读未读的模型设计_构建一个即时消息应用(三):对话 | Linux 中国
  10. 字符串的碎片整理。。。
  11. 耳挂式蓝牙耳机原理_耳挂式蓝牙耳机项目总结分析报告
  12. python mysql connector
  13. 正则表达式(Regex)
  14. python activex_如何在python中使用ActiveX控件
  15. 服务器机房监控系统,服务器机房监控建设方案的介绍
  16. 从五个方面入手保障应用安全
  17. 用Java代码编程实现模拟机器人对话
  18. 中文版智能ABC如何移植到英文OS
  19. hook createmutex openmutex 实现多开
  20. 1.什么是Cython

热门文章

  1. 肠胃不好吃什么调理?
  2. 水果用途终于收集全了,赶紧收藏吧!
  3. 千寻定位服务接入指南
  4. Unity之IOS和Android安装包大小优化
  5. 计算机管理员英语怎么说,电脑管理员英文是什么?管理员英文怎么写?
  6. 合工大php期末试卷_完美起航-合肥工业大学机器人技术作业和实验
  7. Go语言程序编译注入版本信息,提升Debug速度!
  8. shell 对字符串去重并排序
  9. 图形化的dialog交互式脚本
  10. C语言编程>第九周 ④ 编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(y)-y=0的一个实根。yn+1=cos(yn)