+
+ +
+
+ +
+ +

使用 kubeconfig 或 token 进行用户身份认证

+

在开启了 TLS 的集群中,每当与集群交互的时候少不了的是身份认证,kubernetes 同时支持 kubeconfig(即证书) 和 token 两种认证方式。

+

下文分两块以示例的方式来讲解两种登陆认证方式:

+
    +
  • 为 brand 命名空间下的 brand 用户创建 kubeconfig 文件
  • +
  • 为集群的管理员(拥有所有命名空间的 amdin 权限)创建 token
  • +
+

使用 kubeconfig

+

如何生成kubeconfig文件请参考创建用户认证授权的kubeconfig文件

+
+

注意我们生成的 kubeconfig 文件中没有 token 字段,需要手动添加该字段。

+
+

比如我们为 brand namespace 下的 brand 用户生成了名为 brand.kubeconfig 的 kubeconfig 文件,还要再该文件中追加一行 token 的配置(如何生成 token 将在下文介绍),如下所示:

+
kubeconfig文件
图片 - kubeconfig文件
+

对于访问 dashboard 时候的使用 kubeconfig 文件如brand.kubeconfig 必须追到 token 字段,否则认证不会通过。而使用 kubectl 命令时的用的 kubeconfig 文件则不需要包含 token 字段。

+

生成 token

+

需要创建一个admin用户并授予admin角色绑定,使用下面的yaml文件创建admin用户并赋予他管理员权限,然后可以通过token访问kubernetes,该文件见admin-role.yaml

+
kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+  name: admin
+  annotations:
+    rbac.authorization.kubernetes.io/autoupdate: "true"
+roleRef:
+  kind: ClusterRole
+  name: cluster-admin
+  apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+  name: admin
+  namespace: kube-system
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: admin
+  namespace: kube-system
+  labels:
+    kubernetes.io/cluster-service: "true"
+    addonmanager.kubernetes.io/mode: Reconcile
+
+

然后执行下面的命令创建 serviceaccount 和角色绑定,对于其他命名空间的其他用户只要修改上述 yaml 中的 namenamespace 字段即可:

+
kubectl create -f admin-role.yaml
+
+

创建完成后获取secret和token的值。

+
# 获取admin-token的secret名字
+$ kubectl -n kube-system get secret|grep admin-token
+admin-token-nwphb                          kubernetes.io/service-account-token   3         6m
+# 获取token的值
+$ kubectl -n kube-system describe secret admin-token-nwphb
+Name:        admin-token-nwphb
+Namespace:    kube-system
+Labels:        <none>
+Annotations:    kubernetes.io/service-account.name=admin
+        kubernetes.io/service-account.uid=f37bd044-bfb3-11e7-87c0-f4e9d49f8ed0
+
+Type:    kubernetes.io/service-account-token
+
+Data
+====
+namespace:    11 bytes
+token:        非常长的字符串
+ca.crt:        1310 bytes
+
+

也可以使用 jsonpath 的方式直接获取 token 的值,如:

+
kubectl -n kube-system get secret admin-token-nwphb -o jsonpath={.data.token}
+
+

关于 JSONPath 的使用请参考 JSONPath 手册

+
Copyright © jimmysong.io 2017 all right reserved,powered by GitbookUpdated: +2017-11-10 23:20:03 +
+ +
+ +
+
+
+ +

results matching ""

+
    + +
    +
    + +

    No results matching ""

    + +
    +
    +
    + +
    +