CFSSL use refresh Description

CFSSL is CloudFlare's PKI / TLS Switzerland ×××. It is a command-line tool that is used for signing, authentication and TLS certificate bundle HTTP API server.
1. Download and install CFSSL (for signing, authentication and TLS certificate bundle HTTP API tool) (master node)
wget HTTPS: // pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux- AMD64
Music Videos cfssl-certinfo_linux-AMD64 / usr / local / bin / cfssl-certInfo
Music Videos cfssl_linux-AMD64 / usr / local / bin / cfssl
Music Videos https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 / usr / local / bin / cfssljson
the chmod + X / usr / local / bin / cfssl / usr / local / bin / cfssl-certInfo / usr / local / bin / cfssljson

2创建CA(Certificate Authority)(master节点)
    mkdir /root/ssl
    cd /root/ssl
    cfssl print-defaults config > config.json # 默认配置模板
    cfssl print-defaults csr > csr.json #默认csr请求模板
    # 根据config.json文件的格式创建如下的ca-config.json文件
    # 过期时间设置成了 87600h

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

        知识点:
            ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;此实例只有一个kubernetes模板。
            signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
            server auth:表示client可以用该 CA 对server提供的证书进行验证;
            client auth:表示server可以用该CA对client提供的证书进行验证;
            注意标点符号,最后一个字段一般是没有都好的。

3 创建证书请求

    cat > ca-csr.json <<EOF
    {
      "CN": "kubernetes",    
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "GuangDong",
          "L": "ShenZhen",
          "O": "k8s",
          "OU": "System"
        }
      ],
        "ca": {
           "expiry": "87600h"
        }
    }   
    EOF

        知识点:
            "CN":Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name)
            "O":Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group)

4 生成CA证书和私钥
    cfssl gencert -initca ca-csr.json | cfssljson -bare ca
    将会生成 ca-key.pem(私钥)  ca.pem(公钥)
    知识点: cfssljson只是整理json格式,-bare主要的意义在于命名 (个人见解,以便理解,勿喷)

5 创建kubernetes证书请求文件
    cat > kubernetes-csr.json <<EOF
    {
        "CN": "kubernetes",
        "hosts": [
          "127.0.0.1",
          "10.192.44.129",
          "10.192.44.128",
          "10.192.44.126",
          "10.192.44.127",
          "10.254.0.1",
          "*.kubernetes.master",
          "localhost",
          "kubernetes",
          "kubernetes.default",
          "kubernetes.default.svc",
          "kubernetes.default.svc.cluster",
          "kubernetes.default.svc.cluster.local"
        ],
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "ST": "GuangDong",
                "L": "ShenZhen",
                "O": "k8s",
                "OU": "System"
            }
        ]
    }
        EOF
            知识点:
                这个证书目前专属于 apiserver加了一个 *.kubernetes.master 域名以便内部私有 DNS 解析使用(可删除);至于很多人问过 kubernetes 这几个能不能删掉,答案是不可以的;因为当集群创建好后,default namespace 下会创建一个叫 kubenretes 的 svc,有一些组件会直接连接这个 svc 来跟 api 通讯的,证书如果不包含可能会出现无法连接的情况;其他几个 kubernetes 开头的域名作用相同
                hosts包含的是授权范围,不在此范围的的节点或者服务使用此证书就会报证书不匹配错误。
                10.254.0.1是指kube-apiserver 指定的 service-cluster-ip-range 网段的第一个IP。
                #hosts配置区域,即一个证书的网站可以是*.youku.com也是可以是*.google.com
6 kubernetes证书和私钥
        cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes 
        知识点: -config 引用的是模板中的默认配置文件,-profiles是指定特定的使用场景,比如ca-config.json中的kubernetes区域
7 创建admin证书
        cat > admin-csr.json <<EOF
        {
          "CN": "admin",
          "hosts": [],
          "key": {
            "algo": "rsa",
            "size": 2048
          },
          "names": [
            {
              "C": "CN",
              "ST": "GuangDong",
              "L": "ShenZhen",
              "O": "system:masters",
              "OU": "System"
            }
          ]
        }
        EOF

8 生成admin证书和私钥
        cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
            知识点:
                这个admin 证书,是将来生成管理员用的kube config 配置文件用的,现在我们一般建议使用RBAC 来对kubernetes 进行角色权限控制, kubernetes 将证书中的CN 字段 作为User, O 字段作为 Group

Guess you like

Origin blog.51cto.com/9406836/2407290