中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

K8S的用戶管理(li)

1 K8S賬戶體系介紹

在k8s中,有兩類用戶,和,我(wo)們可以通過創建(jian)或,再將賬戶和role或clusterrole進行綁定來(lai)給賬號賦(fu)予權限,實現權限控制,兩類賬戶的作用如下。

  • server account:k8s的進程、pod申請授權時使用的賬戶。類似于nginx服務會有一個nginx用戶。
  • user:k8s的管理人員使用的賬戶,也就是我們使用的賬戶。

2 service account

2.1 介紹

Kubernetes中(zhong)所(suo)有的訪問(wen),無論外(wai)部內部,都(dou)會(hui)通過(guo)處理,訪問(wen)Kubernetes資源前需要經(jing)過(guo)認證與授權。

  • 在k8s中,service account(簡稱sa)是給集群中的進程使用的,當集群中的pod或進程需要跟apiserver申請調用資源時會使用到sa。

2.2 為什么需要sa

主要是為了權限控(kong)制,不(bu)同(tong)的(de)sa賬戶對應不(bu)同(tong)的(de)權限,如增刪(shan)查等。

2.3 如何創建sa

  • 創建一個sa
[root@k8s-master01 ~]# kubectl create serviceaccount sa-example ##創建一個sa名為sa-example
serviceaccount/sa-example created
[root@k8s-master01 ~]#
[root@k8s-master01 ~]# kubectl describe sa sa-example
Name:                sa-example
Namespace:           default
Labels:              <none>
Annotations:         <none>
Image pull s:  <none>
Mountable secrets:   <none>
Tokens:              <none>
Events:              <none>
  • 給sa創建secret,v1.25版本后創建sa后不再自動創建secret,因此需要手動創建。secret中會包含一些認證信息,包括等。
[root@k8s-master01 ~]# cat sa-example-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: secret-sa-example
  annotations:
    kubernetes.io/service-account.name: "sa-example"   # 這里填寫serviceAccountName
type: kubernetes.io/service-account-token
[root@k8s-master01 ~]# kubectl create -f sa-example-secret.yaml
secret/secret-sa-example created
[root@k8s-master01 ~]# kubectl describe sa sa-example ##檢查可以發現sa的token處已經關聯上了剛創建的secret
Name:                sa-example
Namespace:           default
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   <none>
Tokens:              secret-sa-example
Events:              <none>
[root@k8s-master01 ~]# kubectl describe secret secret-sa-example  ##查看secret的詳情
Name:         secret-sa-example
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: sa-example
              kubernetes.io/service-account.uid: a4b9c0ea-2362-4bb3-abc7-10dc0fb795fc

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1099 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IkhwYldkODNuZmNMczYzNlRiRmpQQndMTFJYSWZZODZQSFIxUFI0WW1fYWMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InNlY3JldC1zYS1leGFtcGxlIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6InNhLWV4YW1wbGUiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhNGI5YzBlYS0yMzYyLTRiYjMtYWJjNy0xMGRjMGZiNzk1ZmMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpzYS1leGFtcGxlIn0.OjGSORdrRchb-dOk56bIx9s2KfedIrcBHhWi4N7g1v2zDgbumF8DoIVUbDdSB3IXtSnrWu6ccF-NEXDkxTtsU3rRZCn4qLpYqxtmK-We0-JDqfPd6brSqv8SMOFpUhbTxOcCjsICLvGY0dE8iTNjRLjmlTlNENGJui3pYweLCV1Qe0Ry4hZs0BFaMVZn6dSjjNnPTTfaSNRk-4jcqqoOxC0qxVrpQb-LjLvBy9fi2omBZQnb4e98aGo8SN4U5tWNOr_QEfYO9h8B9w-Ub5eI2uZ9jan07ezjD9wathT4BP471m-8NFsFDO8PcRpvxDtNjl4XzMoQmjZA1wM0rseDrg

24.4 如何使用sa

Pod中使用ServiceAccount非(fei)常(chang)方便,只需要指定(ding)ServiceAccount的名稱(cheng)即可。

[root@k8s-master01 ~]# cat nginx-alpine.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-test-pod  ##pod名
spec:
  serviceAccountName: sa-example  ##sa名
  containers:
  - image: nginx:alpine
    name: container-0
    resources:
      limits:
        cpu: 100m
        memory: 200Mi
      requests:
        cpu: 100m
        memory: 200Mi
  imagePullSecrets:
  - name: default-secret  ##下載鏡像使用到的secret名
[root@k8s-master01 ~]# kubectl create -f nginx-alpine.yaml
pod/nginx-test-pod created
[root@k8s-master01 ~]# kubectl get pod
NAME             READY   STATUS    RESTARTS   AGE
nginx-test-pod   1/1     Running   0          2m13s
[root@k8s-master01 ~]# kubectl describe pod nginx-test-pod|grep -i account
Service Account:  sa-example
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mb8cd (ro)
[root@k8s-master01 ~]# kubectl exec -it nginx-test-pod -- /bin/sh  ##進入pod,可以看到對應的secret文件,ca證書和token
/ # ls /var/run/secrets/kubernetes.io/serviceaccount
ca.crt     namespace  token

創建好sa我(wo)們可以再綁定(ding)role或(huo)clusterrole來賦予更精細(xi)化的權(quan)限。

3 user account

3.1 介紹

前(qian)面(mian)說的(de)(de)service account在(zai)k8s集群中是(shi)給pod使用的(de)(de),這(zhe)里(li)介紹(shao)的(de)(de)User Account,是(shi)給我們自(zi)己(ji),也就是(shi)給人用的(de)(de)。

3.2 為什么需要user account

  • 在k8s集群中跟linux操作系統是一樣的,我們默認的賬戶是:kubernetes-admin@kubernetes,管理員賬戶,權限也是最大的,在k8s集群中暢通無阻。

但(dan)(dan)是(shi)在企業中,并不是(shi)只有我們一(yi)個人使(shi)(shi)用k8s集群(qun),還有很多的(de)研發(fa)人員都是(shi)需(xu)要(yao)(yao)使(shi)(shi)用集群(qun)的(de);這(zhe)時我們需(xu)要(yao)(yao)給(gei)他們創建一(yi)些賬(zhang)號,但(dan)(dan)是(shi)這(zhe)些賬(zhang)號權限(xian)又不能太大,以防(fang)誤(wu)刪資(zi)源,這(zhe)個時候我們就能使(shi)(shi)用user account了。

3.3 如何創建一個user account

步驟如下

  • 創建用戶所需的證書文件和密鑰
  • 創建用戶
  • 創建角色
  • 將角色和用戶進行綁定

3.3.1 為用戶生成證書

前面介紹(shao)的sa賬戶(hu),secret創(chuang)建時(shi)會創(chuang)建好證書(shu),對(dui)于用戶(hu)的話(hua)我們需要自己創(chuang)建證書(shu)。

[root@k8s-master01 ~]# openssl genrsa -out singless.key 2048  ##給用戶創建一個私鑰
[root@k8s-master01 ~]# openssl req -new -key singless.key -out singless.csr -subj "/CN=singless/O=devops" ##用此私鑰創建一個csr(證書簽名請求)文件,其中我們需要在subject里帶上用戶信息(CN為用戶名,O為用戶組),其中/O參數可以出現多次,即可以有多個用戶組:
[root@k8s-master01 ~]# openssl x509 -req -in singless.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out singless.crt -days 365 ##找到K8S集群(API Server)的CA證書文件,其位置取決于安裝集群的方式,通常會在/etc/kubernetes/pki/路徑下,會有兩個文件,一個是CA證書(ca.crt),一個是CA私鑰(ca.key)。通過集群的CA證書和之前創建的csr文件,來為用戶頒發證書。-CA和-CAkey參數需要指定集群CA證書所在位置,-days參數指定此證書的過期時間,這里為365天。最后將證書(tom.crt)和私鑰(tom.key)保存起來,這兩個文件將被用來驗證API請求。

 

 

 

3.3.2 創建用戶

現在(zai)我(wo)們想要(yao)通過kubectl以singless的身份來(lai)操作集群,需(xu)要(yao)將singless的認證(zheng)信息添(tian)加進(jin)kubectl的配(pei)置,即~/.kube/config中,通過以下命令將用(yong)戶(hu)singless的驗證(zheng)信息添(tian)加進(jin)kubectl的配(pei)置:

[root@k8s-master01 ~]# kubectl config set-credentials singless --client-certificate=singless.crt --client-key=singless.key
User "singless" set.
[root@k8s-master01 ~]# cat ~/.kube/config |tail -4  ##添加完成后在~/.kube/config可以看到新增了
- name: singless
  user:
    client-certificate: /root/singless.crt
    client-key: /root/singless.key
[root@k8s-master01 ~]# kubectl config set-context singless --cluster=kubernetes --namespace=* --user=singless  ##創建context,通過context來綁定用戶,來實現精細話的權限控制。context可以理解為登錄用戶時所需的環境變量。刪除使用kubectl config delete-context命令
[root@k8s-master01 ~]# kubectl config get-contexts  ##查詢當前環境的context
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin
          singless                      kubernetes   singless           *

3.3.3 創建角色

角(jiao)色主要(yao)分為(wei)兩種:role和clusterrole,角(jiao)色(role)是比較(jiao)有(you)限制性的,只針對于(yu)指定(ding)的資源生(sheng)效。而集群角(jiao)色(clusterrole)就權限就比較(jiao)廣泛(fan)了,新建了一(yi)個集群角(jiao)色之后,這個角(jiao)色將(jiang)對整(zheng)個集群受影響。

創建角色有兩種方法

  • 通過命令行進行創建
[root@k8s-master01 ~]# kubectl create role myrole  --verb=get,list,watch --resource=pod,svc 創建了一個名叫myrole的角色,并且賦予它對pod、service有看的權限
role.rbac.authorization.k8s.io/myrole created
  • 通過yaml文件進行創建
[root@k8s-master01 ~]# cat myrole2.yaml
apiVersion: rbac.authorization.k8s.io/v1
#api版本,使用kubectl explain +【要查詢的資源,比如pod】
kind: Role
metadata:
  name: myrole2
rules:          #規則
- apiGroups: [""]  # 空字符串""表明使用支持所有的api版本,一般都放空
  resources: ["pods"]           #resources:資源,現在這些權限對哪些資源生效,這里寫的是pod,如果想要多寫幾個,就用逗號隔開,其實就是一個列表
  verbs: ["get", "watch", "list"]       #詳細的權限:這三個都是查看的權限。如果需要所有權限,直接填寫一個*號即可
[root@k8s-master01 ~]# kubectl create -f myrole2.yaml
role.rbac.authorization.k8s.io/myrole2 created

查看創建的角色

[root@k8s-master01 ~]# kubectl get role
NAME      CREATED AT
myrole    2023-07-18T09:22:51Z
myrole2   2023-07-18T09:33:24Z

3.3.4 角色綁定用戶

[root@k8s-master01 ~]# kubectl create rolebinding myrole-binding --role=myrole2 --user=singless  ##將用戶和角色進行綁定
[root@k8s-master01 ~]# kubectl get rolebinding -owide  ##查看綁定關系
NAME             ROLE           AGE   USERS      GROUPS   SERVICEACCOUNTS
myrole-binding   Role/myrole2   57s   singless

3.4 使用賬戶

下面的(de)(de)例子(zi)表(biao)明使用(yong)singless用(yong)戶可(ke)以看到pod,但是看不到svc,符合我(wo)們的(de)(de)前面創建(jian)role myrole2時所做(zuo)的(de)(de)權限(xian)設置

[root@k8s-master01 ~]# kubectl config use-context singless
Switched to context "singless".
[root@k8s-master01 ~]# kubectl get pod
NAME             READY   STATUS    RESTARTS   AGE
nginx-test-pod   1/1     Running   0          124m
[root@k8s-master01 ~]# kubectl get svc
Error from server (Forbidden): services is forbidden: User "singless" cannot list resource "services" in API group "" in the namespace "default"

使用下列命(ming)令可(ke)以(yi)將(jiang)context切換(huan)回管理員用戶

[root@k8s-master01 ~]# kubectl config use-context kubernetes-admin@kubernetes
posted @ 2025-10-29 14:32  singless233  閱讀(15)  評論(0)    收藏  舉報