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
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
- 全局配置文件生成
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
- 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
- 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
- CN:Common Name : kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name),浏览器使用该字段验证网站是否合法;
- O:Organization :kube-apiserver 从证书中提取该字段作为请求用户所属的组(Group);
- kube-apiserver 将提取的 User、Group 作为 RBAC 授权的用户标识;
注意:
- 不同证书 csr 文件的 CN、C、ST、L、O、OU 组合必须不同,否则可能出现 PEER’S CERTIFICATE HAS AN INVALID SIGNATURE 错误;
- 后续创建证书的 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
- 生成 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
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
- 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
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
分发到所有使用 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"}
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
O: system:masters :kube-apiserver 收到使用该证书的客户端请求后,为请求添加组(Group)认证标识 system:masters ;
预定义的 ClusterRoleBinding cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予操作集群所需的最高权限;
该证书只会被 kubectl 当做 client 证书使用,所以 hosts 字段为空;
期待下次的分享,别忘了三连支持博主呀~
我是 念舒_C.ying ,期待你的关注~💪💪💪
今天的文章kubernetes二进制安装部署_云原生应用的设计理念与挑战[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85230.html