• 【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(二)


    3 创建 CA 根证书和秘钥

    为确保安全,kubernetes 系统各组件需要使用 x509 证书对通信进行加密和认证。
    CA (Certificate Authority) 是自签名的根证书,用来签名后续创建的其它证书。
    CA 证书是集群所有节点共享的,只需要创建一次,后续用它签名其它所有证书。
    本文档使用 CloudFlare 的 PKI 工具集 cfssl创建所有证书。
    注意:如果没有特殊指明,本文档的所有操作均在 qist 节点上执行。

    3.1 安装 cfssl 工具集

    mkdir -p /opt/k8s/bin
    
    wget
    https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssl_1.4.1_linux_amd64
    mv cfssl_1.4.1_linux_amd64 /opt/k8s/bin/cfssl
    
    wget
    https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssljson_1.4.1_linux_am
    d64
    mv cfssljson_1.4.1_linux_amd64 /opt/k8s/bin/cfssljson
    
    wget https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfsslcertinfo_1.4.1_linux_amd64
    mv cfssl-certinfo_1.4.1_linux_amd64 /opt/k8s/bin/cfssl-certinfo
    
    chmod +x /opt/k8s/bin/*
    export PATH=/opt/k8s/bin:$PATH
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3.2 创建配置文件

    CA 配置文件用于配置根证书的使用场景 (profile) 和具体参数 (usage,过期时间、服务端认证、客户端认证、加密等):

    • 创建etcd K8S ca 目录
    mkdir -p /opt/k8s/cfssl/{etcd,k8s}
    mkdir -p /opt/k8s/cfssl/pki/{etcd,k8s}
    # 创建工作目录
    mkdir -p /opt/k8s/work
    
    • 1
    • 2
    • 3
    • 4
    • 全局配置文件生成
    cd /opt/k8s/work
    cat > /opt/k8s/cfssl/ca-config.json <<EOF
    {
      "signing": {
        "default": {
          "expiry": "87600h"
      },
      "profiles": {
        "kubernetes": {
          "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "876000h"
       }
      }
     }
    }
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • signing : 表示该证书可用于签名其它证书(生成的 ca.pem 证书中 CA=TRUE );
    • server auth : 表示client 可以用该该证书对 server 提供的证书进行验证;
    • client auth : 表示 server 可以用该该证书对client 提供的证书进行验证;
    • "expiry": “876000h” : 证书有效期设置为 100 年;

    3.3 创建证书签名请求文件

    • etcd 证书签名请求文件
    cd /opt/k8s/work
    cat > /opt/k8s/cfssl/etcd/etcd-ca-csr.json <<EOF
    {
      "CN": "etcd",
      "key": {
          "algo": "rsa",
          "size": 2048
      },
      "names": [
          {
              "C": "CN",
    	      "ST": "GuangDong",
    		  "L": "GuangZhou",
    		  "O": "k8s",
    		  "OU": "Qist"
      }
    ],
      "ca": {
        "expiry": "876000h"
      }
    }
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • kubernetes 证书签名请求文件
    cd /opt/k8s/work
    cat > /opt/k8s/cfssl/k8s/k8s-ca-csr.json <<EOF
    {
      "CN": "kubernetes",
      "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
      {
            "C": "CN",
            "ST": "GuangDong",
            "L": "GuangZhou",
            "O": "k8s",
            "OU": "Qist"
      }
     ],
    "ca": {
    "expiry": "876000h"
     }
    }
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • CN:Common Name : kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name),浏览器使用该字段验证网站是否合法;
    • O:Organization :kube-apiserver 从证书中提取该字段作为请求用户所属的组(Group)
    • kube-apiserver 将提取的 User、Group 作为 RBAC 授权的用户标识;

    注意:

    1. 不同证书 csr 文件的 CN、C、ST、L、O、OU 组合必须不同,否则可能出现 PEER’S CERTIFICATE HAS AN INVALID SIGNATURE 错误;
    2. 后续创建证书的 csr 文件时,CN 都不相同(C、ST、L、O、OU 相同),以达到区分的目的;

    下表可帮助您创建证书请求。

    Name姓名描述示例
    Country Name国家名称代表国家的两个字母 ISO 缩写。CN(中国)
    State or Province Name州或省组织所在州或省的名称。此名称不可使用缩写。ZJ(浙江)
    Locality Name所在地名称组织所在城市的名称。HZ(杭州)
    Organization Name组织名称组织的法定全称。请勿缩写组织名称。百度、腾讯、网易
    Organizational Unit Name组织部门可选,用于提供额外的组织信息。开发、测试、市场营销
    Common Name公用名别名记录的完全限定域名。如果两者不能精确匹配,那么您会收到一条证书名称检测警告。www.yourdomain.com
    Email Address电子邮件地址服务器管理员的电子邮件地址someone@yourdomain.com

    3.4 生成 CA 证书和私钥

    • 生成 etcd CA 证书和私钥
    cd /opt/k8s/work
    cfssl gencert -initca /opt/k8s/cfssl/etcd/etcd-ca-csr.json | \
    cfssljson -bare /opt/k8s/cfssl/pki/etcd/etcd-ca
    ls -la /opt/k8s/cfssl/pki/etcd/*-ca*
    root@Qist ~# ls /opt/k8s/cfssl/pki/etcd/*-ca*
    /opt/k8s/cfssl/pki/etcd/etcd-ca-key.pem /opt/k8s/cfssl/pki/etcd/etcd-ca.csr
    /opt/k8s/cfssl/pki/etcd/etcd-ca.pem
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 生成 kubernetes CA 证书和私钥
    cd /opt/k8s/work
    cfssl gencert -initca /opt/k8s/cfssl/k8s/k8s-ca-csr.json | \
    cfssljson -bare /opt/k8s/cfssl/pki/k8s/k8s-ca
    root@Qist ~# ls /opt/k8s/cfssl/pki/k8s/*-ca*
    /opt/k8s/cfssl/pki/k8s/k8s-ca-key.pem /opt/k8s/cfssl/pki/k8s/k8s-ca.csr
    /opt/k8s/cfssl/pki/k8s/k8s-ca.pem
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.5 分发CA证书文件

    • etcd ca 证书分发
    cd /opt/k8s/work
    scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca* root@192.168.2.175:/apps/etcd/ssl
    scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca* root@192.168.2.176:/apps/etcd/ssl
    scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca* root@192.168.2.177:/apps/etcd/ssl
    
    • 1
    • 2
    • 3
    • 4
    • kubernetes ca 证书分发
    # k8s 连接etcd 使用ca 证书
    scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca.pem root@192.168.2.175:/apps/k8s/ssl/etcd/
    scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca.pem root@192.168.2.176:/apps/k8s/ssl/etcd/
    scp -r /opt/k8s/cfssl/pki/etcd/etcd-ca.pem root@192.168.2.177:/apps/k8s/ssl/etcd/
    # K8S 集群ca 证书
    scp -r /opt/k8s/cfssl/pki/k8s/k8s-ca* root@192.168.2.175:/apps/k8s/ssl/k8s
    scp -r /opt/k8s/cfssl/pki/k8s/k8s-ca* root@192.168.2.176:/apps/k8s/ssl/k8s
    scp -r /opt/k8s/cfssl/pki/k8s/k8s-ca* root@192.168.2.177:/apps/k8s/ssl/k8s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4 安装和配置 kubectl

    4.1 下载和分发 kubectl 二进制文件

    cd /opt/k8s/work wget https://dl.k8s.io/v1.23.3/kubernetes-client-linux-amd64.tar.gz # 自行解决翻墙下载问题 
    tar -xzvf kubernetes-client-linux-amd64.tar.gz
    
    • 1
    • 2

    分发到所有使用 kubectl 工具的节点:

    cd /opt/k8s/work 
    cp -pdr kubernetes/client/bin/kubectl /bin/ 
    root@Qist opt# which kubectl 
    /usr/bin/kubectl 
    root@Qist opt# /usr/bin/kubectl version 
    Client Version: version.Info{Major:"1", Minor:"23",GitVersion:"v1.23.3", 
    GitCommit:"816c97ab8cff8a1c72eccca1026f7820e93e0d25", GitTreeState:"clean", 
    BuildDate:"2022-01-25T21:25:17Z", GoVersion:"go1.17.6", Compiler:"gc", 
    Platform:"linux/amd64"}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4.2 创建 admin 证书和私钥

    kubectl 使用 https 协议与 kube-apiserver 进行安全通信,kube-apiserver 对 kubectl 请求包含的证书进行认证和授权。
    kubectl 后续用于集群管理,所以这里创建具有最高权限的 admin 证书。
    创建证书签名请求:

    cd /opt/k8s/work 
    cat > /opt/k8s/cfssl/k8s/k8s-apiserver-admin.json << EOF 
    { 
    "CN": "admin",
     "hosts": [""], 
     "key": { "algo": "rsa", 
     "size": 2048 
     },
     "names": [ 
     { "C": "CN", 
     "ST": "GuangDong", 
     "L": "GuangZhou", 
     "O": "system:masters",
      "OU": "Kubernetes-manual" 
      } 
      ] 
     }
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    O: system:masters :kube-apiserver 收到使用该证书的客户端请求后,为请求添加组(Group)认证标识 system:masters ;
    预定义的 ClusterRoleBinding cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予操作集群所需的最高权限;
    该证书只会被 kubectl 当做 client 证书使用,所以 hosts 字段为空;

    期待下次的分享,别忘了三连支持博主呀~
    我是 念舒_C.ying ,期待你的关注~💪💪💪

  • 相关阅读:
    软件测试分类
    “Awk”shell脚本三剑客
    jsp344小区物业管理与疫情防控系统ssm
    Win11如何更改默认下载路径?Win11更改默认下载路径的方法
    学习vue3踩坑分享( 1 )- 使用Element Plus <script lang=“ts“ setup> 加上lang=“ts“后编译错误
    web渗透测试----5、暴力破解漏洞--(1)SSH密码破解
    MyBatis学习:实现dao层接口,调用类的方法以执行SQL
    Codeforces Round 827 (Div. 4) D 1e5+双重for循环技巧
    Shell编程条件语句(if、case)
    Mysql的order by
  • 原文地址:https://blog.csdn.net/qq_52716296/article/details/126657607