kubectl使用~/.kube/config 配置文件与kube-apiserver进行交互,且拥有完全权限[可配置],因此尽量避免安装在不必要的节点上,这里为了演示方便,将它安装在master/node/deploy节点。
cat ~/.kube/config
可以看到配置文件包含 kube-apiserver 地址、证书、用户名等信息。
roles/kubectl
├── tasks
│ └── main.yml
└── templates
└── admin-csr.json.j2
请在另外窗口打开roles/kubectl/tasks/main.yml 文件,对照看以下讲解内容。
准备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"
}
]
}
- 后续我们在安装
master
节点时候会启用RBAC
特性,它在v1.8.x中已是稳定版本,推荐RBAC官方文档 - 证书请求中
O
指定该证书的 Group 为system:masters
,而RBAC
预定义的ClusterRoleBinding
将 Groupsystem:masters
与 ClusterRolecluster-admin
绑定,这就赋予了kubectl所有集群权限
kubectl get clusterrolebinding cluster-admin -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
creationTimestamp: 2017-11-30T01:33:10Z
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: cluster-admin
resourceVersion: "76"
selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/cluster-admin
uid: 6c9dd451-d56e-11e7-8ed6-525400103a5d
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:masters
cd {{ ca_dir }} && {{ bin_dir }}/cfssl gencert \
-ca={{ ca_dir }}/ca.pem \
-ca-key={{ ca_dir }}/ca-key.pem \
-config={{ ca_dir }}/ca-config.json \
-profile=kubernetes admin-csr.json | {{ bin_dir }}/cfssljson -bare admin
{{ bin_dir }}/kubectl config set-cluster kubernetes \
--certificate-authority={{ ca_dir }}/ca.pem \
--embed-certs=true \
--server={{ KUBE_APISERVER }}
{{ bin_dir }}/kubectl config set-credentials admin \
--client-certificate={{ ca_dir }}/admin.pem \
--embed-certs=true \
--client-key={{ ca_dir }}/admin-key.pem
{{ bin_dir }}/kubectl config set-context kubernetes \
--cluster=kubernetes --user=admin
{{ bin_dir }}/kubectl config use-context kubernetes
- 注意{{ }}中参数与ansible hosts文件中设置对应
- 以上生成的 kubeconfig 自动保存到 ~/.kube/config 文件