Kubernetes 权威指南第二章校对(2)
校对的错误
san 同学不经意的一扫,就看到了上一篇中的两个错误:
- Kubeadm 文档中虽然没提到对 CPU 的检测,实际上单核虚拟机运行是会被 preflight 拒绝的。
- preflight 步骤中的:
sockert
应为socket
。
书接前回
近期俗务缠身,第二章的二进制部分又有较多需要更新的内容,因此拖延的比较厉害,见谅见谅。
二进制部署这部分和现状的主要差别是:
- https 已经是标配,而书中用分离的方式来讲述证书部分,显得强调不足。
- Kubernetes 的二进制文件下载方式发生了一些变化。
- etcd 的配置和验证方法也要更新。
关于 ca 证书
出于安全方面的考虑,Kubernetes 各组件之间的通信都要求使用 https 通信来完成,这就要求我们要为参与通信的各种组件提供证书来支持 https 通信。一般来说,因为都是内部通信,会采用自签署的根证书来签发其它所有证书。统一的根证书有利于建立信任关系,操作也更加方便,因此这里使用单一 CA 的方案。
生成自签署根证书很容易:
# openssl genrsa -out ca.key 2048
Generating RSA private key, 2048 bit long modulus
...+++
...........................................................................................................................
.....................................+++
e is 65537 (0x10001)
# openssl req -subj "/CN=Kubernetes CA" -new -x509 -days 3650 -key ca.key -out ca.crt
这里需要注意的是 -days
参数,这个参数代表的是 ca 的有效期,后续的内容中也会看到这个参数,建议读者认真对待这个参数,防止后面的使用过程中,因为证书失效造成不必要的损失。把新生成的证书和密钥保存到 /etc/kubernetes/pki/
,后面我们将会使用这个 ca 签署其它的证书。自签发的 ca 证书应该加入到集群中所有节点的信任列表之中,以保证该 ca 签发的证书能够得到所有节点的信任。例如在 CentOS 7 中需要使用如下命令:
# cp ca.crt /etc/pki/ca-trust/source/anchors/
# update-ca-trust
etcd服务
etcd 是 Kubernetes 集群的主数据库,需要在安装 Kubernetes 各服务之前完成安装和启动。
从官方 GitHub 可以找到 etcd 的发行包,下载解压之后,将 etcd 和 etcdctl 文件复制到 /usr/bin
目录。
为 etcd 编写 systemd 服务配置文件(/usr/lib/systemd/system/etcd.service
):
[Unit]
Description=Etcd Server
After=network.target
[Service]
Type=notify
ExecStart=/usr/bin/etcd \
--data-dir=/var/lib/etcd \
--client-cert-auth=false \
--cert-file=/etc/kubernetes/pki/etcd-server.crt \
--key-file=/etc/kubernetes/pki/etcd-server.key \
--trusted-ca-file=/etc/kubernetes/pki/ca.crt \
--listen-client-urls=https://127.0.0.1:2379,https://10.211.55.33:2379 \
--advertise-client-urls=https://10.211.55.33:2379 \
--name=kubguide1
Restart=always
RestartSec=10s
LimitNOFILE=40000
[Install]
WantedBy=multi-user.target
--data-dir
参数指定了 etcd 的数据存储路径。在实际环境中需要注意:etcd 承担了整个集群的核心存储工作,因此对所在磁盘的性能是有较高需求的。
--listen-client-urls
定义了 etcd 服务器的监听地址。
--cert-file
、--key-file
以及 --trusted-ca-file
三个参数的组合形成了一个 ca 到证书的信任链:不论是 etcd 自身还是和 etcd 进行通信的kube-apiserver,都强烈建议使用 https 进行通信,因此上面的命令行中设置了一组证书。
在启动之前,要使用前面的 ca 文件签发一个 etcd 服务器的证书。
为证书编写一个配置文件 etcd-server.cnf
:
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 10.211.55.33
IP.2 = 127.0.0.1
文件中的 DNS 和 IP 字段应该覆盖 etcd 服务器的所有监听地址。
生成证书密钥:
# openssl genrsa -out etcd-server.key 2048
生成签发请求:
# openssl req -new -key etcd-server.key -subj "/CN=etcd-server" \
-config etcd-server.cnf -out etcd-server.csr
签发证书:
# openssl x509 -req -in etcd-server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out etcd-server.crt -days 365 -extensions v3_req -extfile etcd-server.cnf
完成证书生成步骤之后,把 *.key
和 *.crt
文件保存到 /etc/kubernetes/pki
目录中,就可以通过systemctl start
命令启动 etcd 服务了。同时,使用 systemctl enable
命令将服务加入开机启动列表中:
# systemctl daemon-reload
# systemctl enable etcd.service
# systemctl start etcd.service
通过执行 etcdctl cluster-health
,可以验证 etcd 是否正确启动:
# etcdctl --endpoints https://127.0.0.1:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from https://10.211.55.33:2379
cluster is healthy