单机配置

安装etcd

 
1、安装
yum install etcd -y
 
2、启动
systemctl start etcd
 
3、设置开机启动
systemctl enable etcd
 
4、开放远程
vi /etc/etcd/etcd.conf 
 
配置如下(监听任意的ip,这样才能在外部访问,后续会启用安全方面的相关设置)
#[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
#ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="default"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
#ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.2.155:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
#ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
#ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"
#
#[Proxy]
#ETCD_PROXY="off"
#ETCD_PROXY_FAILURE_WAIT="5000"
#ETCD_PROXY_REFRESH_INTERVAL="30000"
#ETCD_PROXY_DIAL_TIMEOUT="1000"
#ETCD_PROXY_WRITE_TIMEOUT="5000"
#ETCD_PROXY_READ_TIMEOUT="0"
#
#[Security]
ETCD_CERT_FILE="/ssl/server.pem"
ETCD_KEY_FILE="/ssl/server-key.pem"
#ETCD_CLIENT_CERT_AUTH="false"
#ETCD_TRUSTED_CA_FILE=""
#ETCD_AUTO_TLS="false"
#ETCD_PEER_CERT_FILE=""
#ETCD_PEER_KEY_FILE=""
#ETCD_PEER_CLIENT_CERT_AUTH="false"
#ETCD_PEER_TRUSTED_CA_FILE=""
#ETCD_PEER_AUTO_TLS="false"
#
#[Logging]
#ETCD_DEBUG="false"
#ETCD_LOG_PACKAGE_LEVELS=""
#ETCD_LOG_OUTPUT="default"
#
#[Unsafe]
#ETCD_FORCE_NEW_CLUSTER="false"
#
#[Version]
#ETCD_VERSION="false"
#ETCD_AUTO_COMPACTION_RETENTION="0"
#
#[Profiling]
#ETCD_ENABLE_PPROF="false"
#ETCD_METRICS="basic"
#
#[Auth]
#ETCD_AUTH_TOKEN="simple"
 
5、设置环境变量
( coredns只能使用etcd v3版本api添加的数据,etcdctl命令默认使用v2版本api,设置v3 api方法)
vim /etc/profile  或者(vim ~/.bash_profile) 在文件最后添加:
export ETCDCTL_API=3
 
6、使环境变量生效
source /etc/profile
 
7、编辑etcd启动文件
(/usr/lib/systemd/system/etcd.service)
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target [Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
User=etcd
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\" --cert-file=\"${ETCD_CERT_FILE}\" --key-file=\"${ETCD_KEY_FILE}\" --advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\""
Restart=on-failure
LimitNOFILE=65536 [Install]
WantedBy=multi-user.target
 
8、赋值/ssl/ca.pem文件到其他服务器
(没有scp命令的自行安装)
(在其他服务器:192.168.2.134上执行) mkdir /ssl
scp /ssl/ca.pem root@192.168.2.134:/ssl
 
9、验证
curl --cacert /ssl/ca.pem  https://192.168.2.155:2379/v3/keys/foo -XPUT -d value=bar -v
 

安装coredns

1、下载并解压源码,该项目是开源项目,可以到github上自行下载源码。
 
tar zxvf coredns_1.6.4_linux_amd64.tgz
mv coredns /usr/bin
mkdir /etc/coredns
 
2、添加主配置文件 vi /etc/coredns/Corefile,内容如下:
.:53 {
health # 监听tcp和udp的53端口
etcd { # 配置启用etcd插件,后面可以指定域名,例如 etcd test.com {
stubzones # 启用存根区域功能。 stubzone仅在位于指定的第一个区域下方的etcd树中完成
path /coredns # etcd里面的路径 默认为/skydns,以后所有的dns记录就是存储在该存根路径底下
endpoint http://localhost:2379 # etcd访问地址,多个空格分开 # upstream设置要使用的上游解析程序解决指向外部域名的在etcd(认为CNAME)中找到的外部域名。
upstream 114.114.114.114:53 8.8.8.8:53 /etc/resolv.conf fallthrough # 如果区域匹配但不能生成记录,则将请求传递给下一个插件
# tls CERT KEY CACERT # 可选参数,etcd认证证书设置
tls /ssl/server.pem /ssl/server-key.pem /ssl/ca.pem
# 指定访问etcd用户名和密码(根据实际情况使用)
credentials USERNAME PASSWORD
}
prometheus # 监控插件
cache 160 # 缓存时间
loop #
reload 6s # 自动加载时间间隔
loadbalance # 负载均衡,开启DNS记录轮询策略
forward . /etc/resolv.conf # 上面etcd未查询到的请求转发给设置的DNS服务器解析
log # 打印日志
errors # 输出错误
}
3、启动(常规命令行启动--非后台运行):
/usr/bin/coredns -conf /etc/coredns/Corefile
 
4、添加运行用户:
useradd coredns -s /sbin/nologin
 
5、将coredns做成系统服务:
vi /usr/lib/systemd/system/coredns.service
配置如下:
[Unit]
Description=CoreDNS DNS server
Documentation=https://coredns.io
After=network.target
[Service]
PermissionsStartOnly=true
LimitNOFILE=1048576
LimitNPROC=512
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
User=coredns
WorkingDirectory=~
ExecStart=/usr/bin/coredns -conf=/etc/coredns/Corefile
ExecReload=/bin/kill -SIGUSR1 $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
6、启动(需要切换到coredns用户):
systemctl daemon-reload
systemctl enable coredns
systemctl start coredns
systemctl status coredns
 
7、设置域名解析:
A记录
% etcdctl put /coredns/com/leffss/www '{"host":"1.1.1.1","ttl":10}'
OK * etcd的目录结构和域名是相反的,即上面表示域名:www.leffss.com
* ttl值设置60s后,coredns每60s才会到etcd读取这个域名的记录一次 查询结果:
% dig @localhost +short www.leffss.com
1.1.1.1 如果想添加多条记录,让coredns轮询,方法如下:
% etcdctl put /coredns/com/leffss/www/x1 '{"host":"1.1.1.2","ttl":10}'
OK
% etcdctl put /coredns/com/leffss/www/x2 '{"host":"1.1.1.3","ttl":10}'
OK * x1和x2可以自定义,比如a、b、c等
* 设置多个AAAA、CNAME等方法类似
* 添加/coredns/com/leffss/www/x1、x2后,请求www.leffss.com就不会再读取/coredns/com/leffss/www,可以使用etcdctl del /coredns/com/leffss/www删除值 查询结果:
% dig @localhost +short www.leffss.com
1.1.1.21.1.1.3 **注意:**如果想让取消设置的轮询值,需要删除/coredns/com/leffss/www/x1与/coredns/com/leffss/www/x2 AAAA记录
% etcdctl put /coredns/com/leffss/www '{"host":"1002::4:2","ttl":10}'
OK 查询结果:
% dig -t AAAA @localhost +short www.leffss.com
1002::4:2 CNAME记录
% etcdctl put /coredns/com/leffss/www '{"host":"www.baidu.com","ttl":10}'
OK 查询结果:
% dig -t CNAME @localhost +short www.leffss.com
www.baidu.com. * 这里cname设置成外部百度域名,按理说coredns应该也把这个cname记录继续解析成www.baidu.cm的IP地址,但是经过测试发现请求www.leffss.com只能解析到CNAME:www.baidu.com,无法继续解析,原因未知,以后研究 SRV记录
% etcdctl put /coredns/com/leffss/www '{"host":"www.baidu.com","port":80,"ttl":10}'
OK * SRV记录和CNAME记录类似,只是多了port,它们的添加方法其实可以通用 查询结果:
% dig -t SRV @localhost +short www.leffss.com
10 100 80 www.baidu.com. TXT记录
% etcdctl put /coredns/com/leffss/www '{"text":"This is text!","ttl":10}'
OK 查询结果:
% dig -t TXT @localhost +short www.leffss.com
"This is text!"
8、修改服务器名(可选操作):
hostnamectl set-hostname coredns
 
9、通过java代码想etcd添加解析记录(etcd-api使用版本3,因此客户端使用0.3.0):
public static void main(String[] args) throws Exception {
// create client
Client client = Client.builder().endpoints("http://192.168.2.155:2379").build();
KV kvClient = client.getKVClient(); ByteSequence key = ByteSequence.from(formatKey("www.leffss.com"), Charset.forName("UTF-8")); ByteSequence value = ByteSequence.from(formatValue("192.168.2.133", 53), Charset.forName("UTF-8")); // put the key-value
kvClient.put(key, value).get(); // get the CompletableFuture
CompletableFuture<GetResponse> getFuture = kvClient.get(key); // get the value from CompletableFuture
GetResponse response = getFuture.get(); List<KeyValue> keyValues = response.getKvs();
for (KeyValue kv : keyValues) {
System.out.println("key :" + kv.getKey().toString(Charset.forName("UTF-8")) + " val :" + kv.getValue().toString(Charset.forName("UTF-8")));
}
 
10、需要在pom中引入的依赖:
<dependency>
<groupId>dnsjava</groupId>
<artifactId>dnsjava</artifactId>
<version>2.1.8</version>
</dependency> <dependency>
<groupId>io.etcd</groupId>
<artifactId>jetcd-core</artifactId>
<version>0.3.0</version>
</dependency>
 
11、下载证书生成工具:
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
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-certinfo
 
12、创建目录:
mkdir /ssl
cd  /ssl
vi  etcd-cert.sh
 
13、生成tls证书脚本代码:
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": "hunan",
"ST": "changsha"
}
]
}
EOF cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
#-----------------------
cat > server-csr.json <<EOF
{
"CN": "etcd",
"hosts": [
"192.168.2.155",
"127.0.0.1"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "hunan",
"ST": "changsha"
}
]
}
EOF cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server // 单机模式tls
cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"server": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}, "client": {
"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": "hunan",
"O": "thyc",
"ST": "changsha"
}
]
}
EOF # 使用定义好的签名生成证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca - # 生成服务器证书
# -----------------------
cat > server-csr.json <<EOF
{
"CN": "etcd",
"hosts": [
"192.168.2.155",
"127.0.0.1"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "hunan",
"O": "thyc",
"ST": "changsha"
}
]
}
EOF # 生成服务器证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server server-csr.json | cfssljson -bare server

注意:

本博文中涉及到的ip请根据自己部署的服务器ip进行调整。

如启用tls后,你需要用java去连接etcd做域名解析记录的添加修改等,你需要引入ca.pem到你的java项目目录中。

ETCD 集群TLS(各节点需要保持时间同步,关闭防火墙(或开放指定端口),关闭selinux)
时间同步(如果没有ntpdate命令则自行安装):
ntpdate time1.aliyun.com

Centos 7.5私有域名服务器部署(coredns+etcd)的更多相关文章

  1. 转: centos7.5 下 coredns+etcd搭建DNS服务器

    coredns简介 CoreDNS是一个DNS服务器,和Caddy Server具有相同的模型:它链接插件.CoreDNS是云本土计算基金会启动阶段项目. CoreDNS是SkyDNS的继任者. Sk ...

  2. CentOS 7.5 通过kubeadm部署k8s-1.15.0

    kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验k ...

  3. centos7.5下coredns+etcd搭建DNS服务器

    coredns简介 安装etcd 安装coredns 设置域名解析 A记录 AAAA记录 CNAME记录 SRV记录 TXT记录 coredns简介 CoreDNS是一个DNS服务器,和Caddy S ...

  4. suse 12 二进制部署 Kubernetets 1.19.7 - 第11章 - 部署coredns组件

    文章目录 1.11.0.部署coredns 1.11.1.测试coredns功能 suse 12 二进制部署 Kubernetes 集群系列合集: suse 12 二进制部署 Kubernetets ...

  5. CentOS单机安装k8s并部署.NET 6程序 压测 记录

    前面部分依照CentOS单机安装k8s并部署.NET 6程序来进行,内存.cpu.centos版本一致,之前222元买的三年8M 2c4g腾讯云轻量服务器,这个教程算是写的很详细的了,基本可以一致执行 ...

  6. 四种方案:将OpenStack私有云部署到Hadoop MapReduce环境中

    摘要:OpenStack与Hadoop被誉为继Linux之后最有可能获得巨大成功的开源项目.这二者如何结合成为更猛的新方案?业内给出两种答案:Hadoop跑在OpenStack上或OpenStack部 ...

  7. 在CentOS 上搭建nginx来部署静态页面网站

    在centOs 上搭建nginx来部署静态页面网站 一.部署服务器环境 nginx:轻量级.高性能的HTTP及反向代理服务器,占用内存少,并发能力强,相比老牌的apache作为web服务器,性能更加卓 ...

  8. 【转载】在Centos系统上采用二进制文件部署Node.js环境

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...

  9. 部署coredns

      1 前提:     1.1不依赖kubeadm的方式,适用于不是使用kubeadm创建的k8s集群,或者kubeadm初始化集群之后,删除了dns相关部署.      1.2 DNS IP :10 ...

随机推荐

  1. POJ-1743 Musical Theme(最长不可重叠子串,后缀数组+二分)

    A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the ...

  2. nfs服务的讲解

    第4章 nfs存储服务的搭建 4.1 nfs服务的介绍 4.1.1 nfs的作用 nfs服务器是一种远程网络传输的共享文件系统 节省web服务器的本地存储空间 用户存储在web服务器上面的资源,会通过 ...

  3. Flink入门(四)——编程模型

    flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性.高吞吐.低延迟等优势,本文简述flink的编程模型. 数据集类型: 无穷数据集:无穷的持续集成的数据集合 有界数据集:有 ...

  4. VIP 视频开发板 上位机 测试软件 下载地址,玩转各自分辨率(V201抢先版)

    本上位机最高测试帧率 133fps 目前支持分辨率:更多分辨率支持,敬请期待或给我留言VGA:640*4801.3M:1280*10242M:1600*1200786p:1024*768 格式兼容:1 ...

  5. 【Git】405- 分享:大牛总结的 Git 使用技巧

    作者:你喜欢吃青椒么 来源:juejin.im/post/5d157bf3f265da1bcc1954e6 前言 本文是参考廖雪峰老师的Git资料再加上我自己对Git的理解,记录我的Git学习历程,作 ...

  6. robotframework配置邮箱服务器

    1.登录邮箱以腾讯企业邮箱为例:开启smtp服务并获得邮箱的客户端授权码 用户名:18890260218@163.com 客户端授权码:admin123 2.进入系统管理-->GO to plu ...

  7. [Cake] 3. dotnet 本地工具 cake & dotnet format

    在上一篇[Cake] 2. dotnet 全局工具 cake中介绍了通过.Net Core 2.1 的全局工具dotnet tool命令来简化cake的安装和使用.因为是全局安装,则无法适应每个项目对 ...

  8. 一次框架性能的比较,引起了我对搭建web框架的兴趣

    背景 一次无意的访问,点击到了一个专门做PHP性能测试的网站,看这里PHP Benchmarks. 在里面发现了框架性能测试的结果,发现Laravel的框架性能尽然是最低的.瞬间受到了一万点的暴击,谁 ...

  9. python基础入门 整型 bool 字符串

    整型,bool值,字符串 一.整型 整型十进制和二进制 整型:整型在Python中的关键字用int来表示; 整型在计算机中是用于计算和比较的 可进行+ - * / % //(整除) **(幂运算) 十 ...

  10. PAT1057 Stack(树状数组+倍增)

    目录 题目大意 题目分析 题目大意 要求维护一个栈,提供压栈.弹栈以及求栈内中位数的操作(当栈内元素\(n\)为偶数时,只是求第\(n/2\)个元素而非中间两数的平均值).最多操作100000次,压栈 ...