部署环境


IP地址 主机名 功能
10.1.32.230 k8s-deploy-test 部署节点,不承担实际作用
10.1.32.231 k8s-master-test01 master节点
10.1.32.232 k8s-master-test02 master节点
10.1.32.233 k8s-master-test03 master节点
10.1.32.240 k8s-nginx-test 负载均衡节点,实际生产中应为HA架构
10.1.32.234 k8s-node01-test01 node节点
10.1.32.235 k8s-node02-test02 node节点
10.1.32.236 k8s-node03-test03 node节点

创建CA证书和密钥


安装cfssl工具集(k8s-deploy):

cfssl工具用于快速创建证书请求并生成各类证书文件:

mkdir -p /opt/k8s/cert && cd /opt/k8s
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 && mv cfssl_linux-amd64 /opt/k8s/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 && mv cfssljson_linux-amd64 /opt/k8s/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 && mv cfssl-certinfo_linux-amd64 /opt/k8s/bin/cfssl-certinfo

chmod +x /opt/k8s/bin/*
export PATH=/opt/k8s/bin:$PATH

创建CA证书(k8s-deploy):

CA证书为集群顶级证书(根证书),后续所有的应用的证书都由该证书颁发:

cd /opt/k8s/work/
cat > ca-config.json << EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}
EOF
  • expiry,证书有效期,单位为小时,这里设置为10年。
  • server auth,client可以用该证书对server提供的证书进行验证。
  • client auth,server可以用该证书对client提供的证书进行验证。

创建一个证书签名请求文件,添加如下内容:

cat > ca-csr.json << EOF
{
  "CN": "kubernetes",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Shanghai",
      "L": "Shanghai",
      "O": "dominos",
      "OU": "ops"
    }
  ],
  "ca": {
    "expiry": "87600h"
  }
}
EOF
  • CN,Common Name,kube-apiserver从证书中提取该字段作为请求的用户名 (User Name),浏览器使用该字段验证网站是否合法。
  • O,Organization,kube-apiserver从证书中提取该字段作为请求用户所属的组 (Group)。
  • kube-apiserver将提取的User、Group作为RBAC授权的用户标识。

通过ca证书和证书签名请求生成密钥对:

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

生成私钥和证书,结构如下图:


分发CA证书文件(k8s-deploy):

将生成的pem文件及config文件发送到各节点:

cd /opt/k8s/work
source /opt/k8s/bin/environment.sh

for node_ip in ${NODE_IPS[@]}
    do
        echo ">>> ${node_ip}"
        ssh root@${node_ip} "mkdir -p /etc/kubernetes/cert"
        scp ca*.pem ca-config.json root@${node_ip}:/etc/kubernetes/cert
    done
文档更新时间: 2021-09-02 17:22   作者:闻骏