同步操作将从 gjmzj/kubeasz 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
本步骤主要完成:
主要任务讲解:roles/deploy/tasks/main.yml
kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,使用 CloudFlare 的 PKI 工具集生成自签名的 CA 证书,用来签名后续创建的其它 TLS 证书。参考阅读
根据认证对象可以将证书分成三类:服务器证书server cert
,客户端证书client cert
,对等证书peer cert
(既是server cert
又是client cert
),在kubernetes 集群中需要的证书种类如下:
etcd
节点需要标识自己服务的server cert
,也需要client cert
与etcd
集群其他节点交互,当然可以分别指定2个证书,为方便这里使用一个对等证书master
节点需要标识 apiserver服务的server cert
,也需要client cert
连接etcd
集群,这里也使用一个对等证书kubectl
calico
kube-proxy
只需要client cert
,因此证书请求中 hosts
字段可以为空kubelet
需要标识自己服务的server cert
,也需要client cert
请求apiserver
,也使用一个对等证书整个集群要使用统一的CA 证书,只需要在ansible控制端创建,然后分发给其他节点;为了保证安装的幂等性,如果已经存在CA 证书,就跳过创建CA 步骤
{
"signing": {
"default": {
"expiry": "{{ CERT_EXPIRY }}"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "{{ CERT_EXPIRY }}"
},
"kcfg": {
"usages": [
"signing",
"key encipherment",
"client auth"
],
"expiry": "{{ CUSTOM_EXPIRY }}"
}
}
}
}
signing
:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE
;server auth
:表示可以用该 CA 对 server 提供的证书进行验证;client auth
:表示可以用该 CA 对 client 提供的证书进行验证;profile kubernetes
包含了server auth
和client auth
,所以可以签发三种不同类型证书;expiry 证书有效期,默认50年profile kcfg
在后面客户端kubeconfig证书管理中用到{
"CN": "kubernetes-ca",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "HangZhou",
"L": "XS",
"O": "k8s",
"OU": "System"
}
],
"ca": {
"expiry": "876000h"
}
}
ca expiry
指定ca证书的有效期,默认100年cfssl gencert -initca ca-csr.json | cfssljson -bare ca
kubectl使用~/.kube/config 配置文件与kube-apiserver进行交互,且拥有管理 K8S集群的完全权限,
准备kubectl使用的admin 证书签名请求 admin-csr.json.j2
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "HangZhou",
"L": "XS",
"O": "system:masters",
"OU": "System"
}
]
}
O
指定该证书的 Group 为 system:masters
,而 RBAC
预定义的 ClusterRoleBinding
将 Group system:masters
与 ClusterRole cluster-admin
绑定,这就赋予了kubectl所有集群权限
$ kubectl describe clusterrolebinding cluster-admin
Name: cluster-admin
Labels: kubernetes.io/bootstrapping=rbac-defaults
Annotations: rbac.authorization.kubernetes.io/autoupdate=true
Role:
Kind: ClusterRole
Name: cluster-admin
Subjects:
Kind Name Namespace
---- ---- ---------
Group system:masters
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
使用kubectl config
生成kubeconfig 自动保存到 ~/.kube/config,生成后 cat ~/.kube/config
可以验证配置文件包含 kube-apiserver 地址、证书、用户名等信息。
kubectl config set-cluster kubernetes --certificate-authority=ca.pem --embed-certs=true --server=127.0.0.1:8443
kubectl config set-credentials admin --client-certificate=admin.pem --embed-certs=true --client-key=admin-key.pem
kubectl config set-context kubernetes --cluster=kubernetes --user=admin
kubectl config use-context kubernetes
创建 kube-proxy 证书请求
{
"CN": "system:kube-proxy",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "HangZhou",
"L": "XS",
"O": "k8s",
"OU": "System"
}
]
}
$ kubectl describe clusterrolebinding system:node-proxier
Name: system:node-proxier
Labels: kubernetes.io/bootstrapping=rbac-defaults
Annotations: rbac.authorization.kubernetes.io/autoupdate=true
Role:
Kind: ClusterRole
Name: system:node-proxier
Subjects:
Kind Name Namespace
---- ---- ---------
User system:kube-proxy
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
使用kubectl config
生成kubeconfig 自动保存到 kube-proxy.kubeconfig
kubectl config set-cluster kubernetes --certificate-authority=ca.pem --embed-certs=true --server=127.0.0.1:8443 --kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials kube-proxy --client-certificate=kube-proxy.pem --embed-certs=true --client-key=kube-proxy-key.pem --kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default --cluster=kubernetes --user=kube-proxy --kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
过程与创建kube-proxy.kubeconfig 类似,略。
请在另外窗口打开roles/prepare/tasks/main.yml 文件,比较简单直观
easzlab.io.local
的域名解析此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。