前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes(k8s)1.14 离线版集群 - 创建CA证书、秘钥和部署kubectl工具

Kubernetes(k8s)1.14 离线版集群 - 创建CA证书、秘钥和部署kubectl工具

作者头像
Mr.Vv
发布2020-06-11 16:22:47
7070
发布2020-06-11 16:22:47
举报

声明: 如果您有更好的技术与作者分享,或者商业合作; 请访问作者个人网站 http://www.esqabc.com/view/message.html 留言给作者。 如果该案例触犯您的专利,请在这里:http://www.esqabc.com/view/message.html 留言给作者说明原由 作者一经查实,马上删除

1、安装CA证书生成工具

前提提条件、服务器,请查看这个地址:https://blog.csdn.net/esqabc/article/details/102726771

a、创建证书文件夹

[root@k8s-01 ~]# mkdir -p /opt/k8s/cert && cd /opt/k8s

b、下载证书工具

[root@k8s-01 k8s]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 [root@k8s-01 k8s]# mv cfssl_linux-amd64 /opt/k8s/bin/cfssl [root@k8s-01 k8s]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 [root@k8s-01 k8s]# mv cfssljson_linux-amd64 /opt/k8s/bin/cfssljson [root@k8s-01 k8s]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 [root@k8s-01 k8s]# mv cfssl-certinfo_linux-amd64 /opt/k8s/bin/cfssl-certinfo

c、工具生效

[root@k8s-01 k8s]# chmod +x /opt/k8s/bin/* [root@k8s-01 k8s]# export PATH=/opt/k8s/bin:$PATH

2、创建CA证书和秘钥

a、创建配置文件

[root@k8s-01 ~]# cd /opt/k8s/work [root@k8s-01 work]# cat > ca-config.json <<EOF 添加下面内容

{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}
EOF

说明一下:

  • signing 表示该证书可用于签名其它证书,生成的ca.pem证书找中CA=TRUE
  • server auth 表示client可以用该证书对server提供的证书进行验证
  • client auth 表示server可以用该证书对client提供的证书进行验证

b、创建证书签名请求文件

[root@k8s-01 ~]# cd /opt/k8s/work [root@k8s-01 work]# cat > ca-csr.json <<EOF 添加下面内容

{
  "CN": "kubernetes",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "4Paradigm"
    }
  ],
  "ca": {
    "expiry": "876000h"
 }
}
EOF

说明一下:

  • CN CommonName,kube-apiserver从证书中提取该字段作为请求的用户名(User Name),浏览器使用该字段验证网站是否合法
  • O Organization,kube-apiserver 从证书中提取该字段作为请求用户和所属组(Group)
  • kube-apiserver将提取的User、Group作为RBAC授权的用户和标识

c、生成CA证书和私钥

[root@k8s-01 ~]# cd /opt/k8s/work [root@k8s-01 work]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca [root@k8s-01 work]# ls ca*

d、分发证书

[root@k8s-01 ~]# cd /opt/k8s/work [root@k8s-01 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

3、部署kubectl命令行工具

a、上传下载好的kubectl到:cd /opt/k8s/work,解压

[root@k8s-01 work]# tar -xzvf kubernetes-client-linux-amd64.tar.gz

b、分发所有使用kubectl节点

[root@k8s-01 ~]# cd /opt/k8s/work [root@k8s-01 work]# source /opt/k8s/bin/environment.sh

for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp kubernetes/client/bin/kubectl root@${node_ip}:/opt/k8s/bin/
    ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
  done

4、创建需要用到的证书

a、创建admin证书和私钥

[root@k8s-01 ~]# cd /opt/k8s/work [root@k8s-01 work]# cat > admin-csr.json <<EOF 添加下面内容

{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "system:masters",
      "OU": "4Paradigm"
    }
  ]
}
EOF

说明一下:

  • O 为system:masters,kube-apiserver收到该证书后将请求的Group设置为system:masters
  • 预定的ClusterRoleBinding cluster-admin将Group system:masters与Role cluster-admin绑定,该Role授予API的权限
  • 该证书只有被kubectl当做client证书使用,所以hosts字段为空

b、生成证书和私钥

[root@k8s-01 ~]# cd /opt/k8s/work

cfssl gencert -ca=/opt/k8s/work/ca.pem \
  -ca-key=/opt/k8s/work/ca-key.pem \
  -config=/opt/k8s/work/ca-config.json \
  -profile=kubernetes admin-csr.json | cfssljson -bare admin

[root@k8s-01 ~]# ls admin*

在这里插入图片描述
在这里插入图片描述

c、创建kubeconfig文件

[root@k8s-01 ~]# cd /opt/k8s/work [root@k8s-01 work]# source /opt/k8s/bin/environment.sh 设置集群参数

kubectl config set-cluster kubernetes \
  --certificate-authority=/opt/k8s/work/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=kubectl.kubeconfig

设置客户端认证参数

kubectl config set-credentials admin \
  --client-certificate=/opt/k8s/work/admin.pem \
  --client-key=/opt/k8s/work/admin-key.pem \
  --embed-certs=true \
  --kubeconfig=kubectl.kubeconfig

设置上下文参数

kubectl config set-context kubernetes \
  --cluster=kubernetes \
  --user=admin \
  --kubeconfig=kubectl.kubeconfig

设置默认上下文

kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig

说明一下:

  • certificate-authority 验证kube-apiserver证书的根证书
  • client-certificate、–client-key 刚生成的admin证书和私钥,连接kube-apiserver时使用
  • embed-certs=true 将ca.pem和admin.pem证书嵌入到生成的kubectl.kubeconfig文件中 (如果不加入,写入的是证书文件路径,后续拷贝kubeconfig到其它机器时,还需要单独拷贝证书)

d、分发kubeconfig文件

[root@k8s-01 ~]# cd /opt/k8s/work [root@k8s-01 work]# source /opt/k8s/bin/environment.sh

for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "mkdir -p ~/.kube"
    scp kubectl.kubeconfig root@${node_ip}:~/.kube/config
  done

也可以参考这篇文章:https://i4t.com/4253.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、安装CA证书生成工具
  • 2、创建CA证书和秘钥
  • 3、部署kubectl命令行工具
  • 4、创建需要用到的证书
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档