• apiServer的资源请求

客户端—>API server
API Request path路径格式
http://172.16.0.11:6443/apis/apps/v1/namespaces/kube-system/deployments/myapp-deploy
HTTP request verb: http动作
get,post,put,delete
API requests verb: 对应k8s的动作
get ,list,create,update,patch,watch,proxy,redirect,delete,deletecollection

  • 当希望通过本地curl方式获取API信息时,我们可以使用以下方式kubectl proxy方式实现

    1. [root@master ~]# curl https://127.0.0.1/api/v1/namespaces
    2. curl: (7) Failed connect to 127.0.0.1:443; Connection refused
    3. [root@master ~]# kubectl proxy --port=8080 &
    4. [1] 7760
    5. [root@master ~]# curl http://127.0.0.1:8080/api/v1/namespaces
    6. {
    7. "kind": "NamespaceList",
    8. "apiVersion": "v1",
    9. "metadata": {
    10. "resourceVersion": "323168"
    11. },
    12. .....

    1 认证

    1.1 k8s集群上的两种账户

    k8s集群上面的用户按照使用的对象分类可以分为两种:

  • 普通用户:即日常工程师登录k8s平台使用的账户,给人使用的

  • ServiceAccount:给pod等资源类型使用的,如pod要访问apiServer,此时的用户就叫serviceaccount,在k8s集群上也是一种资源类型

    1.2 ServiceAccount定义

    我们可以通过命令创建相应的sa账号,当我们使用命令创建好sa账号之后,同时也会自动创建好对应的token信息,即secret存储卷
    1. [root@master ~]# kubectl create sa sa-xsc
    2. serviceaccount/sa-xsc created
    3. [root@master ~]# kubectl describe sa sa-xsc
    4. Name: sa-xsc
    5. Namespace: default
    6. Labels: <none>
    7. Annotations: <none>
    8. Image pull secrets: <none>
    9. Mountable secrets: sa-xsc-token-g7p8g
    10. Tokens: sa-xsc-token-g7p8g
    11. Events: <none>
    12. 查看自动创建的secret
    13. [root@master ~]# kubectl get secret
    14. NAME TYPE DATA AGE
    15. default-token-wcbv6 kubernetes.io/service-account-token 3 60d
    16. mysql-root-password Opaque 1 7d
    17. nfs-client-provisioner-token-6vwzq kubernetes.io/service-account-token 3 58d
    18. sa-xsc-token-g7p8g kubernetes.io/service-account-token 3 8m32s

    1.3 pod使用自定义的sa账号

    1. 在创建pod时,我们可以使用ServiceAccount字段指定pod使用的账户,当该pod以该账户启动之后,该pod也就具有了该账户所具有的权限
    1. 使用自定义的sa账号
    2. [root@master ~]# cat sa-pod-demo.yaml
    3. apiVersion: apps/v1
    4. kind: Deployment
    5. metadata:
    6. labels:
    7. app: sa-demo
    8. name: sa-demo
    9. spec:
    10. replicas: 1
    11. selector:
    12. matchLabels:
    13. app: sa-demo
    14. strategy: {}
    15. template:
    16. metadata:
    17. labels:
    18. app: sa-demo
    19. spec:
    20. containers:
    21. - image: nginx
    22. name: nginx
    23. resources: {}
    24. serviceAccount: sa-xsc
    25. 查看pod使用的token信息
    26. [root@master ~]# kubectl describe pod sa-demo-d877998d-mr8lk
    27. Name: sa-demo-d877998d-mr8lk
    28. Namespace: default
    29. Priority: 0
    30. Node: node02/10.0.0.12
    31. Start Time: Fri, 25 Jun 2021 16:50:35 +0800
    32. Labels: app=sa-demo
    33. pod-template-hash=d877998d
    34. Annotations: cni.projectcalico.org/podIP: 10.244.140.124/32
    35. cni.projectcalico.org/podIPs: 10.244.140.124/32
    36. Status: Running
    37. IP: 10.244.140.124
    38. IPs:
    39. IP: 10.244.140.124
    40. Controlled By: ReplicaSet/sa-demo-d877998d
    41. Containers:
    42. nginx:
    43. Container ID: docker://499ea018a47990fc47c1eaf6efbf07caa1ead80dda826c5f84ed5f0c7e317ec7
    44. Image: nginx
    45. Image ID: docker-pullable://nginx@sha256:47ae43cdfc7064d28800bc42e79a429540c7c80168e8c8952778c0d5af1c09db
    46. Port: <none>
    47. Host Port: <none>
    48. State: Running
    49. Started: Fri, 25 Jun 2021 16:50:56 +0800
    50. Ready: True
    51. Restart Count: 0
    52. Environment: <none>
    53. Mounts:
    54. /var/run/secrets/kubernetes.io/serviceaccount from sa-xsc-token-g7p8g (ro)
    55. Conditions:
    56. Type Status
    57. Initialized True
    58. Ready True
    59. ContainersReady True
    60. PodScheduled True
    61. Volumes:
    62. sa-xsc-token-g7p8g:
    63. Type: Secret (a volume populated by a Secret)
    64. SecretName: sa-xsc-token-g7p8g
    65. Optional: false
    66. QoS Class: BestEffort
    67. Node-Selectors: <none>
    68. Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
    69. node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
    70. Events:
    71. Type Reason Age From Message
    72. ---- ------ ---- ---- -------
    73. Normal Scheduled 55s default-scheduler Successfully assigned default/sa-demo-d877998d-mr8lk to node02
    74. Normal Pulling 54s kubelet Pulling image "nginx"
    75. Normal Pulled 34s kubelet Successfully pulled image "nginx" in 19.693135511s
    76. Normal Created 34s kubelet Created container nginx
    77. Normal Started 34s kubelet Started container nginx

    2 kubeconfig

    ```yaml [root@master ~]# kubectl config view apiVersion: v1 clusters:
  • cluster: certificate-authority-data: DATA+OMITTED server: https://10.0.0.10:6443 name: kubernetes contexts:
  • context: cluster: kubernetes user: kubernetes-admin name: kubernetes-admin@kubernetes current-context: kubernetes-admin@kubernetes kind: Config preferences: {} users:
  • name: kubernetes-admin user: client-certificate-data: REDACTED client-key-data: REDACTED ```

    2.1 创建自签证书

    ```yaml [root@master pki]# (umask 077; openssl genrsa -out scxiang.key 2048) Generating RSA private key, 2048 bit long modulus ….+++ …………………………………………………+++ e is 65537 (0x10001) [root@master pki]# openssl req -new -key scxiang.key -out scxiang.csr -subj “/CN=scxiang” You have new mail in /var/spool/mail/root [root@master pki]# openssl x509 -req -in scxiang.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out scxiang.crt -days 3650 Signature ok subject=/CN=scxiang Getting CA Private Key [root@master pki]# openssl x509 -in scxiang.crt -text -noout Certificate: Data:
    1. Version: 1 (0x0)
    2. Serial Number:
    3. f4:69:d5:a5:6f:5a:d1:6f
    Signature Algorithm: sha256WithRSAEncryption
    1. Issuer: CN=kubernetes
    2. Validity
    3. Not Before: Jun 26 09:47:45 2021 GMT
    4. Not After : Jun 24 09:47:45 2031 GMT
    5. Subject: CN=scxiang
    6. Subject Public Key Info:
    7. Public Key Algorithm: rsaEncryption
    8. Public-Key: (2048 bit)
    9. Modulus:
    10. 00:bc:64:b7:c5:f5:c4:4c:53:b9:49:db:ab:17:37:
    11. 77:51:3e:42:a6:5f:7c:30:d4:12:14:26:24:af:c1:
    12. fb:1b:0e:4a:da:54:19:e8:11:db:f3:4a:93:35:69:
    13. b3:cf:4e:13:1f:a2:94:da:39:e6:60:9d:19:c2:b4:
    14. ea:1c:76:04:74:94:bc:99:78:ed:8d:e3:30:59:b5:
    15. 2e:70:3f:00:df:07:8f:43:81:fa:30:9f:4b:13:11:
    16. 9a:de:c5:9d:fb:2f:b8:46:93:e1:40:a7:ba:b2:15:
    17. 69:93:87:6b:79:16:44:22:e1:14:90:69:18:d0:10:
    18. 01:ae:46:47:68:58:08:21:5a:01:89:b3:81:c0:cd:
    19. f5:99:34:94:a5:60:0b:8c:30:5d:de:8a:4f:c0:69:
    20. 54:92:37:d3:2e:30:87:46:24:1f:1e:ec:78:1d:35:
    21. 1e:19:80:7f:f1:f9:c5:99:08:ac:a0:f1:ab:89:9f:
    22. ea:c6:e1:4d:35:6a:de:b0:72:f5:98:f9:73:f6:f3:
    23. 5b:49:d8:c4:65:13:89:66:a5:c0:90:74:04:7a:cc:
    24. 17:a5:a2:70:2d:46:ac:e7:88:10:e2:70:bc:f9:bf:
    25. 1d:94:a8:94:a1:bf:70:64:d7:e8:48:4c:fb:51:60:
    26. 59:aa:3a:e8:d2:1c:b1:48:7d:be:f3:68:87:d6:c9:
    27. cd:5f
    28. Exponent: 65537 (0x10001)
    Signature Algorithm: sha256WithRSAEncryption
    1. 82:30:96:46:f4:52:7e:9d:28:23:cb:53:f3:ff:d7:d5:62:e5:
    2. db:f0:cb:14:02:c9:e0:d9:fa:3c:e3:cb:b9:5a:53:da:9a:41:
    3. 2e:75:96:3d:e2:5f:1d:e9:ad:f9:0c:0d:71:4a:55:c8:cd:bd:
    4. 82:95:eb:8a:8d:24:f6:dd:d4:4a:26:3e:fe:99:43:78:9f:69:
    5. 30:ca:ed:5b:89:e0:9d:c4:bd:dc:72:0d:33:3f:7a:31:20:4a:
    6. 20:de:8f:74:46:ce:c5:44:6b:e5:ae:6c:e7:99:39:81:2b:8d:
    7. 08:5b:29:49:8f:28:e2:a3:d2:30:f2:53:3d:8b:3e:fb:37:b5:
    8. 1b:2b:cb:50:6d:d0:9f:7c:64:a4:da:11:e0:e2:77:64:8c:8c:
    9. 13:d2:54:0b:ea:16:d2:dc:ad:0e:65:bc:74:85:31:a0:0c:7f:
    10. 52:f4:bf:b5:f7:2e:69:80:76:18:99:aa:e5:e5:60:cb:ee:ab:
    11. 5c:f5:33:d0:8e:9c:ea:63:d2:6a:79:6a:94:3f:b8:d4:89:85:
    12. 71:3b:a3:08:5c:20:4c:a4:7e:41:bb:c7:97:68:d9:bf:15:cd:
    13. f7:b9:7c:63:4d:b5:26:e1:c8:db:ee:3d:d6:b2:8e:fe:0c:e2:
    14. 5e:8c:7b:0c:54:82:25:7c:a6:28:83:f5:e3:21:95:67:52:71:
    15. cb:b5:a8:e8
    [root@master pki]# kubectl get pods Error from server (Forbidden): pods is forbidden: User “scxiang” cannot list resource “pods” in API group “” in the namespace “default” 自定义kubeconfig配置文件 [root@master ~]# kubectl config set-cluster my-cluster —kubeconfig=/tmp/test.conf —server=”https://10.0.0.10:6443“ —certificate-authority=/etc/kubernetes/pki/ca.crt —embed-certs=true Cluster “my-cluster” set. [root@master ~]# kubectl config view —kubeconfig=/tmp/test.conf apiVersion: v1 clusters:
  • cluster: certificate-authority-data: DATA+OMITTED server: https://10.0.0.10:6443 name: my-cluster contexts: null current-context: “” kind: Config preferences: {} users: null ```

    2.2 添加账号到config文件

    ```yaml [root@master pki]# kubectl config set-credentials scxiang —client-key=scxiang.key —client-certificate=scxiang.crt —embed-certs=true User “scxiang” set. [root@master pki]# kubectl config view apiVersion: v1 clusters:
  • cluster: certificate-authority-data: DATA+OMITTED server: https://10.0.0.10:6443 name: kubernetes contexts:
  • context: cluster: kubernetes user: kubernetes-admin name: kubernetes-admin@kubernetes current-context: kubernetes-admin@kubernetes kind: Config preferences: {} users:
  • name: kubernetes-admin user: client-certificate-data: REDACTED client-key-data: REDACTED
  • name: scxiang user: client-certificate-data: REDACTED client-key-data: REDACTED ```

    2.3 设置set-context并切换至指定用户

    ```yaml [root@master pki]# kubectl config set-context scxiang@kubernetes —cluster=kubernetes —user=scxiang Context “scxiang@kubernetes” created. [root@master pki]# kubectl config view apiVersion: v1 clusters:
  • cluster: certificate-authority-data: DATA+OMITTED server: https://10.0.0.10:6443 name: kubernetes contexts:
  • context: cluster: kubernetes user: kubernetes-admin name: kubernetes-admin@kubernetes
  • context: cluster: kubernetes user: scxiang name: scxiang@kubernetes current-context: kubernetes-admin@kubernetes kind: Config preferences: {} users:
  • name: kubernetes-admin user: client-certificate-data: REDACTED client-key-data: REDACTED
  • name: scxiang user: client-certificate-data: REDACTED client-key-data: REDACTED 切换到指定账号账号
  1. <a name="vAGJO"></a>
  2. ## 2.4 切换账号
  3. ```yaml
  4. [root@master pki]# kubectl config use-context scxiang@kubernetes
  5. Switched to context "scxiang@kubernetes".

3 授权

格式Object URl:
/apis///namespaces//[/OBJECT_ID]/
image.png
授权插件:Node,ABAC ,RBAC ,Webhook
RBAC:Role based Access Controle
角色(Role)
许可(peimission)
role

  • operations
  • objects

rolebinding

  • user account OR service account
  • role

clusterole

3.1 基于名称空间内的角色创建与绑定

  1. 创建角色role
  2. [root@master role]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml >role-demo.yaml
  3. [root@master role]# cat role-demo.yaml
  4. apiVersion: rbac.authorization.k8s.io/v1
  5. kind: Role
  6. metadata:
  7. creationTimestamp: null
  8. name: pods-reader
  9. rules:
  10. - apiGroups:
  11. - ""
  12. resources:
  13. - pods
  14. verbs:
  15. - get
  16. - list
  17. - watch
  18. [root@master role]# kubectl apply -f role-demo.yaml
  19. role.rbac.authorization.k8s.io/pods-reader created
  20. 查看角色的描述
  21. [root@master role]# kubectl describe role pods-reader
  22. Name: pods-reader
  23. Labels: <none>
  24. Annotations: <none>
  25. PolicyRule:
  26. Resources Non-Resource URLs Resource Names Verbs
  27. --------- ----------------- -------------- -----
  28. pods [] [] [get list watch]
  29. 将角色与用户进行绑定
  30. [root@master ~]# kubectl create rolebinding scxiang-to-pods-reader --role=pods-reader --user=scxiang
  31. rolebinding.rbac.authorization.k8s.io/scxiang-to-pods-reader created
  32. [root@master ~]# kubectl describe rolebinding scxiang-to-pods-reader
  33. Name: scxiang-to-pods-reader
  34. Labels: <none>
  35. Annotations: <none>
  36. Role:
  37. Kind: Role
  38. Name: pods-reader
  39. Subjects:
  40. Kind Name Namespace
  41. ---- ---- ---------
  42. User scxiang
  43. 切换到scxiang账户
  44. [root@master ~]# kubectl config use-context scxiang@kubernetes
  45. Switched to context "scxiang@kubernetes".
  46. 基于scxiang账户查看默认名称空间的pods信息
  47. [root@master ~]# kubectl get pods
  48. NAME READY STATUS RESTARTS AGE
  49. sa-demo-d877998d-mr8lk 1/1 Running 0 27h
  50. web01-bbc5667-8h944 1/1 Running 0 28h
  51. web01-bbc5667-l2dvl 1/1 Running 0 28h
  52. web01-bbc5667-rk9ng 1/1 Running 0 28h
  53. scxiang账户无权限查看kube-system名称空间的信息
  54. [root@master ~]# kubectl get pods -n kube-system
  55. Error from server (Forbidden): pods is forbidden: User "scxiang" cannot list resource "pods" in API group "" in the namespace "kube-system"

3.2 创建集群角色并绑定

  1. [root@master ~]# kubectl create clusterrole cluster-reader --verb=get,list,watch --resource=pods -o yaml --dry-run >/root/role/clusterrole-demo.yaml
  2. apiVersion: rbac.authorization.k8s.io/v1
  3. kind: ClusterRole
  4. metadata:
  5. name: cluster-reader
  6. rules:
  7. - apiGroups:
  8. - ""
  9. resources:
  10. - pods
  11. verbs:
  12. - get
  13. - list
  14. - watch
  15. [root@master ~]# kubectl apply -f role/clusterrole-demo.yaml
  16. clusterrole.rbac.authorization.k8s.io/cluster-reader created
  17. [root@master ~]# kubectl describe clusterrole cluster-reader
  18. Name: cluster-reader
  19. Labels: <none>
  20. Annotations: <none>
  21. PolicyRule:
  22. Resources Non-Resource URLs Resource Names Verbs
  23. --------- ----------------- -------------- -----
  24. pods [] [] [get list watch]
  25. [root@master ~]# kubectl create clusterrolebinding scxiang-to-cluster-reader --clusterrole=cluster-reader --user=scxiang -o yaml --dry-run >/root/role/clusterrolebinding-demo.yaml
  26. [root@master ~]# kubectl apply -f /root/role/clusterrolebinding-demo.yaml
  27. clusterrolebinding.rbac.authorization.k8s.io/scxiang-to-cluster-reader created
  28. [root@master ~]# kubectl describe clusterrolebinding scxiang-to-cluster-reader
  29. Name: scxiang-to-cluster-reader
  30. Labels: <none>
  31. Annotations: <none>
  32. Role:
  33. Kind: ClusterRole
  34. Name: cluster-reader
  35. Subjects:
  36. Kind Name Namespace
  37. ---- ---- ---------
  38. User scxiang
  39. clusterrolebinding可以查看集群的所有名称空间的POD,但是无法做其它操作
  40. [root@master ~]# kubectl config use-context scxiang@kubernetes
  41. Switched to context "scxiang@kubernetes".
  42. [root@master ~]# kubectl get pod
  43. NAME READY STATUS RESTARTS AGE
  44. sa-demo-d877998d-mr8lk 1/1 Running 0 29h
  45. web01-bbc5667-8h944 1/1 Running 0 29h
  46. web01-bbc5667-l2dvl 1/1 Running 0 29h
  47. web01-bbc5667-rk9ng 1/1 Running 0 29h
  48. [root@master ~]# kubectl get pod -n kube-system
  49. NAME READY STATUS RESTARTS AGE
  50. calico-kube-controllers-97769f7c7-xf2f7 1/1 Running 5 58d
  51. calico-node-bw7sd 1/1 Running 14 62d
  52. calico-node-ndv7l 1/1 Running 14 62d
  53. calico-node-vbxsz 1/1 Running 14 62d
  54. coredns-7f89b7bc75-7lslf 1/1 Running 6 58d
  55. coredns-7f89b7bc75-msr7c 1/1 Running 6 58d
  56. etcd-master 1/1 Running 6 62d
  57. kube-apiserver-master 1/1 Running 7 58d
  58. kube-controller-manager-master 0/1 CreateContainerError 11 29h
  59. kube-proxy-jpqkp 1/1 Running 5 58d
  60. kube-proxy-nrtxj 1/1 Running 5 58d
  61. kube-proxy-pnbdz 1/1 Running 6 58d
  62. kube-scheduler-master 0/1 CreateContainerError 11 29h
  63. metrics-server-84f9866fdf-wh47t 1/1 Running 5 58d
  64. [root@master ~]# kubectl get deploy
  65. Error from server (Forbidden): deployments.apps is forbidden: User "scxiang" cannot list resource "deployments" in API group "apps" in the namespace "default"

4 Dashboard的部署与认证、分级授权

4.1 部署

上github可以查看其部署方式:
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
修改svc的类型为NodePort

  1. [root@master ~]# kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system
  2. service/kubernetes-dashboard patched
  3. [root@master-01 ~]# kubectl get svc -n kubernetes-dashboard
  4. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  5. dashboard-metrics-scraper ClusterIP 10.111.129.21 <none> 8000/TCP 5h22m
  6. kubernetes-dashboard NodePort 10.111.186.10 <none> 443:31477/TCP 5h22m

可以看到如下登录界面
image.png

4.2 Token方式登录

创建一个sa账户,并绑定集群角色

  1. [root@master ~]# kubectl create serviceaccount dashboard-admin -n kube-system
  2. [root@master ~]# kubectl get sa -n kube-system | grep dashboard-admin
  3. dashboard-admin 1 30m
  4. [root@master ~]# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
  5. [root@master ~]# kubectl get clusterrolebinding -n -kube-system | grep dashboard-cluster-admin
  6. dashboard-cluster-admin ClusterRole/cluster-admin 27m
  7. 查看其token
  8. [root@master ~]# kubectl get secret -n kube-system | grep dashboard-admin
  9. dashboard-admin-token-nhp2t kubernetes.io/service-account-token 3 32m
  10. [root@master ~]# kubectl describe secret dashboard-admin-token-nhp2t -n kube-system
  11. Name: dashboard-admin-token-nhp2t
  12. Namespace: kube-system
  13. Labels: <none>
  14. Annotations: kubernetes.io/service-account.name: dashboard-admin
  15. kubernetes.io/service-account.uid: f9fe0cef-4717-49a8-a203-17198a8f38d9
  16. Type: kubernetes.io/service-account-token
  17. Data
  18. ====
  19. ca.crt: 1066 bytes
  20. namespace: 11 bytes
  21. token: eyJhbGciOiJSUzI1NiIsImtpZCI6InItd0k3Vk10SXVKTHRiQms2TVlYUFZNV0s4WGVZRnBVMXF1Z2VBWFNvQU0ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tbmhwMnQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZjlmZTBjZWYtNDcxNy00OWE4LWEyMDMtMTcxOThhOGYzOGQ5Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.WnwviGbRPKCbj0xTrFrE0psy3sPpy72jW0GIrYNQMVp6MwYPLST-rxrKqA4GQfYt7BsK-Nu_TVHANPJYo9MsKEuhm_P57aIDpiGJB-n7fv0BzjJFS0_pHi6HMoGco4qGbsqCBM6zMQ-v521yc0X26GPNl3HT6wRX10VD-EODpyvAiJd5d5j7WGboI22S1_CB4cDQgNHUdtrfQ4wQ7Sr_aWX-E9Id7S0fNeaFRRVzo28wadZ8wuHsCIErMUYSSj1TOelVSWHNUhRPipT6MaNdx8RwS3GZ0VHWz3oTFNWSyU8vVgeR-hN7EjOZsmL9hXtuHCipFTCTPbF6P3nJYNK4Rg

通过上面的token就可以直接访问了
image.png

4.3 kubeconfig认证方式登录

  1. [root@master-01 ~]# kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --server="https://10.0.0.10:6443" --embed-certs=true --kubeconfig=/root/dashboard-admin.conf
  2. Cluster "kubernetes" set.
  3. [root@master-01 ~]# kubectl config view --kubeconfig=/root/dashboard-admin.conf
  4. apiVersion: v1
  5. clusters:
  6. - cluster:
  7. certificate-authority-data: DATA+OMITTED
  8. server: https://10.0.0.10:6443
  9. name: kubernetes
  10. contexts: null
  11. current-context: ""
  12. kind: Config
  13. preferences: {}
  14. users: null
  15. 添加用户
  16. [root@master-01 ~]# dashboard_admin_token=`kubectl get secret dashboard-admin-token-hlxj4 -o jsonpath={.data.token} | base64 -d`
  17. [root@master-01 ~]# kubectl config set-credentials dashboard-admin --token=$dashboard_admin_token --kubeconfig=/root/dashboard-admin.conf
  18. User "cluster-dashboard-admin" set.
  19. [root@master-01 ~]# kubectl config view --kubeconfig=/root/dashboard-admin.conf
  20. apiVersion: v1
  21. clusters:
  22. - cluster:
  23. certificate-authority-data: DATA+OMITTED
  24. server: https://10.0.0.10:6443
  25. name: kubernetes
  26. contexts: null
  27. current-context: ""
  28. kind: Config
  29. preferences: {}
  30. users:
  31. - name: dashboard-admin
  32. user:
  33. token: REDACTED
  34. [root@master-01 ~]# kubectl config set-context dashboard-admin@kubernetes --cluster=kubernetes --user=dashboard-admin --kubeconfig=/root/dashboard-admin.conf
  35. Context "dashboard-admin@kubernetes" created.
  36. [root@master-01 ~]# kubectl config view --kubeconfig=/root/dashboard-admin.conf
  37. apiVersion: v1
  38. clusters:
  39. - cluster:
  40. certificate-authority-data: DATA+OMITTED
  41. server: https://10.0.0.10:6443
  42. name: kubernetes
  43. contexts:
  44. - context:
  45. cluster: kubernetes
  46. user: dashboard-admin
  47. name: dashboard-admin@kubernetes
  48. current-context: ""
  49. kind: Config
  50. preferences: {}
  51. users:
  52. - name: dashboard-admin
  53. user:
  54. token: REDACTED
  55. [root@master-01 ~]# kubectl config use-context dashboard-admin@kubernetes --kubeconfig=/root/dashboard-admin.conf
  56. [root@master-01 ~]# kubectl config view --kubeconfig=/root/dashboard-admin.conf
  57. apiVersion: v1
  58. clusters:
  59. - cluster:
  60. certificate-authority-data: DATA+OMITTED
  61. server: https://10.0.0.10:6443
  62. name: kubernetes
  63. contexts:
  64. - context:
  65. cluster: kubernetes
  66. user: dashboard-admin
  67. name: dashboard-admin@kubernetes
  68. current-context: dashboard-admin@kubernetes
  69. kind: Config
  70. preferences: {}
  71. users:
  72. - name: dashboard-admin
  73. user:
  74. token: REDACTED

kubeconfig方式登录
image.png