二进制部署kubernetes v1.30.2集群 三、生成证书

生成证书(在k8s-master1节点上操作)

一、安装证书生成工具

  1、下载证书生成工具

wget "https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssl_1.6.4_linux_amd64" -O /usr/local/bin/cfssl
wget "https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssljson_1.6.4_linux_amd64" -O /usr/local/bin/cfssljson

  2、赋予工具执行权限

chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson

 

二、etcd证书

  1、创建CA配置文件。

cd /data/etcd/ssl
cat > ca-config.json <<EOF
{
    "signing": {
        "default": {
            "expiry": "87600h"
        },
        "profiles": {
            "etcd": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}
EOF

  过期时间为10年(87600h)。

  2、创建CA证书签名请求文件

cat > ca-csr.json << EOF
{
    "CN": "Etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "Beijing",
            "L": "Beijing",
            "O": "Etcd CA",
            "OU": "Etcd CA Security"
        }
    ]
}
EOF

  3、生成CA秘钥和证书

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

  这会生成两个文件:ca.pem(CA 证书)和 ca-key.pem(CA 私钥)。

  4、创建etcd证书签名请求文件

cat > etcd-csr.json << EOF
{
    "CN": "etcd",
    "hosts": [
        "localhost",
        "127.0.0.1",
        "192.168.110.21",
        "192.168.110.22",
        "192.168.110.23",
        "k8s-master01",
        "k8s-master02",
        "k8s-master03"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "Beijing",
            "L": "Beijing",
            "O": "Etcd Server",
            "OU": "Etcd Server Security"
        }
    ]
}
EOF

  注意修改hosts的信息。

  5、生成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 证书)和 etcd-key.pem(etcd 证书私钥)。

  此时/data/etcd/ssl目录下会存在以下文件:ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  etcd.csr  etcd-csr.json  etcd-key.pem  etcd.pem

  6、将相关证书复制到k8s-master02和k8s-master03的/data/etcd/ssl目录中。

scp *.pem k8s-master02:/data/etcd/ssl
scp *.pem k8s-master03:/data/etcd/ssl

 

三、k8s核心组件证书

CA证书

  1、创建CA证书配置文件

cd /data/k8s/ssl
cat > ca-config.json <<EOF
{
    "signing": {
        "default": {
            "expiry": "87600h"
        },
        "profiles": {
            "k8s": {
                "expiry": "87600h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}
EOF

  2、创建CA证书签名请求文件

cat > ca-csr.json   << EOF 
{
  "CN": "k8s",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "k8s",
      "OU": "k8s Security"
    }
  ]
}
EOF

  3、生成CA证书

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

 

apiserver证书

  1、创建apiserver证书签名请求文件

cat > apiserver-csr.json << EOF 
{
  "CN": "kube-apiserver",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "system:masters",
      "OU": "k8s Security"
    }
  ]
}
EOF

  注意:这里的CN值需要与之后的一些配置匹配,比如kubelet绑定RBAC权限使用的用户。

  2、生成apiserver证书

cfssl gencert \
-ca=ca.pem \
-ca-key=ca-key.pem \
-config=ca-config.json \
-hostname=127.0.0.1,k8s-master01,k8s-master02,k8s-master03,192.168.110.21,192.168.110.22,192.168.110.23,192.168.110.20,10.0.0.1,kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster.local \
-profile=k8s apiserver-csr.json | cfssljson -bare apiserver

 

controller-manage证书

  1、创建controller-manager签名请求文件

cat > controller-manager-csr.json << EOF 
{
  "CN": "system:kube-controller-manager",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "system:kube-controller-manager",
      "OU": "k8s Security"
    }
  ]
}
EOF

  注意:这里的CN与O项,为k8s默认的内置用户与组,默认绑定了RBAC权限,如果这里不固定为以上配置,需要在后续中手动配置RBAC权限。

  2、生成证书

cfssl gencert \
   -ca=ca.pem \
   -ca-key=ca-key.pem \
   -config=ca-config.json \
   -profile=k8s \
   -hostname=127.0.0.1,k8s-master01,k8s-master02,k8s-master03 \
   controller-manager-csr.json | cfssljson -bare controller-manager

 

scheduler证书

  1、创建scheduler证书签名请求文件

cat > scheduler-csr.json << EOF 
{
  "CN": "system:kube-scheduler",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "system:kube-scheduler",
      "OU": "k8s Secutiry"
    }
  ]
}
EOF

  注意:这里的CN与O项,为k8s默认的内置用户与组,默认绑定了RBAC权限,如果这里不固定为以上配置,需要在后续中手动配置RBAC权限。

  2、生成scheduler证书

cfssl gencert \
   -ca=ca.pem \
   -ca-key=ca-key.pem \
   -config=ca-config.json \
   -profile=k8s \
   -hostname=127.0.0.1,k8s-master01,k8s-master02,k8s-master03 \
   scheduler-csr.json | cfssljson -bare scheduler

 

kube-proxy证书

  1、创建kube-proxy证书签名请求文件

cat > kube-proxy-csr.json  << EOF 
{
  "CN": "system:kube-proxy",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "system:node-proxier",
      "OU": "k8s Security"
    }
  ]
}
EOF

  注意:这里的CN与O项,为k8s默认的内置用户与组,默认绑定了RBAC权限,如果这里不固定为以上配置,需要在后续中手动配置RBAC权限。

  2、生成kube-proxy证书

cfssl gencert \
   -ca=ca.pem \
   -ca-key=ca-key.pem \
   -config=ca-config.json \
   -profile=k8s \
   kube-proxy-csr.json | cfssljson -bare kube-proxy

 

四、k8s其他相关证书

apiserver聚合证书

  1、创建CA证书签名请求文件

cat > front-proxy-ca-csr.json <<EOF
{
  "CN": "front-proxy-ca",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "Beijing",
      "O": "k8s",
      "OU": "k8s Front Proxy"
    }
  ]
}
EOF

  2、生成聚合CA证书

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

  3、创建apiserver聚合证书签名请求文件

cat > front-proxy-client-csr.json <<EOF
{
  "CN": "front-proxy-client",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "Beijing",
      "O": "system:kube-aggregator",
      "OU": "k8s Front Proxy"
    }
  ]
}
EOF

  注意:这里的CN与O项,为k8s默认的内置用户与组,默认绑定了RBAC权限,如果这里不固定为以上配置,需要在后续中手动配置RBAC权限。

  4、生成apiserver聚合证书

cfssl gencert  \
-ca=front-proxy-ca.pem   \
-ca-key=front-proxy-ca-key.pem   \
-config=ca-config.json   \
-profile=k8s  front-proxy-client-csr.json | cfssljson -bare front-proxy-client

 

admin证书

  1、创建admin证书签名请求文件

cat > admin-csr.json << EOF 
{
  "CN": "admin",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "Beijing",
      "O": "system:masters",
      "OU": "k8s Admin"
    }
  ]
}
EOF

  注意:这里的O项,是k8s默认的内置管理员组,拥有最高权限权限,生产环境谨慎配置,如果这里不固定为以上配置,需要在后续中手动配置RBAC权限。

  2、生成admin证书

cfssl gencert \
   -ca=ca.pem \
   -ca-key=ca-key.pem \
   -config=ca-config.json \
   -profile=k8s  \
   admin-csr.json | cfssljson -bare admin

 

ServiceAccount Key

openssl genrsa -out sa.key 2048
openssl rsa -in sa.key -pubout -out sa.pub

 

五、复制证书到其他master节点

scp *.pem k8s-master02:/data/k8s/ssl
scp *.pem k8s-master03:/data/k8s/ssl
scp sa.* k8s-master02:/data/k8s/ssl
scp sa.* k8s-master03:/data/k8s/ssl
scp ca*.pem kube-proxy*.pem front-proxy-ca.pem k8s-node01:/data/k8s/ssl
scp ca*.pem kube-proxy*.pem front-proxy-ca.pem k8s-node02:/data/k8s/ssl

 

posted @ 2025-05-13 14:01  难止汗  阅读(311)  评论(0)    收藏  举报