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文件之外的其他文件。

到此證書就生成好了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM