• k8s自签TLS证书


    自签TLS证书

    TLS证书用于进行通信使用,k8s组件需要的证书有:

    第一步:安装证书生成工具cfssl

    在这之前需要先建立一个目录来存放安装的工具mkdir ssl,后面将安装的工具移动到各自的目录。方便管理

    wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
    wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
    wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
    chmod +x cfssl-certinfo_linux-amd64 cfssljson_linux-amd64 cfssl_linux-amd64 
    mv cfssl_linux-amd64 /usr/local/bin/cfssl
    mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
    mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
    

    在执行wget命令时,如果没有安装这个wget工具,会提示命令不存在。

    //执行命令安装wget工具
    yum install -y wget
    

    第二步:使用cfssl -help 查看cfssl工具帮助命令

    第三步:利用cfssl工具生成证书

    生成配置文件,可以根据这个文件来进行修改以适应自己的需求

    生成ca-config.json证书

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

    生成csr.json文件

    生成ca-csr.json证书文件

    cfssl print-defaults csr > ca-csr.json
    
    //修改内容为如下:
    {
        "CN": "kubernetes",
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "L": "Chengdu",
                "ST": "Chengdu",
    	   		 "O": "k8s",
    	    	"OU": "System"
            }
        ]
    }
    

    生成ca-key.pem ca.pem。

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

    生成server-csr.json文件

    cat << EOF | tee server-csr.json
    {
        "CN": "kubernetes",
        "hosts": [
        "172.16.163.131",
        "172.16.163.130",   
        "172.16.163.129",
        "kubernetes",
        "kubernetes.default",
        "kubernetes.default.svc",
        "kubernetes.default.svc.cluster",
        "kubernetes.default.svc.cluster.local"
        ],
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "L": "Chengdu",
                "ST": "Chengdu",
    	    	"O": "k8s",		
    	    	"OU": "System"
            }
        ]
    }
    EOF
    

    生成server.pem,server-key.pem

    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
    

    执行以上命令时会报错

    报错原因

    {
      "signing": {
        "default": {
          "expiry": "87600h"
        },
        "profiles": {
          "kubernetes": { //应该将ca-config.json文件的profiles改为kubernetes
             "expiry": "87600h",
             "usages": [
                "signing",
                "key encipherment",
                "server auth",
                "client auth"
            ]
          }
        }
      }
    }
    

    生成admin-csr.json文件

    cfssl print-defaults csr > admin-csr.json
    

    需要将上面的admin-csr.json修改为以下:

    {
        "CN": "admin",
        "hosts": [],
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "L": "Chengdu",
                "ST": "Chengdu",
    	    	"O": "system:masters",
    	    	"OU": "System"
            }
        ]
    }
    

    最后生成admin证书---admin-key.pem ,admin.pem

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

    生成代理

    cfssl print-defaults csr > kube-proxy-csr.json
    
    //将kube-proxy-csr.json修改为如下:
    {
        "CN": "system:kube-proxy",
        "hosts": [],
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "L": "Chengdu",
                "ST": "Chengdu",
    	    "O": "k8s",
    	    "OU": "System"
            }
        ]
    }
    
    //生成代理证书 kube-proxy-key.pem , kube-proxy.pem
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
    

    最后过滤掉pem之外的.json文件

    ls | grep -v pem

    使用命令ls | grep -v pem |xargs -i rm {}删除除了pem文件之外的其他文件。

    到此证书就生成好了。

  • 相关阅读:
    用户(三)
    首页和token验证(二)
    项目初始化和登录退出(一)
    VSCode设置vue/react模板
    Git操作
    C#可视化程序设计第三章(1,2)
    C#可视化程序设计第二章(3,4)
    SQL数据库第五章
    C#可视化程序设计第一章
    SQL数据库第四章
  • 原文地址:https://www.cnblogs.com/jasonboren/p/11483458.html
Copyright © 2020-2023  润新知