zoukankan      html  css  js  c++  java
  • 【k8s部署】2. 创建CA根证书和秘钥

    如果没有特殊指明,所有操作均在 zhaoyixin-k8s-01 节点上执行。

    为确保安全,kubernetes 系统的各组件需要使用 x509 证书对通信进行加密和认证。

    CA (Certificate Authority) 是自签名的根证书,用来签名后续创建的其它证书。

    CA 证书是集群所有节点共享的,只需要创建一次,后续用它签名其它所有证书。

    安装 cfssl 工具集

    使用 CloudFlare 的 PKI 工具集 cfssl 创建所有证书。

    sudo mkdir -p /opt/k8s/cert && cd /opt/k8s/work
    
    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_amd64
    mv cfssljson_1.4.1_linux_amd64 /opt/k8s/bin/cfssljson
    
    wget https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssl-certinfo_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
    

    创建配置文件

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

    cd /opt/k8s/work
    
    cat > ca-config.json <<EOF
    {
      "signing": {
        "default": {
          "expiry": "87600h"
        },
        "profiles": {
          "kubernetes": {
            "usages": [
                "signing",
                "key encipherment",
                "server auth",
                "client auth"
            ],
            "expiry": "876000h"
          }
        }
      }
    }
    EOF
    
    • signing:表示该证书可用于签名其它证书(生成的ca.pem证书中CA=TRUE);
    • server auth:表示 client 可以用该证书对 server 提供的证书进行验证;
    • client auth:表示 server 可以用该证书对 client 提供的证书进行验证;
    • expiry:876000h:证书有效期设置为 100 年。

    创建证书签名请求文件

    cd /opt/k8s/work
    
    cat > ca-csr.json <<EOF
    {
      "CN": "kubernetes-ca",
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "BeiJing",
          "L": "BeiJing",
          "O": "k8s",
          "OU": "zhaoyixin"
        }
      ],
      "ca": {
        "expiry": "876000h"
     }
    }
    EOF
    
    • CN:Common Name。kube-apiserver 从证书中提取该字段作为请求的用户名(User Name),浏览器使用该字段验证网站是否合法;
    • O:Organization。kube-apiserver 中证书中提取该字段作为请求用户所属的组(Group);
    • kube-apiserver 将提取的 UserGroup 作为 RBAC 授权的用户标识。

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

    生成 CA 证书和私钥

    cd /opt/k8s/work
    cfssl gencert -initca ca-csr.json | cfssljson -bare ca
    ls ca*
    

    分发证书文件

    cd /opt/k8s/work
    source /opt/k8s/bin/environment.sh
    
    for node_ip in ${NODE_IPS[@]}
      do
        echo ">>> ${node_ip}"
        ssh root@${node_ip} "mkdir -p /etc/kubernetes/cert"
        scp ca*.pem ca-config.json root@${node_ip}:/etc/kubernetes/cert
      done
    

    参考

    opsnull/follow-me-install-kubernetes-cluster

  • 相关阅读:
    yum安装报错“rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 1e5e0159”
    EM64T和64位是不是一个概念啊?他们有什么区别啊,怎么区分啊?
    Can't load IA 32-bit .dll on a AMD 64-bit platform
    中间件——Oracle Fusion Middleware
    Does Windows have a limit of 2000 threads per process?
    java8 Lambda Stream操作list,map
    Mybatis优雅存取json字段的解决方案
    网站服务器架构部署方案发展
    springboot flowable Cause: org.xml.sax.SAXParseException; lineNumber: 25; columnNumber: 14; 元素类型为 "include" 的内容必须匹配 "EMPTY"
    java.lang.NoClassDefFoundError: javax/el/ELManager
  • 原文地址:https://www.cnblogs.com/zhaoyixin96/p/12850210.html
Copyright © 2011-2022 走看看