文章目录

  • 场景
  • ETCD证书
    • 创建根证书 (CA) 和私钥
    • 创建etcd证书和私钥
  • 配置
    • 静态
    • 发现
    • 动态DNS
  • 集群成员扩容
  • 数据迁移
  • 错误
    • bad certificate
    • DNS 的 SRV 解析报错
  • 注意点
    • API
  • 参考

官网
GitHub

场景

  • 服务注册发现
  • 共享配置

ETCD证书

  • client certificate 由ca 机构颁发给客户端证书,由服务器验证客户端的身份。

    • kubectl、kube-proxy、calico:需要client证书。
  • server certificate 由ca机构颁发给服务器证书,并由客户端验证服务器身份。例如docker服务器或kube-apiserver。
  • peer certificate (既是server cert又是client cert)由 etcd 集群成员使用,供它们彼此之间通信使用。
    • etcd节点:需要标识自己服务的server cert,也需要client cert与etcd集群其他节点交互,因此需要一个对等证书。
    • master节点:需要标识 apiserver服务的server cert,也需要client cert连接etcd集群,也需要一个对等证书。
    • kubelet:需要标识自己服务的server cert,也需要client cert请求apiserver,也使用一个对等证书。

创建根证书 (CA) 和私钥

cfssl 支持以上三种类型证书,也可以建一个多用型的

cd /k8s/etcd
cat > ca-config.json <<EOF
{"signing": {"default": {"expiry": "87600h"},"profiles": {"ectd": {"usages": ["signing",            # 表示该证书可用于签名其它证书,生成的ca.pem证书找中CA=TRUE"key encipherment","server auth",      #表示client可以用该证书对server提供的证书进行验证"client auth"      #client auth 表示server可以用该证书对client提供的证书进行验证],"expiry": "87600h"}}}
}
EOF

创建etcd证书和私钥

配置

静态

ETCD_DATA_DIR="/data/k8s/etcd/data"
ETCD_WAL_DIR="/data/k8s/etcd/wal"
# 监听的用于节点之间通信的url,可监听多个,集群内部将通过这些url进行数据交互(如选举,数据同步等)
ETCD_LISTEN_PEER_URLS="https://192.168.1.91:2380"
# 监听的用于客户端通信的url,同样可以监听多个
ETCD_LISTEN_CLIENT_URLS="https://192.168.1.91:2379"
ETCD_MAX_SNAPSHOTS="5"
ETCD_MAX_WALS="5"
ETCD_NAME="etcd1"
ETCD_SNAPSHOT_COUNT="100000"
ETCD_HEARTBEAT_INTERVAL="100"
ETCD_ELECTION_TIMEOUT="1000"
# 建议用于节点之间通信的url,节点间将以该值进行通信
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.1.91:2380"
# 建议使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.1.91:2379"
# 集群中所有的initial-advertise-peer-urls 的合集
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.1.91:2380,etcd2=https://192.168.1.92:2380,etcd3=https://192.168.1.93:2380"
# 节点的token值,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,
# 当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd集群就不会相互影响
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
# 表示这是新初始化集群
ETCD_INITIAL_CLUSTER_STATE="new"
# etcd的公钥证书
ETCD_CERT_FILE="/etc/etcd/cert/etcd.pem"
# etcd的私钥
ETCD_KEY_FILE="/etc/etcd/cert/etcd-key.pem"
ETCD_CLIENT_CERT_AUTH="true"
# 指定了客户端的CA证书
ETCD_TRUSTED_CA_FILE="/etc/kubernetes/cert/ca.pem"
ETCD_AUTO_TLS="true"
# etcd的Peers通信的公钥证书
ETCD_PEER_CERT_FILE="/etc/etcd/cert/etcd.pem"
# etcd的Peers通信的私钥
ETCD_PEER_KEY_FILE="/etc/etcd/cert/etcd-key.pem"
ETCD_PEER_CLIENT_CERT_AUTH="true"
# 指定了Peers的CA证书
ETCD_PEER_TRUSTED_CA_FILE="/etc/kubernetes/cert/ca.pem"
ETCD_PEER_AUTO_TLS="true"

发现

静态配置前提是在搭建集群之前已经提前知道各节点的信息,而实际应用中可能存在预先并不知道各节点ip的情况,这时可通过已经搭建的etcd来辅助搭建新的etcd集群。

  • 1、在已经搭建的etcd中创建用于发现的url
  • 2、另一方面,如果没有搭建好的etcd集群用于注册和发现,可使用etcd公有服务来进行服务注册发现。

#[Member]
ETCD_NAME="etcd01"
ETCD_DATA_DIR="/data1/etcd"ETCDCTL_API="2"
ETCD_ENABLE_V2="true"ETCD_LISTEN_PEER_URLS="https://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="https://0.0.0.0:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://47.241.67.61:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://47.241.67.61:2379,https://127.0.0.1:2379"#[discovery]
ETCD_DISCOVERY="https://discovery.etcd.io/4636d0525ea552bb567fa3f8c59312f8"ETCD_CERT_FILE="/k8s/etcd/ssl/server.pem"
ETCD_KEY_FILE="/k8s/etcd/ssl/server-key.pem"
ETCD_TRUSTED_CA_FILE="/k8s/etcd/ssl/ca.pem"
ETCD_CLIENT_CERT_AUTH="true"
ETCD_PEER_CERT_FILE="/k8s/etcd/ssl/server.pem"
ETCD_PEER_KEY_FILE="/k8s/etcd/ssl/server-key.pem"
ETCD_PEER_TRUSTED_CA_FILE="/k8s/etcd/ssl/ca.pem"
ETCD_PEER_CLIENT_CERT_AUTH="true"

动态DNS

需要局域网内部有DNS服务器
添加SRV(Service Record,DNS服务记录),目前常用的内部DNS服务有两种:bind、dnsmasq

ETCD_DATA_DIR="/data/k8s/etcd/data"
ETCD_WAL_DIR="/data/k8s/etcd/wal"
ETCD_LISTEN_PEER_URLS="https://192.168.1.91:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.1.91:2379"
ETCD_MAX_SNAPSHOTS="5"
ETCD_MAX_WALS="5"
ETCD_NAME="etcd1"
ETCD_SNAPSHOT_COUNT="100000"
ETCD_HEARTBEAT_INTERVAL="100"
ETCD_ELECTION_TIMEOUT="1000"ETCD_INITIAL_ADVERTISE_PEER_URLS="https://etcd1.k8s.com:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://etcd1.k8s.com:2379,https://etcd1.k8s.com:4001"
# 在这简单配置就可以了
ETCD_DISCOVERY_SRV="k8s.com"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"ETCD_CERT_FILE="/etc/etcd/cert/etcd.pem"
ETCD_KEY_FILE="/etc/etcd/cert/etcd-key.pem"
ETCD_CLIENT_CERT_AUTH="true"
ETCD_TRUSTED_CA_FILE="/etc/kubernetes/cert/ca.pem"
ETCD_AUTO_TLS="true"
ETCD_PEER_CERT_FILE="/etc/etcd/cert/etcd.pem"
ETCD_PEER_KEY_FILE="/etc/etcd/cert/etcd-key.pem"
ETCD_PEER_CLIENT_CERT_AUTH="true"
ETCD_PEER_TRUSTED_CA_FILE="/etc/kubernetes/cert/ca.pem"
ETCD_PEER_AUTO_TLS="true"

集群成员扩容

1、将新节点注册到集群

curl http://127.0.0.1:2379/v2/members -XPOST -H “Content-Type: application/json” -d ‘{“peerURLs”: [“http://192.168.73.172:2380”]}’

2、在新节点上启动etcd容器,注意-initial-cluster-state参数为existing

数据迁移

/usr/local/etcd/etcd \
-name etcd03 \
-advertise-client-urls http://192.168.73.150:2379,http://192.168.73.150:4001 \
-listen-client-urls http://0.0.0.0:2379 \
-initial-advertise-peer-urls http://192.168.73.150:2380 \
-listen-peer-urls http://0.0.0.0:2380 \
-initial-cluster-token etcd-cluster \
-initial-cluster "etcd01=http://192.168.73.140:2380,etcd02=http://192.168.73.137:2380,etcd03=http://192.168.73.150:2380" \
# 特别注意
-initial-cluster-state existing

错误

bad certificate

(error "remote error: tls: bad certificate", ServerName "k8s.com")

解决:
报错的意思是在生成ETCD的TLS证书的时候,没有把对应的域名加进去

DNS 的 SRV 解析报错

etcd: error setting up initial cluster: cannot find local etcd member "etcd1" in SRV records

解决:配置SRV解析的时候报错,请仔细查看解析配置
SRV解析分为两种,一种是http不带证书的解析,一种是https带证书的解析,是有区别的,如果配置错误就会包上述错误

注意点

API

etcd2和etcd3是不兼容的,两者的api参数也不一样,详细请查看 etcdctl -h 。
可以使用api2 和 api3 写入 etcd3 数据,但是需要注意,使用不同的api版本写入数据需要使用相应的api版本读取数据。

参考

【etcd 集群搭建及常用场景分析】
【CentOS 7 ETCD集群配置大全】

ETCD看这一篇就够了相关推荐

  1. api网关选型_如何轻松打造百亿流量API网关?看这一篇就够了(下)

    如何轻松打造百亿流量API网关?看这一篇就够了(上) 上篇整体描述了网关的背景,涉及职能.分类.定位环节,本篇进入本文的重点,将会具体谈下百亿级流量API网关的演进过程. 准备好瓜子花生小板凳开始积累 ...

  2. python装饰器功能是冒泡排序怎么做_传说中Python最难理解的点|看这完篇就够了(装饰器)...

    https://mp.weixin.qq.com/s/B6pEZLrayqzJfMtLqiAfpQ 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主要是 ...

  3. serviceloader java_【java编程】ServiceLoader使用看这一篇就够了

    转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...

  4. docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  5. mysql ip比较大小_MySQL优化/面试,看这一篇就够了

    原文链接:http://www.zhenganwen.top/articles/2018/12/25/1565048860202.html 作者:Anwen~ 链接:https://www.nowco ...

  6. 基础 | 零散的MySql基础记不住,看这一篇就够啦

    ❝ 这是小小本周的第二篇,本篇将会着重的讲解关于MySql基础的内容,MySql基础看这一篇就够啦. ❞ 送书反馈与继续送书 之情小微信公众号第一次送书,Java深度调试技术,书已经被中奖者麦洛签收, ...

  7. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,看完这篇就够了,论软件架构设计的重要性、本篇论文“未通过考试”,供分析参考

    [系统架构设计师]软考高级职称,一次通过,倾尽所有,看完这篇就够了,学习方法和技巧这里全都有. 论软件架构设计的重要性.本篇论文未通过考试(不合格),供分析参考. 目录 摘要 正文 结尾 摘要 201 ...

  8. 深度好文:云网络丢包故障定位,看这一篇就够了~

    深度好文:云网络丢包故障定位,看这一篇就够了~ https://mp.weixin.qq.com/s/-Q1AkxUr9xzGKwUMV-FQhQ Alex 高效运维 今天 来源:本文经授权转自公众号 ...

  9. 代理后台中间件_Golang Gin 实战(十三)| 中间件详解看这一篇就够了

    6000字大章带你死磕Golang Gin中间件 在Gin的整个实现中,中间件可谓是Gin的精髓.一个个中间件组成一条中间件链,对HTTP Request请求进行拦截处理,实现了代码的解耦和分离,并且 ...

最新文章

  1. 实用Common Lisp编程——函数
  2. 运放使用中不稳定怎么办?
  3. 从快的打车:说O2O产品的奇特推广模式
  4. 16_Android生命周期再介绍,通过androidconfigChanges属性让界面旋转时不改变状态中保留的值
  5. shell预先定义的特殊变量
  6. edu汇编语言——实训课程
  7. mysql主从安装_MySQL主从详细安装步骤
  8. 镜像迁移到registry_数据库迁移了解一下
  9. vs关于“当前不会命中断点 还没有为该文档加载任何符号”的解决方法
  10. python 技能清单_Python清单
  11. 趣图:SQL 版的喝椰汁,没想到吧
  12. 阿铭linux苹果客户端,2018年5月 – 阿铭Linux
  13. 处理System.IO.Ports未能找到类型或命名空间名
  14. Hbase性能测试及优化过程记
  15. matlab s-function找不到
  16. 支付宝转账银行卡收款二维码制作教程
  17. 蜗牛星际集成:PVE系统+NAS+WEB 折腾笔记
  18. 截至2022.2.1全网最全面最开放的蓝牙AOA高精度定位行业生态解决方案配套产品及商用案例真实视频合集分享来自深圳核芯物联科技
  19. 游戏建模初学者必看的游戏人物模型贴图制作方法及制作小技巧
  20. 为什么DNS监测能够让你的网络更加安全

热门文章

  1. 蓝桥杯 结果填空 奇怪的比赛 dfs
  2. 测试开发知识点整理(一)
  3. pdf文件转化为wmf文件_如何将PDF文件转换为PowerPoint
  4. 挖掘采购网的价值线索,走上产品销售“快车道”
  5. 叠瓦式硬盘和垂直式硬盘怎么区分?
  6. 【《春娇与志明》:贱也要在一起 】-百度影集http://www.baidumovies.com
  7. Win7 右下角出现 Test Mode
  8. 迈克菲:2016年的八大网络安全威胁
  9. Antlr 4语法与空格
  10. UGUI源码分析:LayoutGroup中的纵横布局组件(HorizontalOrVerticalLayoutGroup)