使用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 ...
随机推荐
- Java基础2-基本语法
复习 jvm : 虚拟机 --> sandbox jre : jvm + 核心类库 jdk : jre + 工具,javac java path: 操作系统搜索路径 classpath: jav ...
- Java的static类
首先Java的static类只能是静态内部类.如果在外部类声明为static,程序会编译通不过. 其次,主要了解下static内部类与普通内部类的区别是什么,以及static内部类的作用是什么,详见下 ...
- ES6学习笔记四(类和对象)
{ // 构造函数和实例 class Parent{ constructor(name='mukewan'){ this.name=name; } } let v_parent=new Parent( ...
- sqlite处理数据
# coding: UTF-8 import platform from _utils.patrol2 import run_cmd, data_format, report_format impor ...
- 前端 ----jQuery的属性操作
04-jQuery的属性操作 jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 html属性操作:是对html文档中的属性进行读取,设置和移除操作.比如 ...
- JS ----实现复制粘贴功能 (剪切板应用clipboardData)
注意:ie7,与ie8 对网页有个复制的权限,需在“安全”中的“自定义级别”的脚本中设置 clipboardData 对象 提供了对剪贴板的访问. 三个方法 :1.clearData(sDataFor ...
- centos6.5 python命令行模式左右建无法使用
我的虚拟机是centos6.5,自带python2.6:安装了Python2.7(安装了pip管理工具)后,在python2.7命令行模式下,左右键及退格键无法使用,基于以上情况,我进行了百度: 第一 ...
- SoapUI、Jmeter、Postman三种接口测试工具的比较分析
前段时间忙于接口测试,也看了几款接口测试工具,简单从几个角度做了个比较,拿出来与诸位分享一下吧.各位如果要转载,请一定注明来源,最好在评论中告知博主一声,感谢.本报告从多个方面对接口测试的三款常用工具 ...
- 《深入理解Oracle 12c数据库管理(第二版)》PDF
一:下载获取位置: 二:本书图样: 三:本书目录: 图书目录: 第1章 安装Oracle 1.1 了解OFA 1.1.1 Oracle清单目录 1.1.2 Oracle基础目录 1.1.3 Oracl ...
- Confluence 6 设置 Oracle 数据库准备
请查看 Supported Platforms 页面来获得 Confluence 系统支持的 Oracle 数据库版本.你需要在安装 Confluence 之前升级你的 Oracle 数据库. 如果你 ...