• 部署前的准备工作
    • 准备节点
      • 操作系统
      • Master 节点
      • ETCD 节点
      • Worker 节点
    • 准备客户端工具
      • " level="3">安装 cfssl
      • 安装 kubectl
    • " level="2">生成 CA 证书

    部署前的准备工作

    准备节点

    操作系统

    使用 Linux 发行版,本教程主要以 Ubuntu 18.04 为例

    Master 节点

    部署 K8S 控制面组件,推荐三台以上数量的机器

    ETCD 节点

    部署 ETCD,可以跟 Master 节点用相同的机器,也可以用单独的机器,推荐三台以上数量的机器

    Worker 节点

    实际运行工作负载的节点,Master 节点也可以作为 Worker 节点,可以通过 kubelet 参数 --kube-reserved 多预留一些资源给系统组件。

    通常会给 Master 节点打标签,让关键的 Pod 跑在 Master 节点上,比如集群 DNS 服务。

    准备客户端工具

    我们需要用 cfsslkubectl 来为各个组件生成证书和 kubeconfig,所以先将这两个工具在某个机器下载安装好。

    " class="reference-link">安装 cfssl

    1. curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o cfssl
    2. curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o cfssljson
    3. curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o cfssl-certinfo
    4. chmod +x cfssl cfssljson cfssl-certinfo
    5. sudo mv cfssl cfssljson cfssl-certinfo /usr/local/bin/

    安装 kubectl

    1. wget -q --show-progress --https-only --timestamping \
    2. https://storage.googleapis.com/kubernetes-release/release/v1.16.1/bin/linux/amd64/kubectl
    3. chmod +x kubectl
    4. mv kubectl /usr/local/bin/

    " class="reference-link">生成 CA 证书

    由于各个组件都需要配置证书,并且依赖 CA 证书来签发证书,所以我们首先要生成好 CA 证书以及后续的签发配置文件:

    1. cat > ca-csr.json <<EOF
    2. {
    3. "CN": "Kubernetes",
    4. "key": {
    5. "algo": "rsa",
    6. "size": 2048
    7. },
    8. "names": [
    9. {
    10. "C": "CN",
    11. "ST": "SiChuan",
    12. "L": "ChengDu",
    13. "O": "Kubernetes",
    14. "OU": "CA"
    15. }
    16. ]
    17. }
    18. EOF
    19. cfssl gencert -initca ca-csr.json | cfssljson -bare ca
    20. cat > ca-config.json <<EOF
    21. {
    22. "signing": {
    23. "default": {
    24. "expiry": "8760h"
    25. },
    26. "profiles": {
    27. "kubernetes": {
    28. "usages": ["signing", "key encipherment", "server auth", "client auth"],
    29. "expiry": "8760h"
    30. }
    31. }
    32. }
    33. }
    34. EOF

    生成的文件中有下面三个后面会用到:

    • ca-key.pem: CA 证书密钥
    • ca.pem: CA 证书
    • ca-config.json: 证书签发配置

    csr 文件字段解释:

    • CN: Common Name,apiserver 从证书中提取该字段作为请求的用户名 (User Name)
    • Organization,apiserver 从证书中提取该字段作为请求用户所属的组 (Group)

    由于这里是 CA 证书,是签发其它证书的根证书,这个证书密钥不会分发出去作为 client 证书,所有组件使用的 client 证书都是由 CA 证书签发而来,所以 CA 证书的 CN 和 O 的名称并不重要,后续其它签发出来的证书的 CN 和 O 的名称才是有用的