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
Avatar
崔秀龙

简单,是大师的责任;我们凡夫俗子,能做到清楚就很不容易了。

comments powered by Disqus
下一页
上一页

相关