博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
etcd启用https服务
阅读量:5846 次
发布时间:2019-06-18

本文共 4220 字,大约阅读时间需要 14 分钟。

目录

关于etcd的集群配置可直接参考

这篇文档只是在其基础上增加ssl加密验证的过程。

要让集群使用ssl,首先需要为集群生成ssl证书。

我们使用cfssl系列工具来生成相关证书。

cfssl相关工具下载

curl -s -L -o /opt/kubernetes/bin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64curl -s -L -o /opt/kubernetes/bin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64chmod +x /opt/kubernetes/bin/{cfssl,cfssljson}

生成etcd所需要的ssl证书

生成ca证书

ca-config.json配置如下:

{    "signing": {        "default": {            "expiry": "175200h"        },        "profiles": {            "kubernetes": {                "expiry": "175200h",                "usages": [                    "signing",                    "key encipherment",                    "server auth",            "client auth"                ]            },            "etcd": {                "expiry": "175200h",                "usages": [                    "signing",                    "key encipherment",                    "server auth",                    "client auth"                ]            }        }    }}

字段说明:

  • ca-config.json:可以定义多个Profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书的时候使用某个Profile。这里定义了两个Profile,一个用于kubernetes,一个用于etcd。但因为这篇文档不涉及到kubernetes的配置,所以kubenretes段是不使用的。
  • signing:表示该证书可用于签名其他证书;生成的ca.pem证书中CA=TRUE
  • server auth:表示client可以使用该ca对server提供的证书进行验证
  • client auth:表示server可以用该ca对client提供的证书进行验证

ca-csr.json配置如下:

{    "key": {        "algo": "rsa",        "size": 2048    },    "names": [        {            "C": "CN",            "L": "Wuhan",            "ST": "Hubei",            "O": "k8s",            "OU": "System"        }    ]}

生成ca证书:

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

执行后会生成三个文件:

  • ca-key.pem : CA的私有key
  • ca.pem : CA证书
  • ca.csr : CA的证书请求文件

生成etcd服务端证书

etcd服务端证书用于加密etcd集群之间的通信

etcd-csr.json文件内容如下:

{  "CN": "etcd-server",  "hosts": [    "localhost",    "0.0.0.0",    "127.0.0.1",    "10.5.12.16",    "10.5.12.17",    "10.5.12.18"  ],  "key": {    "algo": "rsa",    "size": 4096  },  "names": [    {      "C": "CN",      "L": "Wuhan",      "O": "k8s",      "OU": "System",      "ST": "Hubei"    }  ]}

生成etcd服务端证书:

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

生成三个文件:etcd.pem, etcd-key.pem, etcd.csr

生成etcd客户端证书

etcd客户端证书用于etcd客户端连接etcd时提供验证方式

etcd-client-csr.json

{  "CN": "etcd-client",  "hosts": [    ""  ],  "key": {    "algo": "rsa",    "size": 4096  },  "names": [    {      "C": "CN",      "L": "Wuhan",      "ST": "Hubei",      "O": "k8s",      "OU": "System"    }  ]}

生成客户端证书:

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd etcd-client-csr.json | cfssljson -bare etcd-client

生成三个文件:etcd-client.pem, etcd-client-key.pem, etcd-client.csr

最佳实践: 在实际生产中,为了简化etcd的管理,我们通常不会为服务端和客户端各生成一套证书,而是生成一套即可以用于服务端也可以同时用于客户端的证书。在我们上面生成etcd的ca证书的时候,可以看到etcd-ca-config.json中etcd的证书useags中同时有server auth和client auth。也就是说,基于我们的ca证书生成的etcd证书本身就可以同时用于服务端与客户端。然而,我们在生成etcd服务端证书的时候,在etcd-server-csr.json中指定了hosts,所以该证书只能被指定的hosts列表中的主机使用,要想所有的客户端都能使用这个证书。最简单的方法就是和生成etcd客户端证书时一样,直接将hosts留空。反过来,也就是说,我们可以直接将生成的etcd客户端证书用于服务端。

修改etcd集群配置文件

修改后的/opt/kubernetes/cfg/etcd.conf文件内容如下:

ETCD_NAME=etcd1ETCD_DATA_DIR="/data/etcd"ETCD_LISTEN_CLIENT_URLS="http://10.5.12.16:2379,http://127.0.0.1:2379"ETCD_LISTEN_PEER_URLS="http://10.5.12.16:2380"ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.5.12.16:2380"ETCD_INITIAL_CLUSTER="etcd1=http://10.5.12.16:2380,etcd2=http://10.5.12.17:2380,etcd3=http://10.5.12.18:2380"ETCD_INITIAL_CLUSTER_STATE="new"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_ADVERTISE_CLIENT_URLS="http://10.5.12.16:2379"CLIENT_CERT_AUTH="true"ETCD_CA_FILE="/opt/kubernetes/ssl/ca.pem"ETCD_CERT_FILE="/opt/kubernetes/ssl/etcd.pem"ETCD_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"PEER_CLIENT_CERT_AUTH="true"ETCD_PEER_CA_FILE="/opt/kubernetes/ssl/ca.pem"ETCD_PEER_CERT_FILE="/opt/kubernetes/ssl/etcd.pem"ETCD_PEER_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"

重启etcd集群

systemctl restart etcd

验证集群健康情况

验证集群健康状态时,需要使用客户端证书来连接etcd集群:

etcdctl --cert-file=/opt/kubernetes/ssl/etcd-client.pem  --key-file=/opt/kubernetes/ssl/etcd-client-key.pem --ca-file=/opt/kubernetes/ssl/ca.pem --endpoints=https://10.5.12.16:2379,https://10.5.12.17:2379,https://10.5.12.18:2379 member list

转载于:https://www.cnblogs.com/breezey/p/8847332.html

你可能感兴趣的文章
loadrunner安装运行一步一步来(多图)
查看>>
git请求报错 401
查看>>
监控工具htop的安装及使用
查看>>
Nodejs使用图灵机器人获取笑话
查看>>
Spring 任务调度 简单的,使用Schedule
查看>>
SQL 2005删除作业计划出错(DELETE语句与 REFERENCE约束"FK_subplan_job_id"冲突。)的解决...
查看>>
【Touch&input 】支持多个游戏控制器(18)
查看>>
我的友情链接
查看>>
SQL语句学习
查看>>
What is Cluster Aware Updating in Windows Server 2012?
查看>>
进老男孩的自我介绍和决心书
查看>>
线上Linux服务器运维安全策略经验分享
查看>>
Android一些问题的解决方案
查看>>
ios之UIToolBar
查看>>
网络ASI
查看>>
Luogu P4707 重返现世
查看>>
目标与绩效管理实战专家胡立
查看>>
axios 中断请求
查看>>
2014手机分析图
查看>>
Linux PID 1 和 Systemd
查看>>