使用docker方式安装etcd集群,带TLS证书
网上文档也多,安装的时候,还是踩了几个坑。
现在作一个安装记录吧。
1,先作自签名的证书ca-csr.json(为了和k8s共用根证书,可能将信息调为k8s)。
{ "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "ca": { "expiry": "438000h" }, "names": [ { "C": "CN", "ST": "ShangHai", "L": "ShangHai", "O": "kubernetes", "OU": "system" } ] }
2,生成根证书和key。
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
这一步,会生成ca.pem和ca-key.pem文件。
3,有了根证书之后,建一个ca-config.json文件,用它来作为签发其它证书的配置文件。
{ "signing": { "default": { "expiry": "438000h" }, "profiles": { "server": { "expiry": "438000h", "usages": [ "signing", "key encipherment", "server auth" ] }, "client": { "expiry": "438000h", "usages": [ "signing", "key encipherment", "client auth" ] }, "peer": { "expiry": "438000h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } }
4,生成一个etcd_server_demo.json。
{ "CN": "etcdServer", "hosts": [ "127.0.0.1", "localhost", "etcd_ip_address" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "O": "etcd", "OU": "etcd Security", "C": "CN", "L": "ShangHai", "ST": "ShangHai" } ] }
这个json文件,我们暂时不生成证书,因为不同的etcd节点,需要证书认证的IP不一样,我们可以通过脚本把IP传进去,即时生成证书。
5,生成一个etcd_peer.json文件
{ "CN": "etcdPeer", "hosts": [ "127.0.0.1", "localhost", "peer*.ip", "server.etcd.cluster.local", "peer1.etcd.cluster.local", "peer2.etcd.cluster.local", "peer3.etcd.cluster.local", "peer4.etcd.cluster.local", "peer5.etcd.cluster.local" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "O": "etcd", "OU": "etcd Security", "C": "CN", "L": "ShangHai", "ST": "ShangHai" } ] }
6,使用上面的json文件,生成peer之间证书(未启用peer认证,因为是内部网,只启用了apiserver到2379的tls认证)。
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=etcd_ca-config.json -profile=peer etcd-peer.json | cfssljson -bare peer
7,生成一个etcd_client.json文件
{ "CN": "etcdClient", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "O": "etcd", "OU": "etcd Security", "C": "CN", "L": "ShangHai", "ST": "ShangHai" } ] }
8,使用上面的json文件,生成一个客户端认证的证书(这个证书,改了名字之后,可用于k8s的healthcheck,也可用于apiserver-etcd-client)。
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=etcd_ca-config.json -profile=client etcd-client.json | cfssljson -bare client
9,生成了这些证书之后,将所有证书和cfssl放到pik/目录下,使用下面这个etcd.sh脚本,进行etcd的集群安装。
#! /usr/bin/env bash set -e set -u set -x THIS_HOST=$ REGISTRY=harbor/k8s.gcr.io/etcd-amd64 ETCD_VERSION= TOKEN=k8s-etcd-token CLUSTER_STATE=new HOST_1=1.2.3.4 HOST_2=5.6.7.8 HOST_3=9.0.1.2 CLUSTER=${HOST_1}=http://${HOST_1}:2380,${HOST_2}=http://${HOST_2}:2380,${HOST_3}=http://${HOST_3}:2380 DATA_DIR=/etcd/etcd-data PKI_SRC_DIR=etcd/pki PKI_DST_DIR=/pki LOCAL_IP=$(hostname -I) # 以上变量,三个节点相同 #判断输入的IP是否在集群内,是否为本机IP if [[ ${THIS_HOST} != ${HOST_1} && ${THIS_HOST} != ${HOST_2} && ${THIS_HOST} != ${HOST_3} ]]; then echo "ip not in the etcd cluster host." exit fi if ! [[ ${LOCAL_IP} =~ ${THIS_HOST} ]]; then echo "ip not in the local ip." exit fi # 替换IP生成证书 /bin/cp -rf pki/etcd_server_demo.json pki/etcd_server.json sed -i "s/etcd_ip_address/${THIS_HOST}/g" pki/etcd_server.json pki/cfssl gencert -ca=pki/ca.pem -ca-key=pki/ca-key.pem -config=pki/ca-config.json -profile=server pki/etcd_server.json|pki/cfssljson -bare pki/server # 运行docker docker run \ -p : \ -p : \ --volume=${DATA_DIR}:/etcd-data \ --volume=${PKI_SRC_DIR}:${PKI_DST_DIR} \ --name etcd ${REGISTRY}:${ETCD_VERSION} \ /usr/local/bin/etcd \ --data-dir=/etcd-data --name ${THIS_HOST} \ --initial-advertise-peer-urls http://${THIS_HOST}:2380 \ --listen-peer-urls http://0.0.0.0:2380 \ --advertise-client-urls https://${THIS_HOST}:2379 \ --listen-client-urls https://0.0.0.0:2379 \ --initial-cluster ${CLUSTER} \ --initial-cluster-state ${CLUSTER_STATE} \ --initial-cluster-token ${TOKEN} \ --cert-file=${PKI_DST_DIR}/server.pem \ --key-file=${PKI_DST_DIR}/server-key.pem \ --trusted-ca-file=${PKI_DST_DIR}/ca.pem
10,安装集群。将etcd.sh里的HOST_1~3更改为计划集群的IP地址。使用,在每台机器上,使用sh etcd.sh [本地IP],即可安装。
11,常用的测试集群和测试集群的命令,还带tls的。
./etcdctl --ca-file=pki/ca.pem --cert-file=pki/client.pem --key-file=pki/client-key.pem --endpoints=https://1.2.3.4:2379 cluster-health ./etcdctl --ca-file=pki/ca.pem --cert-file=pki/client.pem --key-file=pki/client-key.pem --endpoints=https://1.2.3.4:2379 member list ./etcdctl --ca-file=pki/ca.pem --cert-file=pki/client.pem --key-file=pki/client-key.pem --endpoints=https://1.2.3.4:2379 set /message hello ./etcdctl --ca-file=pki/ca.pem --cert-file=pki/client.pem --key-file=pki/client-key.pem --endpoints=https://1.2.3.4:2379 get /message curl -k --cert pki/client.pem --key pki/client-key.pem https://1.2.3.4:2379/v2/keys/message
使用docker方式安装etcd集群,带TLS证书的更多相关文章
- 基于已有集群动态发现方式部署 Etcd 集群
etcd提供了多种部署集群的方式,在「通过静态发现方式部署etcd集群」 一文中我们介绍了如何通过静态发现方式部署集群. 不过很多时候,你只知道你要搭建一个多大(包含多少节点)的集群,但是并不能事先知 ...
- 基于 DNS 动态发现方式部署 Etcd 集群
使用discovery的方式来搭建etcd集群方式有两种:etcd discovery和DNS discovery.在 「基于已有集群动态发现方式部署etcd集群」一文中讲解了etcd discove ...
- kubernetes 集群安装etcd集群,带证书
install etcd 准备证书 https://www.kubernetes.org.cn/3096.html 在master1需要安装CFSSL工具,这将会用来建立 TLS certificat ...
- 采用二进制方式安装K8S集群,版本etcd-v3.3.10,flannel-v0.11.0,kubernetes-server-linux-amd64
官方提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环 ...
- 二进制文件方式安装kubernetes集群
所有操作全部用root使用者进行,高可用一般建议大于等于3台的奇数,我们使用3台master来做高可用 练习环境说明: 参考GitHub master: kube-apiserver,kube-con ...
- 通过静态发现方式部署 Etcd 集群
在「etcd使用入门」一文中对etcd的基本知识点和安装做了一个简要的介绍,这次我们来说说如何部署一个etcd集群. etcd构建自身高可用集群主要有三种形式: 静态发现: 预先已知etcd集群中有哪 ...
- yum安装etcd集群
前一篇文章介绍了如何yum安装简单的kubernetes集群,其中etcd是单点部署.本篇我们来搭建etcd集群,方便日后搭建kubernetes HA集群架构. 1,环境配置说明 etcd1 ...
- 安装etcd集群
kuberntes 系统使用 etcd 存储所有数据,是最重要的组件之一,注意 etcd集群只能有奇数个节点(1,3,5...),本文档使用3个节点做集群. 一.基础环境 软件包 etcd下载地址:h ...
- 基于Docker方式实现Elasticsearch集群
采用docker容器,搭建两个es集群,可根据步骤自行扩展n+集群 1.创建es挂载目录 cd /usr/localmkdir -p es/config 2.创建es存放数据目录 cd esmkdir ...
随机推荐
- 开源的API文档工具框架——Swagger简介
初次接触Swagger是在2017年5月,当时公司正好要对整套系统架构进行重新设计,有同事推荐用这个技术框架来规范后台接口的API文档.当时因为架构重构,涉及改造的技术点太多,一时也就没太多精力,把S ...
- python之async-timeout模块
async-timeout 兼容async的超时的上下文管理器 async-timeout的timeout和asyncio的wiat_for比较 首先从使用上来说asyncio.wait_for(aw ...
- c++不定参数函数
不定参数当年做为C/C++语言一个特长被很多人推崇,但是实际上这种技术并没有应用很多.除了格式化输出之外,我实在没看到多少应用.主要原因是这种技术比较麻烦,副作用也比较多,而一般情况下重载函数也足以替 ...
- codeforces 38G - Queue splay伸展树
题目 https://codeforces.com/problemset/problem/38/G 题意: 一些人按顺序进入队列,每个人有两个属性,地位$A$和能力$C$ 每个人进入时都在队尾,并最多 ...
- safarai - loading.close() 无效问题
代码环境: vue + elenment 问题描述: 上传文件时,显示loading动画:上传成功后,隐藏loading动画.window 下常用的浏览正常,safari 下的chrome浏览器(目前 ...
- LabVIEW 波形图表显示多条曲线
如何在波形图表中显示多条曲线呢? 首先看看波形图表的说明,请查看labVIEW 帮助 图 1 波形图表控件的即时帮助信息 关键就在绑定多个点. 图 2 利用捆绑函数将多个信号捆绑成簇 图 3 ...
- 本地项目提交到github和提交更新(转)
一:首先当然是去github注册账号了. 二:注册完毕登录后,在自己的首页上面点击右上角“+”号,然后选择New repository,或者直接点击下面的绿色按钮,创建一个新仓库.如图: 然后填入仓库 ...
- mysql连表分组报错---- sql_mode=only_full_group_by问题解决
#### sql语句报错问题 #1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggreg ...
- HAProxy从零开始到掌握
转自:https://www.jianshu.com/p/c9f6d55288c0 目录: HAProxy是什么 HAProxy的核心能力和关键特性 HAProxy的安装和运行 使用HAProxy搭建 ...
- jsp 错误处理
JSP提供了很好的错误处理能力.除了在Java代码 中可以使用try语句,还可以指定一个特殊页面.当应 用页面遇到未捕获的异常时,用户将看到一个精心设计 的网页解释发生了什么,而不是一个用户无法理解的 ...