From a7d4c4e8d63814a2c300055c410989106d238ff8 Mon Sep 17 00:00:00 2001 From: jmgao Date: Fri, 1 Dec 2017 10:38:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B003-=E9=85=8D=E7=BD=AEkubectl?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E8=A1=8C=E5=B7=A5=E5=85=B7.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- docs/03-配置kubectl命令行工具.md | 98 +++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 32ca086..1e42130 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ ## 补充阅读 -1. 建议阅读 [feisky.gitbooks](https://feisky.gitbooks.io/kubernetes/) 原理和部署章节。 -1. 建议阅读 [opsnull教程](https://github.com/opsnull/follow-me-install-kubernetes-cluster) 二进制手工部署。 +1. 建议阅读 [feisky-Kubernetes指南](https://github.com/feiskyer/kubernetes-handbook/blob/master/SUMMARY.md) 原理和部署章节。 +1. 建议阅读 [opsnull-安装教程](https://github.com/opsnull/follow-me-install-kubernetes-cluster) 二进制手工部署。 ## 版权 diff --git a/docs/03-配置kubectl命令行工具.md b/docs/03-配置kubectl命令行工具.md index 3de1c99..08665c4 100644 --- a/docs/03-配置kubectl命令行工具.md +++ b/docs/03-配置kubectl命令行工具.md @@ -1 +1,99 @@ ## 03-配置kubectl命令行工具.md + +kubectl使用~/.kube/config 配置文件与kube-apiserver进行交互,且拥有完全权限[可配置],因此尽量避免安装在不必要的节点上,这里为了演示方便,将它安装在master/node/deploy节点。 +`cat ~/.kube/config`可以看到配置文件包含 kube-apiserver 地址、证书、用户名等信息。 + +``` bash +roles/kubectl +├── tasks +│   └── main.yml +└── templates + └── admin-csr.json.j2 +``` +请在另外窗口打开[roles/kubectl/tasks/main.yml](../roles/kubectl/tasks/main.yml) 文件,对照看以下讲解内容。 + +### 准备kubectl使用的admin 证书签名请求 [admin-csr.json.j2](../roles/kubectl/templates/admin-csr.json.j2) + +``` bash +{ + "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官方文档](https://kubernetes.io/docs/admin/authorization/rbac/) ++ 证书请求中 `O` 指定该证书的 Group 为 `system:masters`,而 `RBAC` 预定义的 `ClusterRoleBinding` 将 Group `system:masters` 与 ClusterRole `cluster-admin` 绑定,这就赋予了kubectl**所有集群权限** + +kubectl get clusterrolebinding cluster-admin -o yaml + +``` bash +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 +``` +### 创建admin 证书和私钥 + +### 创建 kubectl kubeconfig 文件 + +#### 设置集群参数,指定CA证书和apiserver地址 + +``` bash +{{ bin_dir }}/kubectl config set-cluster kubernetes \ + --certificate-authority={{ ca_dir }}/ca.pem \ + --embed-certs=true \ + --server={{ KUBE_APISERVER }} +``` + +#### 设置客户端认证参数,指定使用admin证书和私钥 + +``` bash +{{ bin_dir }}/kubectl config set-credentials admin \ + --client-certificate={{ ca_dir }}/admin.pem \ + --embed-certs=true \ + --client-key={{ ca_dir }}/admin-key.pem +``` + +#### 设置上下文参数,说明使用cluster集群和用户admin + +``` bash +{{ bin_dir }}/kubectl config set-context kubernetes \ + --cluster=kubernetes --user=admin +``` + +#### 选择默认上下文 + +``` bash +{{ bin_dir }}/kubectl config use-context kubernetes +``` ++ 注意{{ }}中参数与ansible hosts文件中设置对应 ++ 以上生成的 kubeconfig 自动保存到 ~/.kube/config 文件